Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
55 changes: 14 additions & 41 deletions googlefinance/__init__.py
Original file line number Diff line number Diff line change
@@ -1,45 +1,38 @@
import json
import sys
import demjson

try:
from urllib.request import Request, urlopen
except ImportError: # python 2
from urllib2 import Request, urlopen

__author__ = 'Hongtao Cai'

googleFinanceKeyToFullName = {
u'id' : u'ID',
u't' : u'StockSymbol',
u'e' : u'Index',
u'l' : u'LastTradePrice',
u'lo' : u'LowestTradePrice',
u'hi' : u'HighestTradePrice',
u'op' : u'Open',
u'mc' : u'MarketCapacity',
u'c' : u'Change',
u'cp' : u'ChangeInPercent',
u'l_cur' : u'LastTradeWithCurrency',
u'ltt' : u'LastTradeTime',
u'lt_dts' : u'LastTradeDateTime',
u'lt' : u'LastTradeDateTimeLong',
u'div' : u'Dividend',
u'yld' : u'Yield',
u's' : u'LastTradeSize',
u'c' : u'Change',
u'cp' : u'ChangePercent',
u'el' : u'ExtHrsLastTradePrice',
u'el_cur' : u'ExtHrsLastTradeWithCurrency',
u'elt' : u'ExtHrsLastTradeDateTimeLong',
u'ec' : u'ExtHrsChange',
u'ecp' : u'ExtHrsChangePercent',
u'pcls_fix': u'PreviousClosePrice'
}

def buildUrl(symbols):
symbol_list = ','.join([symbol for symbol in symbols])
# a deprecated but still active & correct api
return 'http://finance.google.com/finance/info?client=ig&q=' \
return 'http://finance.google.com/finance?output=json&q=' \
+ symbol_list

def buildNewsUrl(symbol, qs='&start=0&num=1000'):
return 'http://www.google.com/finance/company_news?output=json&q=' \
+ symbol + qs
# https://finance.google.com/finance/historical?q=aapl&output=csv
# https://finance.google.com/finance/historical?q=aapl&startdate=Dec+14%2C+2016&enddate=Dec+13%2C+2017

def request(symbols):
url = buildUrl(symbols)
Expand All @@ -48,28 +41,9 @@ def request(symbols):
# remove special symbols such as the pound symbol
content = resp.read().decode('ascii', 'ignore').strip()
content = content[3:]
# print(content)
return content

def requestNews(symbol):
url = buildNewsUrl(symbol)
print "url: ", url
req = Request(url)
resp = urlopen(req)
content = resp.read()

content_json = demjson.decode(content)

#print "total news: ", content_json['total_number_of_news']

article_json = []
news_json = content_json['clusters']
for cluster in news_json:
for article in cluster:
if article == 'a':
article_json.extend(cluster[article])

return article_json

def replaceKeys(quotes):
global googleFinanceKeyToFullName
quotesWithReadableKey = []
Expand Down Expand Up @@ -104,9 +78,6 @@ def getQuotes(symbols):
content = json.loads(request(symbols))
return replaceKeys(content);

def getNews(symbol):
return requestNews(symbol);

if __name__ == '__main__':
try:
symbols = sys.argv[1]
Expand All @@ -115,5 +86,7 @@ def getNews(symbol):

symbols = symbols.split(',')

print(json.dumps(getNews("GOOG"), indent=2))
print(json.dumps(getQuotes(symbols), indent=2))
try:
print(json.dumps(getQuotes(symbols), indent=2))
except:
print("Fail")