提前感谢您对我目前面临的挑战提供的任何见解。我正在运行Python 3.9.1和最新版本的PANDAS和TIINGO库。
问题是一个可靠的API调用已经开始失败的某些报价机。我认为问题出在API提供商身上,但奇怪的是没有其他人报告问题。
我的(简化)代码:
# Loads historical stock data into files
import datetime
#from pandas_datareader import data
import pandas as pd
import io
import os
#import requests
from tiingo import TiingoClient
os.environ["TIINGO_API_KEY"] = 'MY API KEY'
client = TiingoClient()
ticker = 'PG'
last_load_date = '2020-08-19'
today = '2021-02-12'
#idx = client.get_dataframe(ticker, frequency='daily', startDate=last_load_date, endDate=today)
##history = client.get_dataframe(['GOOGL',],
## frequency='daily',
## metric_name='adjClose',
## startDate='2020-01-01',
## endDate='2021-05-31')
prices = client.get_ticker_price(ticker,
fmt='json',
startDate=last_load_date,
endDate=today,
frequency='daily')
失败输出:
Traceback (most recent call last):
File "V:/woodstock/jobs/tiingo_test.py", line 22, in <module>
prices = client.get_ticker_price(ticker,
File "C:UserswoodAppDataLocalProgramsPythonPython39libsite-packagestiingoapi.py", line 241, in get_ticker_price
return response.json()
File "C:UserswoodAppDataLocalProgramsPythonPython39libsite-packagesrequestsmodels.py", line 900, in json
return complexjson.loads(self.text, **kwargs)
File "C:UserswoodAppDataLocalProgramsPythonPython39libjson__init__.py", line 346, in loads
return _default_decoder.decode(s)
File "C:UserswoodAppDataLocalProgramsPythonPython39libjsondecoder.py", line 337, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "C:UserswoodAppDataLocalProgramsPythonPython39libjsondecoder.py", line 355, in raw_decode
raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
我尝试了直接JSON方法(上面)和利用数据框架(首选,但上面注释掉了)。这种方法适用于通用电气这样的股票公司,但不适用于PG、特斯拉和其他公司。
我已经联系了Tiingo的支持人员,但是非常感谢来自社区的任何意见。
谢谢!
Tiingo支持人员非常迅速和专业地回答了我的问题。作为"免费的"作为顾客,他们的服务给我留下了难以置信的印象。
对于其他面临这个问题的人来说,答案是Tiingo对每小时的调用次数和请求的唯一符号总数有限制。API失败的原因是我已经达到了500个报价机的限制,并且正在请求该列表之外的报价机。我将升级我的服务来解决这个问题。