Exante API. Запрос на сервер и получение данных. Часть 4Рассмотрим пример получения свойств символа AAPL с сервера. Запрос на серверДанный запрос в документации описывается так: Обмен происходит по стандартному протоколу json. Для формирования запроса нужен адрес сервера, по которому находится информация и коды доступа, которые помещаются в параметры запроса. В общем виде адрес выглядит как: https://api-demo.exante.eu/md/{version}/symbols/{symbolId} где:
URL запроса для AAPL, с версией API 1.0: https://api-demo.exante.eu/md/1.0/symbols/AAPL.NASDAQ Запрос на языке Python: requests.get("https://api-demo.exante.eu/md/1.0/symbols/AAPL.NASDAQ", auth=("f8767ed3-860d-4d55-bf7f-a98649b6b8b0", "plbsixdQNlUIX8BfCNEM")).json() Здесь в параметре auth передаются имя приложения и ключ, полученный на этапе регистрации приложения. Если информация доступна, получим ответ сервера 200, и нужные данные, упакованные в словарь: {'country': 'US', 'currency': 'USD', 'description': 'Apple', 'exchange': 'NASDAQ', 'expiration': None, 'group': None, 'i18n': {}, 'id': 'AAPL.NASDAQ', 'mpi': 0.01, 'name': 'Apple', 'optionData': None, 'ticker': 'AAPL', 'type': 'STOCK'} Необходимо предусмотреть обработку ошибок, иначе программа будет аварийно останавливаться, если сервер недоступен или долго отвечает. Полный код для отправки запроса и обработки ответа, может выглядеть так: # выбор символа и получения его свойств def symbol_select(self): name_class = 'MainClass:' name_func = 'symbol_select: ' # формирование url для запроса, в ответе dict url_requests = self.server + "/md/1.0/symbols/" + self.correction_name(self.symbol) + "." + self.exchange try: response = requests.get(url_requests, auth=(self.appl_name, self.appl_key), timeout=self.timeout_).json() return response except Timeout: print(name_class + name_func + "Сервер по адресу: ", url_requests, " не отвечает. TimeoutError") return False except ConnectionError: print(name_class + name_func + "Сервер по адресу: ", url_requests, " не отвечает, ошибка в имени. ConnectionError") return False except HTTPError: print(name_class + name_func + "Сервер по адресу: ", url_requests, " не отвечает. HTTPError") return False except TooManyRedirects: print(name_class + name_func + "Сервер по адресу: ", url_requests, " не отвечает. TooManyRedirects") return False except JSONDecodeError: print(name_class + name_func + "Ошибка декодирования. Неверное имя символа. JSONDecodeError") return False Получение свойств символа оформлено в виде функции класса. В запрос requests добавлен параметр timeout, который ограничивает время ожидания ответа. Ответ в виде словаря будет находиться в переменной response Обработка ответа сервераПолученный ответ нужно обработать: извлечь из словаря необходимые данные, используя указанные ключи. Обработку ответа можно сделать в отдельном модуле. def init_value(self, symbol_info: dict): if 'ticker' in symbol_info: self.ticker = symbol_info['ticker'] if 'mpi' in symbol_info: self.step_price = symbol_info['mpi'] if 'currency' in symbol_info: self.currency = symbol_info['currency'] if 'id' in symbol_info: self.symb_id = symbol_info['id'] if 'description' in symbol_info: self.description = symbol_info['description'] if 'name' in symbol_info: self.name = symbol_info['name'] Здесь symbol_info - это переменная response, в которой находится ответ сервера.
Автор: Lug77 | |
Категория: Разработка | Добавил: lugovtsov7 (28.09.2020) | |
Просмотров: 984 | Теги: |
Всего комментариев: 0 | |