So I'm trying to parse data from the Google Financial API. I have it working for single stock quotes, but for multiple stock quotes it will not work. json loads does not work with multiple dictionaries.
import urllib.request
import json
import time
def get_stock(url, y):
data = urllib.request.urlopen(url)
read = data.read().decode('UTF-8')
json_data = json.loads(read[5:-2])
for n in range(int(len(y.replace(",", ""))/4)):
print(y[4*n:4*n+4].upper(), json_data['l'])
x = ''
while x != 'exit':
x = input("Enter how often, in minutes (minimum one minute), you want the stock price to be updated; or type 'exit': ")
z = input("Enter the market that your stock(s) are in: ")
y = input("Enter the stock(s) that you want to retrieve information for (use commas if neccesary); or type 'exit': ")
y = y.replace(" ", "")
url = 'http://finance.google.com/finance/info?client=ig&q=%s:%s' % (z, y)
while True:
get_stock(url, y)
leave = input("Type 'exit' to leave, or wait until the next quote: ")
if leave == 'exit':
break
time.sleep(int(x))
Here is an example of the JSON output from the Google API:
{
"id": "304466804484872"
,"t" : "GOOG"
,"e" : "NASDAQ"
,"l" : "496.18"
,"l_fix" : "496.18"
,"l_cur" : "496.18"
,"s": "2"
,"ltt":"4:14PM EST"
,"lt" : "Jan 13, 4:14PM EST"
,"lt_dts" : "2015-01-13T16:14:24Z"
,"c" : "+3.63"
,"c_fix" : "3.63"
,"cp" : "0.74"
,"cp_fix" : "0.74"
,"ccol" : "chg"
,"pcls_fix" : "492.55"
,"el": "497.00"
,"el_fix": "497.00"
,"el_cur": "497.00"
,"elt" : "Jan 13, 7:59PM EST"
,"ec" : "+0.82"
,"ec_fix" : "0.82"
,"ecp" : "0.17"
,"ecp_fix" : "0.17"
,"eccol" : "chg"
,"div" : ""
,"yld" : ""
}
,{
"id": "22144"
,"t" : "AAPL"
,"e" : "NASDAQ"
,"l" : "110.22"
,"l_fix" : "110.22"
,"l_cur" : "110.22"
,"s": "2"
,"ltt":"4:14PM EST"
,"lt" : "Jan 13, 4:14PM EST"
,"lt_dts" : "2015-01-13T16:14:23Z"
,"c" : "+0.97"
,"c_fix" : "0.97"
,"cp" : "0.89"
,"cp_fix" : "0.89"
,"ccol" : "chg"
,"pcls_fix" : "109.25"
,"el": "110.30"
,"el_fix": "110.30"
,"el_cur": "110.30"
,"elt" : "Jan 13, 7:59PM EST"
,"ec" : "+0.08"
,"ec_fix" : "0.08"
,"ecp" : "0.07"
,"ecp_fix" : "0.07"
,"eccol" : "chg"
,"div" : "0.47"
,"yld" : "1.71"
}
I can't seem to find a working solution. The split method won't work because of the ubiquity of the comma in the string. linesplit won't work because of the numerous \n line breaks.
I just need to get the string split so I can use json dumps and then run iterations over each using json loads to parse the data for access.