-
-
Save lebedov/f09030b865c4cb142af1 to your computer and use it in GitHub Desktop.
#!/usr/bin/env python | |
""" | |
Retrieve intraday stock data from Google Finance. | |
""" | |
import csv | |
import datetime | |
import re | |
import pandas as pd | |
import requests | |
def get_google_finance_intraday(ticker, period=60, days=1): | |
""" | |
Retrieve intraday stock data from Google Finance. | |
Parameters | |
---------- | |
ticker : str | |
Company ticker symbol. | |
period : int | |
Interval between stock values in seconds. | |
days : int | |
Number of days of data to retrieve. | |
Returns | |
------- | |
df : pandas.DataFrame | |
DataFrame containing the opening price, high price, low price, | |
closing price, and volume. The index contains the times associated with | |
the retrieved price values. | |
""" | |
uri = 'http://www.google.com/finance/getprices' \ | |
'?i={period}&p={days}d&f=d,o,h,l,c,v&df=cpct&q={ticker}'.format(ticker=ticker, | |
period=period, | |
days=days) | |
page = requests.get(uri) | |
reader = csv.reader(page.content.splitlines()) | |
columns = ['Open', 'High', 'Low', 'Close', 'Volume'] | |
rows = [] | |
times = [] | |
for row in reader: | |
if re.match('^[a\d]', row[0]): | |
if row[0].startswith('a'): | |
start = datetime.datetime.fromtimestamp(int(row[0][1:])) | |
times.append(start) | |
else: | |
times.append(start+datetime.timedelta(seconds=period*int(row[0]))) | |
rows.append(map(float, row[1:])) | |
if len(rows): | |
return pd.DataFrame(rows, index=pd.DatetimeIndex(times, name='Date'), | |
columns=columns) | |
else: | |
return pd.DataFrame(rows, index=pd.DatetimeIndex(times, name='Date')) |
seems to have stopped working, now isnt returning anything - could be me of course
URL is http://www.google.com/finance/getprices?i=60&p=1d&f=d,o,h,l,c,v&df=cpct&q=VOD&x=LON
Empty DataFrame
Columns: []
Index: []
donewhen I run that URL in the browser, it thinks I'm a bot and shuts me down, any way around that please ?
ta
that url failed for me as well.
We're sorry...
... but your computer or network may be sending automated queries. To protect our users, we can't process your request right now.
import requests import pandas as pd import arrow import datetime def get_quote_data(symbol='SBIN.NS', data_range='1d', 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).to('Asia/Calcutta').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 data = get_quote_data('KPIT.NS', '1d', '1m') print(data)
Works great, but is there a way to save this data to a CSV file?
import requests import pandas as pd import arrow import datetime def get_quote_data(symbol='SBIN.NS', data_range='1d', 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).to('Asia/Calcutta').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 data = get_quote_data('KPIT.NS', '1d', '1m') print(data)
Works great, but is there a way to save this data to a CSV file?
data.to_csv('output.csv')
To sum up this string..
Step 1: Install python: https://www.python.org/downloads/
Step 2: Install panda: pip install panda
Step 3: Save this code:
'
import requests
import pandas as pd
import arrow
import datetime
def get_quote_data(symbol='SBIN.NS', data_range='1d', 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).to('Asia/Calcutta').datetime.replace(tzinfo=None), body['timestamp']), name='Datetime')
df = pd.DataFrame(body['indicators']['quote'][0], index=dt)
dg = pd.DataFrame(body['timestamp'])
return df.loc[:, ('open', 'high', 'low', 'close', 'volume')]
data = get_quote_data('SBIN.NS', '5d', '1m')
data.dropna(inplace=True) #removing NaN rows
print(data)
data.to_csv('output.csv')
'
Step 4: Drag the saved python file to CMD and an output CSV will be saved.
what is the symbol for NIFTY50 data
what is the symbol for NIFTY50 data
Yahoo finance symbol for nifty 50 = '^NSEI'
import requests
import pandas as pd
import arrow
import datetime
def get_quote_data(symbol , data_range='1d', 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).to('Asia/Calcutta').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)
df.columns = ['OPEN', 'HIGH','LOW','CLOSE','VOLUME']
return df
for s in symbol:
data = get_quote_data(s,'1d','1m')
data.to_csv(s.strip(".NS")+'.csv')
this is for multiple stock symbols
Hi.
Was anyone able to get hourly information on stock prices, either individual or by S&P?