5

我一直在使用 Romel Torres 的 alpha_vantage 包,但也想直接从 python 使用 Alpha Vantage API(提供更强大的功能)和包请求,如下所述CALL with CURL an API through Python

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]

但是在返回的字典中收到以下错误消息:

{'错误消息':'无效的 API 调用。请重试或访问 TIME_SERIES_DAILY 的文档 ( https://www.alphavantage.co/documentation/ )。'}

使用 requests.post() 的结果是:

response = requests.post(API_URL, data)
{'detail': 'Method "POST" not allowed.'}

我重新检查了文档并遵循了所有必需的 API 参数。感谢我在这里可能缺少的一些帮助以及正确的调用和/或任何其他替代方法。谢谢

4

7 回答 7

7

提示在错误中。将您的请求方法从更改postget

response = requests.get(API_URL, params=data)

并使用作为 Alpha Vantage 数据存在的股票代码。 NIFTY不是股票 - 它是指数。如果您尝试使用您的代码MSFT,它将起作用。

于 2018-05-03T21:00:40.463 回答
4

这就是我在不使用任何包装器的情况下从 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
于 2019-12-03T16:05:03.383 回答
2
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'])
于 2018-07-27T16:13:55.673 回答
1

第一的

您正在使用“csv”数据类型。

“数据类型”:“csv”

但是您正在尝试以 JSON 格式打印

print(response.json())

第二

尝试按照建议使用 get 方法

于 2018-05-20T01:18:50.380 回答
0
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())
于 2020-06-14T10:56:35.910 回答
0

这就是我在没有任何包装的情况下这样做的方式。您可以使用此代码轻松地从 Alpha Vantage 中提取历史股票价格。您所要做的就是插入您的符号和令牌。有关提取 Alpha Vantage 数据的更多功能,请随时查看此链接: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')
于 2020-09-07T08:49:59.623 回答
0

看起来您,在 data 中的最后一个元素之后有一个额外的逗号 ( )。

于 2019-06-14T12:22:44.057 回答