In python 2.7 shell I ran the follwoings:
$from googlefinance import getQuotes
$import json
$from urllib2 import urlopen
$print json.dumps(getQuotes('AAPL'), indent=2)
Got error message on the 4th command as follows:
Traceback (most recent call last):
Python Shell, prompt 3, line 1
File "C:\Users\mlashkar\_development\python\v2.7\Lib\site-packages\googlefinance\__init__.py", line 70, in getQuotes
content = json.loads(request(symbols))
File "C:\Users\mlashkar\_development\python\v2.7\Lib\site-packages\googlefinance\__init__.py", line 33, in request
resp = urlopen(req)
File "C:\Users\mlashkar\_development\python\v2.7\Lib\urllib2.py", line 154, in urlopen
return opener.open(url, data, timeout)
File "C:\Users\mlashkar\_development\python\v2.7\Lib\urllib2.py", line 435, in open
response = meth(req, response)
File "C:\Users\mlashkar\_development\python\v2.7\Lib\urllib2.py", line 548, in http_response
'http', request, response, code, msg, hdrs)
File "C:\Users\mlashkar\_development\python\v2.7\Lib\urllib2.py", line 473, in error
return self._call_chain(*args)
File "C:\Users\mlashkar\_development\python\v2.7\Lib\urllib2.py", line 407, in _call_chain
result = func(*args)
File "C:\Users\mlashkar\_development\python\v2.7\Lib\urllib2.py", line 556, in http_error_default
raise HTTPError(req.get_full_url(), code, msg, hdrs, fp)
urllib2.HTTPError: HTTP Error 404: Not Found
It seems like Google Finance modified their URLs/endpoints and the
googlefinance
package has not been updated to reflect the change.Since most of these changes are rather opaque to end-users (and the library you're using hasn't been updated in 2 years), you might have better luck dealing with the raw Google Finance response yourself.
The Google Finance Endpoint
You can retrieve information about a particular ticker symbol via the following URL:
The Response
Google Finance returns JSON results in this format
It can't be loaded by Python's JSON parser as-is because it has leading
//
, and wraps everything inside[]
. It also has Unicode-escaped characters in various strings that need to be decoded.Complete code and parsing
I'm going to use the
requests
module for this, but if you want an example with the built-inurllib
module, I can show that as well.This would output:
There is a lot more data that's included in a full ticker JSON than what I'm outputting, so it's up to you to decide how you want to use any of it.
Alternatives
Alternatively, you could use the
yahoo-finance
module, which is probably less likely to have issues like this as Yahoo still provide a real finance API.