Почему pandas_datareader прекратил получать данные из API IEX и Robinhood - PullRequest
0 голосов
/ 18 июня 2019

Я уже некоторое время без всяких проблем использую pandas_datareader для получения цен акций из API IEX и Robinhood. Однако недавно (в начале этой недели) мой код начал давать сбой.

Вот код и ошибка:

IEX API

import pandas_datareader.data as web
import datetime as dt

end = dt.datetime.today()
start = end - relativedelta(months=20)
data = web.DataReader('MSFT', 'iex', start, end)

И ошибка:

web.DataReader('MSFT', 'iex', start, end)
Traceback (most recent call last):

  File "<ipython-input-88-2781d4515d5c>", line 1, in <module>
    web.DataReader('MSFT', 'iex', start, end)

  File "/anaconda3/lib/python3.7/site-packages/pandas_datareader/data.py", line 322, in DataReader
    session=session).read()

  File "/anaconda3/lib/python3.7/site-packages/pandas_datareader/iex/daily.py", line 91, in read
    self._get_params(self.symbols))

  File "/anaconda3/lib/python3.7/site-packages/pandas_datareader/base.py", line 84, in _read_one_data
    out = self._read_url_as_StringIO(url, params=params)

  File "/anaconda3/lib/python3.7/site-packages/pandas_datareader/base.py", line 95, in _read_url_as_StringIO
    response = self._get_response(url, params=params)

  File "/anaconda3/lib/python3.7/site-packages/pandas_datareader/base.py", line 155, in _get_response
    raise RemoteDataError(msg)

RemoteDataError: Unable to read URL: https://api.iextrading.com/1.0/stock/market/batch?symbols=MSFT&types=chart&range=2y
Response Text:
b'Forbidden'

Robinhood API

import pandas_datareader.data as web
import datetime as dt

end = dt.datetime.today()
start = end - relativedelta(months=20)
data = web.DataReader('MSFT', 'robinhood', start, end)

И ошибка:

web.DataReader('MSFT', 'robinhood', start, end)
Traceback (most recent call last):

  File "<ipython-input-90-0a0fc1b0d4ce>", line 1, in <module>
    web.DataReader('MSFT', 'robinhood', start, end)

  File "/anaconda3/lib/python3.7/site-packages/pandas_datareader/data.py", line 391, in DataReader
    session=session).read()

  File "/anaconda3/lib/python3.7/site-packages/pandas_datareader/base.py", line 77, in read
    return self._read_one_data(self.url, self.params)

  File "/anaconda3/lib/python3.7/site-packages/pandas_datareader/base.py", line 86, in _read_one_data
    out = self._get_response(url, params=params).json()

  File "/anaconda3/lib/python3.7/site-packages/pandas_datareader/base.py", line 136, in _get_response
    last_response_text = response.text.encode(response.encoding)

TypeError: encode() argument 1 must be str, not None

Точный код до недавнего времени работал нормально. Интересно, что изменилось, и что я могу сделать, чтобы исправить это.

Ответы [ 2 ]

2 голосов
/ 20 июня 2019

С https://iextrading.com/developer/docs/#stocks

"1 июня 2019 года IEX Group удалила все данные, не относящиеся к IEX, и некоторые функции в соответствии с расписанием. IEX Cloud, не являющаяся платформой Exchange, продолжитпредоставить доступ к сторонним источникам данных. "

Похоже, вам понадобятся доступ и секретные ключи для вызова их API.Я ищу это для моего приложения на python stock_quote, которое поразило эту проблему.

1 голос
/ 22 июня 2019

Большинство API-интерфейсов, перечисленных в документации по pandas_datareader, устарели и больше не работают в среде pandas_datareader (Yahoo, Google и т. Д.).

Тем не менее, Tiingo работает просто отлично, по крайней мере, на данный момент.

Чтобы использовать Tiingo API, вам сначала нужно зарегистрировать бесплатный аккаунт (или платный, если вы хотите премиум-функции). Вы можете сделать это здесь . После активации вашей учетной записи Tiingo вы получите ключ API, который вы можете использовать для получения исторических данных о запасах с помощью pandas_datareader (подробности здесь ).

...