如何使用python alpha_vantage API 返回扩展的日内数据?

问题描述

我使用 alpha vantage python API 已经有一段时间了,但我只需要提取每日和日内时间序列数据。我正在尝试提取扩展的日内数据,但没有任何运气让它工作。尝试运行以下代码

from alpha_vantage.timeseries import TimeSeries

apiKey = 'MY API KEY'

ts = TimeSeries(key = apiKey,output_format = 'pandas')

totalData,_ = ts.get_inTraday_extended(symbol = 'NIO',interval = '15min',slice = 'year1month1')

print(totalData)

给我以下错误

Traceback (most recent call last):
  File "/home/pi/Desktop/test.py",line 9,in <module>
    totalData,slice = 'year1month1')
  File "/home/pi/.local/lib/python3.7/site-packages/alpha_vantage/alphavantage.py",line 219,in _format_wrapper
    self,*args,**kwargs)
  File "/home/pi/.local/lib/python3.7/site-packages/alpha_vantage/alphavantage.py",line 160,in _call_wrapper
    return self._handle_api_call(url),data_key,Meta_data_key
  File "/home/pi/.local/lib/python3.7/site-packages/alpha_vantage/alphavantage.py",line 354,in _handle_api_call
    json_response = response.json()
  File "/usr/lib/python3/dist-packages/requests/models.py",line 889,in json
    self.content.decode(encoding),**kwargs
  File "/usr/lib/python3/dist-packages/simplejson/__init__.py",line 518,in loads
    return _default_decoder.decode(s)
  File "/usr/lib/python3/dist-packages/simplejson/decoder.py",line 370,in decode
    obj,end = self.raw_decode(s)
  File "/usr/lib/python3/dist-packages/simplejson/decoder.py",line 400,in raw_decode
    return self.scan_once(s,idx=_w(s,idx).end())
simplejson.errors.JSONDecodeError: Expecting value: line 1 column 1 (char 0)

有趣的是,如果您查看 TimeSeries class,它指出延长的盘中将作为“一个 csv_reader 对象中的时间序列”返回,而对我有用的其他所有内容都返回为“两个json 对象”。我 99% 确定这与问题有关,但我不完全确定,因为我认为调用日内扩展函数至少会返回一些东西(尽管它采用不同的格式),但只是给了我一个错误

一个有趣的小提示是,该函数拒绝将“adjusted = True”(或 False)作为输入,尽管它在文档中...可能无关,但可能有助于诊断。

解决方法

好像 TIME_SERIES_INTRADAY_EXTENDED 只能返回 CSV 格式,但是 alpha_vantage 包装器应用了 JSON 方法,这会导致错误。

我的解决方法:

from alpha_vantage.timeseries import TimeSeries
import pandas as pd

apiKey = 'MY API KEY'

ts = TimeSeries(key = apiKey,output_format = 'csv')

#download the csv
totalData = ts.get_intraday_extended(symbol = 'NIO',interval = '15min',slice = 'year1month1')

#csv --> dataframe
df = pd.DataFrame(list(totalData[0]))

#setup of column and index
header_row=0
df.columns = df.iloc[header_row]
df = df.drop(header_row)
df.set_index('time',inplace=True)

#show output
print(df)
,

这是一个简单的方法。

ticker = 'IBM'
date= 'year1month2'
apiKey = 'MY API KEY'

df = pd.read_csv('https://www.alphavantage.co/query?function=TIME_SERIES_INTRADAY_EXTENDED&symbol='+ticker+'&interval=15min&slice='+date+'&apikey='+apiKey+'&datatype=csv&outputsize=full') 

#Show output
print(df)
,
import pandas as pd

symbol = 'AAPL'
interval = '15min'
slice = 'year1month1'
api_key = ''
adjusted = '&adjusted=true&'

csv_url = 'https://www.alphavantage.co/query?function=TIME_SERIES_INTRADAY_EXTENDED&symbol='+symbol+'&interval='+interval+'&slice='+slice+adjusted+'&apikey='+api_key

data = pd.read_csv(csv_url)
print(data.head)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...