1
+
2
+
3
+ from pytradelib .utils import batch
4
+ from pytradelib .downloader import Downloader
5
+
1
6
from urllib import urlencode
7
+ try :
8
+ import simplejson as json
9
+ except ImportError :
10
+ import json
2
11
3
- from pytradelib .utils import batch , bulk_download
4
12
5
13
def get_yql_url (yql ):
6
14
base_url = 'http://query.yahooapis.com/v1/public/yql?'
@@ -15,9 +23,9 @@ def get_yql_url(yql):
15
23
_EXCHANGES = {
16
24
'ASE' : 'AMEX' ,
17
25
'NYQ' : 'NYSE' ,
18
- 'NMS' : 'NASDAQ' , # 'NasdaqGS',
19
- 'NGM' : 'NASDAQ' , # 'NasdaqGM',
20
- 'NCM' : 'NASDAQ' , # 'NasdaqCM',
26
+ 'NMS' : 'NASDAQ' , # 'NasdaqGS',
27
+ 'NGM' : 'NASDAQ' , # 'NasdaqGM',
28
+ 'NCM' : 'NASDAQ' , # 'NasdaqCM',
21
29
}
22
30
23
31
@@ -30,28 +38,32 @@ def _convert_result(result):
30
38
r = {}
31
39
for k , v in result .items ():
32
40
if k == 'StockExchange' :
33
- k = 'Exchange '
41
+ k = 'exchange '
34
42
v = _EXCHANGES .get (v , None )
43
+ if k == 'ErrorIndicationreturnedforsymbolchangedinvalid' :
44
+ k = 'error'
45
+ if k == 'LastTradeDate' :
46
+ k = 'last_trade_date'
35
47
r [k .lower ()] = v
36
48
return r
37
49
38
50
39
- def get_symbol_info (symbols , keys = None ):
51
+ def get_symbols_info (symbols , keys = None ):
40
52
if not isinstance (symbols , (list , tuple )):
41
53
symbols = list (symbols )
42
- keys = keys or ['Symbol' , 'Name' , 'StockExchange' ]
54
+ keys = keys or ['Symbol' , 'Name' , 'StockExchange' , 'LastTradeDate' ]
43
55
yql = 'select %(keys)s from yahoo.finance.quotes where symbol in (%(symbols)s)'
44
56
45
57
urls = []
46
58
for batched_symbols in batch (symbols , 100 ):
47
59
csv_symbols = ',' .join (['"%s"' % s .upper () for s in batched_symbols ])
48
60
urls .append (get_yql_url (yql % {'keys' : ',' .join (keys ),
49
61
'symbols' : csv_symbols }))
62
+ downloader = Downloader ()
50
63
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
-
64
+ results = []
65
+ for url , text in downloader .download (urls ):
66
+ json_ = json .loads (text )
67
+ for result in json_ ['query' ]['results' ]['quote' ]:
68
+ results .append (_convert_result (result ))
57
69
return results
0 commit comments