Skip to content

Commit ff5fbd8

Browse files
committed
Merge pull request #177 from gliptak/googlequotes
ENH: Implement Google quote functionality
2 parents 5c1f613 + 21772ae commit ff5fbd8

File tree

3 files changed

+35
-12
lines changed

3 files changed

+35
-12
lines changed

pandas_datareader/data.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
import warnings
66

77
from pandas_datareader.google.daily import GoogleDailyReader
8-
from pandas_datareader.google.quotes import _get_data as get_quote_google # noqa
8+
from pandas_datareader.google.quotes import GoogleQuotesReader
99

1010
from pandas_datareader.yahoo.daily import YahooDailyReader
1111
from pandas_datareader.yahoo.quotes import YahooQuotesReader
@@ -44,6 +44,10 @@ def get_quote_yahoo(*args, **kwargs):
4444
return YahooQuotesReader(*args, **kwargs).read()
4545

4646

47+
def get_quote_google(*args, **kwargs):
48+
return GoogleQuotesReader(*args, **kwargs).read()
49+
50+
4751
def DataReader(name, data_source=None, start=None, end=None,
4852
retry_count=3, pause=0.001, session=None):
4953
"""

pandas_datareader/google/quotes.py

Lines changed: 27 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,29 @@
1-
def _get_data(symbols):
2-
"""
3-
Get current yahoo quote
1+
import pandas
2+
from pandas_datareader.base import _BaseReader
3+
import json
4+
import re
45

5-
(Should) Returns a DataFrame
66

7-
ToDo: Not implemented
8-
"""
9-
msg = "Google Finance doesn't have this functionality - can't get quote for %s" % symbols
10-
raise NotImplementedError(msg)
7+
class GoogleQuotesReader(_BaseReader):
8+
9+
"""Get current google quote"""
10+
11+
@property
12+
def url(self):
13+
return 'http://www.google.com/finance/info'
14+
15+
@property
16+
def params(self):
17+
if isinstance(self.symbols, pandas.compat.string_types):
18+
sym_list = self.symbols
19+
else:
20+
sym_list = ','.join(self.symbols)
21+
params = {'q': sym_list}
22+
return params
23+
24+
def _read_lines(self, out):
25+
buffer = out.read()
26+
m = re.search('// ', buffer)
27+
result = json.loads(buffer[m.start() + len('// '):])
28+
return pandas.DataFrame(map(lambda x: float(x['l']), result),
29+
index=map(lambda x: x['t'], result))

pandas_datareader/tests/test_data.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -72,9 +72,9 @@ def test_google(self):
7272
self.assertRaises(Exception, web.DataReader, "NON EXISTENT TICKER",
7373
'google', start, end)
7474

75-
def test_get_quote_fails(self):
76-
self.assertRaises(NotImplementedError, web.get_quote_google,
77-
pd.Series(['GOOG', 'AAPL', 'GOOG']))
75+
def test_get_quote_stringlist(self):
76+
df = web.get_quote_google(['GOOG', 'AMZN', 'GOOG'])
77+
assert_series_equal(df.ix[0], df.ix[2])
7878

7979
def test_get_goog_volume(self):
8080
for locale in self.locales:

0 commit comments

Comments
 (0)