Skip to content

Commit 083bbee

Browse files
author
Brian
committed
add interface to YQL for ticker info from yahoo
1 parent e914dc3 commit 083bbee

File tree

2 files changed

+57
-0
lines changed

2 files changed

+57
-0
lines changed

pytradelib/yahoo/__init__.py

Whitespace-only changes.

pytradelib/yahoo/yql.py

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
from urllib import urlencode
2+
3+
from pytradelib.utils import batch, bulk_download
4+
5+
def get_yql_url(yql):
6+
base_url = 'http://query.yahooapis.com/v1/public/yql?'
7+
url = base_url + urlencode({'q': yql,
8+
'env': 'store://datatables.org/alltableswithkeys',
9+
'format': 'json'})
10+
if len(url) > (2 * 1024):
11+
raise Exception('URL must be shorter than 2048 characters')
12+
return url
13+
14+
15+
_EXCHANGES = {
16+
'ASE': 'AMEX',
17+
'NYQ': 'NYSE',
18+
'NMS': 'NASDAQ', #'NasdaqGS',
19+
'NGM': 'NASDAQ', #'NasdaqGM',
20+
'NCM': 'NASDAQ', #'NasdaqCM',
21+
}
22+
23+
24+
def _convert_result(result):
25+
"""
26+
Converts a YQL result dictionary into PyTradeLib format
27+
:param result: dict
28+
:return: dict with keys lowercased
29+
"""
30+
r = {}
31+
for k, v in result.items():
32+
if k == 'StockExchange':
33+
k = 'Exchange'
34+
v = _EXCHANGES.get(v, None)
35+
r[k.lower()] = v
36+
return r
37+
38+
39+
def get_symbol_info(symbols, keys=None):
40+
if not isinstance(symbols, (list, tuple)):
41+
symbols = list(symbols)
42+
keys = keys or ['Symbol', 'Name', 'StockExchange']
43+
yql = 'select %(keys)s from yahoo.finance.quotes where symbol in (%(symbols)s)'
44+
45+
urls = []
46+
for batched_symbols in batch(symbols, 100):
47+
csv_symbols = ','.join(['"%s"' % s.upper() for s in batched_symbols])
48+
urls.append(get_yql_url(yql % {'keys': ','.join(keys),
49+
'symbols': csv_symbols}))
50+
51+
results = {}
52+
for r in bulk_download(urls):
53+
for result in r.json()['query']['results']['quote']:
54+
result = _convert_result(result)
55+
results[result['symbol']] = result
56+
57+
return results

0 commit comments

Comments
 (0)