如何直接从 Python 使用 Alpha Vantage API
How to use the Alpha Vantage API directly from Python
我一直在使用 Romel Torres 的 alpha_vantage 包,但也想直接从 python 使用 Alpha Vantage API(提供更强大的功能),如所述的包请求这里 :
import requests
import alpha_vantage
API_URL = "https://www.alphavantage.co/query"
data = {
"function": "TIME_SERIES_DAILY",
"symbol": "NIFTY",
"outputsize": "compact",
"datatype": "csv"
"apikey": "XXX",
}
response = requests.get(API_URL, data)
print(response.json())[/code]
但在返回的字典中收到以下错误消息:
{'Error Message': 'Invalid API call. Please retry or visit the documentation (https://www.alphavantage.co/documentation/) for TIME_SERIES_DAILY.'}
使用 requests.post() 结果是:
response = requests.post(API_URL, data)
{'detail': 'Method "POST" not allowed.'}
我已重新检查文档并遵循所有必需的 API 参数。感谢一些帮助,我可能在这里遗漏了什么,以及正确的调用是什么 and/or 任何其他替代方法。谢谢
提示在错误中。将请求的方法从 post
更改为 get
:
response = requests.get(API_URL, params=data)
并使用作为 Alpha Vantage 数据存在的股票代码。 NIFTY
不是股票 - 它是指数。如果您使用 MSFT
尝试您的代码,它将起作用。
第一个
您正在使用 'csv' 数据类型。
"datatype": "csv"
但是您正在尝试以 JSON 格式打印
print(response.json())
第二
按照建议尝试使用 get 方法
import requests
import alpha_vantage
import json
API_URL = "https://www.alphavantage.co/query"
symbols = ['QCOM',"INTC","PDD"]
for symbol in symbols:
data = { "function": "TIME_SERIES_INTRADAY",
"symbol": symbol,
"interval" : "60min",
"datatype": "json",
"apikey": "XXX" }
response = requests.get(API_URL, data)
data = response.json()
print(symbol)
a = (data['Time Series (60min)'])
keys = (a.keys())
for key in keys:
print(a[key]['2. high'] + " " + a[key]['5. volume'])
数据中的最后一个元素之后似乎多了一个逗号 (,
)。
这就是我在不使用任何包装器的情况下从 Alpha Vantage 获取每日股票时间序列的方法。接收后,我将数据转换成pandas数据框,以便进一步处理。
import requests
import pandas as pd
API_URL = "https://www.alphavantage.co/query"
symbol = 'SMBL'
data = { "function": "TIME_SERIES_DAILY",
"symbol": symbol,
"outputsize" : "full",
"datatype": "json",
"apikey": "your_api_key" }
response = requests.get(API_URL, data)
response_json = response.json() # maybe redundant
data = pd.DataFrame.from_dict(response_json['Time Series (Daily)'], orient= 'index').sort_index(axis=1)
data = data.rename(columns={ '1. open': 'Open', '2. high': 'High', '3. low': 'Low', '4. close': 'Close', '5. adjusted close': 'AdjClose', '6. volume': 'Volume'})
data = data[[ 'Open', 'High', 'Low', 'Close', 'AdjClose', 'Volume']]
data.tail() # check OK or not
import requests
import alpha_vantage
API_URL = "https://www.alphavantage.co/query"
data = {
"function": "TIME_SERIES_DAILY",
"symbol": "AAPL",
"outputsize": "compact",
"apikey": "your key"
}
response = requests.get(API_URL, params=data)
print(response.json())
这就是我在没有任何包装的情况下的做法。您可以使用此代码轻松地从 Alpha Vantage 中提取历史股票价格。您所要做的就是插入您的符号和代币。有关提取 Alpha Vantage 数据的更多功能,请随时查看此 link:https://github.com/hklchung/StockPricePredictor/blob/master/2020/alphavantage_funcs.py
def request_stock_price_hist(symbol, token, sample = False):
if sample == False:
q_string = 'https://www.alphavantage.co/query?function=TIME_SERIES_DAILY_ADJUSTED&symbol={}&outputsize=full&apikey={}'
else:
q_string = 'https://www.alphavantage.co/query?function=TIME_SERIES_DAILY_ADJUSTED&symbol={}&apikey={}'
print("Retrieving stock price data from Alpha Vantage (This may take a while)...")
r = requests.get(q_string.format(symbol, token))
print("Data has been successfully downloaded...")
date = []
colnames = list(range(0, 7))
df = pd.DataFrame(columns = colnames)
print("Sorting the retrieved data into a dataframe...")
for i in tqdm(r.json()['Time Series (Daily)'].keys()):
date.append(i)
row = pd.DataFrame.from_dict(r.json()['Time Series (Daily)'][i], orient='index').reset_index().T[1:]
df = pd.concat([df, row], ignore_index=True)
df.columns = ["open", "high", "low", "close", "adjusted close", "volume", "dividend amount", "split cf"]
df['date'] = date
return df
以上函数的使用方法如下:
df = request_stock_price_hist('IBM', 'REPLACE_YOUR_TOKEN')
df.to_csv('output.csv')
我一直在使用 Romel Torres 的 alpha_vantage 包,但也想直接从 python 使用 Alpha Vantage API(提供更强大的功能),如所述的包请求这里
import requests
import alpha_vantage
API_URL = "https://www.alphavantage.co/query"
data = {
"function": "TIME_SERIES_DAILY",
"symbol": "NIFTY",
"outputsize": "compact",
"datatype": "csv"
"apikey": "XXX",
}
response = requests.get(API_URL, data)
print(response.json())[/code]
但在返回的字典中收到以下错误消息:
{'Error Message': 'Invalid API call. Please retry or visit the documentation (https://www.alphavantage.co/documentation/) for TIME_SERIES_DAILY.'}
使用 requests.post() 结果是:
response = requests.post(API_URL, data)
{'detail': 'Method "POST" not allowed.'}
我已重新检查文档并遵循所有必需的 API 参数。感谢一些帮助,我可能在这里遗漏了什么,以及正确的调用是什么 and/or 任何其他替代方法。谢谢
提示在错误中。将请求的方法从 post
更改为 get
:
response = requests.get(API_URL, params=data)
并使用作为 Alpha Vantage 数据存在的股票代码。 NIFTY
不是股票 - 它是指数。如果您使用 MSFT
尝试您的代码,它将起作用。
第一个
您正在使用 'csv' 数据类型。
"datatype": "csv"
但是您正在尝试以 JSON 格式打印
print(response.json())
第二
按照建议尝试使用 get 方法
import requests
import alpha_vantage
import json
API_URL = "https://www.alphavantage.co/query"
symbols = ['QCOM',"INTC","PDD"]
for symbol in symbols:
data = { "function": "TIME_SERIES_INTRADAY",
"symbol": symbol,
"interval" : "60min",
"datatype": "json",
"apikey": "XXX" }
response = requests.get(API_URL, data)
data = response.json()
print(symbol)
a = (data['Time Series (60min)'])
keys = (a.keys())
for key in keys:
print(a[key]['2. high'] + " " + a[key]['5. volume'])
数据中的最后一个元素之后似乎多了一个逗号 (,
)。
这就是我在不使用任何包装器的情况下从 Alpha Vantage 获取每日股票时间序列的方法。接收后,我将数据转换成pandas数据框,以便进一步处理。
import requests
import pandas as pd
API_URL = "https://www.alphavantage.co/query"
symbol = 'SMBL'
data = { "function": "TIME_SERIES_DAILY",
"symbol": symbol,
"outputsize" : "full",
"datatype": "json",
"apikey": "your_api_key" }
response = requests.get(API_URL, data)
response_json = response.json() # maybe redundant
data = pd.DataFrame.from_dict(response_json['Time Series (Daily)'], orient= 'index').sort_index(axis=1)
data = data.rename(columns={ '1. open': 'Open', '2. high': 'High', '3. low': 'Low', '4. close': 'Close', '5. adjusted close': 'AdjClose', '6. volume': 'Volume'})
data = data[[ 'Open', 'High', 'Low', 'Close', 'AdjClose', 'Volume']]
data.tail() # check OK or not
import requests
import alpha_vantage
API_URL = "https://www.alphavantage.co/query"
data = {
"function": "TIME_SERIES_DAILY",
"symbol": "AAPL",
"outputsize": "compact",
"apikey": "your key"
}
response = requests.get(API_URL, params=data)
print(response.json())
这就是我在没有任何包装的情况下的做法。您可以使用此代码轻松地从 Alpha Vantage 中提取历史股票价格。您所要做的就是插入您的符号和代币。有关提取 Alpha Vantage 数据的更多功能,请随时查看此 link:https://github.com/hklchung/StockPricePredictor/blob/master/2020/alphavantage_funcs.py
def request_stock_price_hist(symbol, token, sample = False):
if sample == False:
q_string = 'https://www.alphavantage.co/query?function=TIME_SERIES_DAILY_ADJUSTED&symbol={}&outputsize=full&apikey={}'
else:
q_string = 'https://www.alphavantage.co/query?function=TIME_SERIES_DAILY_ADJUSTED&symbol={}&apikey={}'
print("Retrieving stock price data from Alpha Vantage (This may take a while)...")
r = requests.get(q_string.format(symbol, token))
print("Data has been successfully downloaded...")
date = []
colnames = list(range(0, 7))
df = pd.DataFrame(columns = colnames)
print("Sorting the retrieved data into a dataframe...")
for i in tqdm(r.json()['Time Series (Daily)'].keys()):
date.append(i)
row = pd.DataFrame.from_dict(r.json()['Time Series (Daily)'][i], orient='index').reset_index().T[1:]
df = pd.concat([df, row], ignore_index=True)
df.columns = ["open", "high", "low", "close", "adjusted close", "volume", "dividend amount", "split cf"]
df['date'] = date
return df
以上函数的使用方法如下:
df = request_stock_price_hist('IBM', 'REPLACE_YOUR_TOKEN')
df.to_csv('output.csv')