从很大的时间范围内获取每分钟的库存数据Python

时间:2018-11-03 04:23:52

标签: python pandas finance yahoo-finance

因此,我试图在一年的时间间隔内获取每分钟的库存数据,并且我知道Google Finance API不再起作用,所以我做了一些挖掘工作,从一个旧的github线程中找到了一些代码,这些代码可以找到从Yahoo财务数据起5天内的范围;但是,即使我输入了默认值为1天的“ 1Y”之类的关键字,它也不会做其他事情。这是下面的代码:

import requests
import pandas as pd
import arrow
import datetime
import os

def get_quote_data(symbol='AAPL', data_range='5d', data_interval='1m'):
    res = requests.get('https://query1.finance.yahoo.com/v8/finance/chart/{symbol}?range={data_range}&interval={data_interval}'.format(**locals()))
    data = res.json()
    body = data['chart']['result'][0]    
    dt = datetime.datetime
    dt = pd.Series(map(lambda x: arrow.get(x).datetime.replace(tzinfo=None), body['timestamp']), name='Datetime')
    df = pd.DataFrame(body['indicators']['quote'][0], index=dt)
    dg = pd.DataFrame(body['timestamp'])    
    df = df.loc[:, ('open', 'high', 'low', 'close', 'volume')]
    df.dropna(inplace=True)     #removing NaN rows
    df.columns = ['OPEN', 'HIGH','LOW','CLOSE','VOLUME']    #Renaming columns in pandas

    return df

2 个答案:

答案 0 :(得分:0)

body['meta']['validRanges']告诉您:

['1d', '5d', '1mo', '3mo', '6mo', '1y', '2y', '5y', '10y', 'ytd', 'max']

您要的是1Y,而不是1y。这种差异很重要。

通过这种方式,您可以更轻松地加载时间戳,如下所示:

pd.to_datetime(body['timestamp'], unit='s')

答案 1 :(得分:0)

print('stock ticker: {0}'.format(get_quote_data(symbol='AAPL', data_range='1d', data_interval='1m')))

有效