Я пытаюсь создать приложение, которое обменивается информацией с API (точнее, Questrade API). API использует oauth2 для безопасности и аутентификации.
Мне удалось 1 получить токены авторизации, обновить токены и запросить основную информацию (информацию о моем счете и котировки акций).
Однако при попытке запросить котировки опционов на акции я столкнулся с проблемой (как описано здесь ).
Я пробовал много разных перестановок, но безрезультатно. Это то, что я сделал до сих пор:
1). Я взял пример, показанный в разделе «Пример запроса», приведенном в ссылке выше, и выполнил jsondecode
, чтобы получить эквивалент MATLAB и «точный шаблон», для которого Структура параметра должна быть закодирована:
>> eg_param = jsondecode('{"filters":{"optionType":"Call","underlyingId":27426,"expiryDate":"2017-01-20T00:00:00.000000-05:00","minstrikePrice":70,"maxstrikePrice":80},"optionIds":[9907637, 9907638]}')
eg_param =
struct with fields:
filters: [1×1 struct]
optionIds: [2×1 double]
>> eg_param.filters
ans =
struct with fields:
optionType: 'Call'
underlyingId: 27426
expiryDate: '2017-01-20T00:00:00.000000-05:00'
minstrikePrice: 70
maxstrikePrice: 80
>> eg_param.optionIds
ans =
9907637
9907638
2). Подставили мои фактические значения (real_params
) для тех, что в примере:
real_params.optionIds = 23255262;
real_params.filters.optionType = 'Call';
real_params.filters.expiryDate ='2018-11-09T00:00:00.000000-05:00';
real_params.filters.underlyingId = 40825;
real_params.filters.minstrikePrice = [];
real_params.filters.maxstrikePrice = [];
3). Изменен параметр weboptions
'RequestMethod
на post
web_opt.RequestMethod = 'Post';
4). Использовал функцию webwrite
, в отличие от 'webread' для публикации и запроса к серверу:
new_data = webwrite(['https://api01.iq.questrade.com/',...
'v1/markets/quotes/options'], real_params, web_opt);
Однако, когда я делаю это, появляется сообщение об ошибке:
*The server returned the status 400 with
message "Bad Request" in response to the
request to URL
https://api01.iq.questrade.com/v1/markets/quotes/options.*
Я пробовал много разных перестановок, включая смену скобок, [], {}, {{}} и использование разных значений для параметров, но результат тот же. Кроме того, всякий раз, когда я проверял, я обновлял токен доступа и проверял работоспособность соединения с помощью запроса «Информация об учетной записи», поэтому эта ошибка не связана с какой-либо авторизацией, безопасностью или проблемой соединения.
1 Например, для получения информации об учетной записи, которую веб-сайт указывает как:
GET https://api01.iq.questrade.com/v1/accounts
У меня 1) . использовал MATLAB weboptions
и создал объект для хранения информации о токене в HeaderFields
:
web_opt = weboptions;
web_opt.RequestMethod = 'Get';
headerFields = {'Authorization', ['Bearer ', 'ZHHgMgh0up5UqJ9TSOIALpkoVpi0']};
web_opt.HeaderFields = headerFields;
и 2) . запросил сервер, используя:
data = webread(['https://api01.iq.questrade.com/', 'v1/accounts'], web_opt);
И это обеспечивает связь с сервером API, и MATLAB сохраняет информацию о моей учетной записи в виде массива структуры в переменной data
.