为什么pandas_datareader停止从IEX和Robinhood API检索数据

时间:2019-06-18 17:29:51

标签: python pandas-datareader

一段时间以来,我一直在使用pandas_datareader从IEX和Robinhood API检索股票价格,没有任何障碍。但是,最近(本周初),我的代码开始失败。

这是代码和错误:

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

直到最近,确切的代码才能正常工作。我不知道发生了什么变化,以及如何纠正它。

3 个答案:

答案 0 :(得分:2)

来自https://iextrading.com/developer/docs/#stocks

“ 2019年6月1日,IEX Group将按照时间表删除所有非IEX数据和某些功能。非Exchange平台IEX Cloud将继续提供对第三方数据源的访问。”

看起来您需要访问权限和秘密密钥才能调用其API。我正在针对遇到此问题的python应用stock_quote进行调查。

答案 1 :(得分:1)

pandas_datareader文档中列出的大多数API已被弃用,并且不再通过pandas_datareader框架(Yahoo,Google等)生效。

但是,Tiingo至少现在还可以。

要使用Tiingo API,您首先需要注册一个免费帐户(如果需要高级功能,则需要付费)。您可以这样做here。激活Tiingo帐户后,您将收到一个API密钥,可用于通过pandas_datareader检索库存历史数据(查找详细信息here)。

答案 2 :(得分:0)

您可以将高效的Python库用于Yahoo Finance yfinanceGitHub link)。

您还可以找到示例代码herehere