Skip to content

Commit

Permalink
Resolved Issue cgoldberg#12 - get_all() is fixed
Browse files Browse the repository at this point in the history
  • Loading branch information
rarmknecht committed Jan 15, 2014
1 parent da75507 commit 4553991
Show file tree
Hide file tree
Showing 2 changed files with 67 additions and 88 deletions.
7 changes: 1 addition & 6 deletions test_ystockquote.py
Original file line number Diff line number Diff line change
Expand Up @@ -36,8 +36,7 @@ def test_get_all(self):
symbol = 'GOOG'
all_info = ystockquote.get_all(symbol)
self.assertIsInstance(all_info, dict)
print(len(all_info))
#self.assertEqual(all_info['rep'],ystockquote.rep(symbol))

self.assertEqual(all_info['dividend_yield'],
ystockquote.get_dividend_yield(symbol))
self.assertEqual(all_info['fifty_sma'],
Expand All @@ -47,10 +46,6 @@ def test_get_all(self):
self.assertEqual(all_info['book_value'],
ystockquote.get_book_value(symbol))

#pc = all_info['previous_close']
#self.assertNotEqual(pc, 'N/A')
#self.assertGreater(float(pc), 0)

def test_get_historical_prices(self):
symbol = 'GOOG'
start_date = '2013-01-02'
Expand Down
148 changes: 66 additions & 82 deletions ystockquote.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,8 @@


def _request(symbol, stat):
url = 'http://finance.yahoo.com/d/quotes.csv?s=%s&f=%s' % (symbol, stat)
url = 'http://download.finance.yahoo.com/d/quotes.csv' \
'?s=%s&f=%s' % (symbol, stat)
req = Request(url)
resp = urlopen(req)
content = resp.read().decode().strip()
Expand All @@ -39,36 +40,22 @@ def get_all(symbol):
Returns a dictionary.
"""

# Broken IDs down into sets of 5 to confirm alignment, resolves Issue #12
ids = \
'ydb2r1b3' \
'qpoc1d1' \
'cd2c6t1k2' \
'p2c8m5gm7' \
'hm8k1m3l' \
'm4l1t8w1g1' \
'w4g3p1g4m' \
'g5m2g6kv' \
'jj1j5j3k4' \
'j6nk5n4' \
'ws1xv' \
'a5b6k3t7a2' \
't6i5l2el3' \
'e7v1e8v7e9' \
's6b4j4p5p6' \
'rr2r5r6r7s7'
# 'ydb2r1b3qpoc1d1cd2c6t1k2p2c8m5c3m6gm7hm8k1m3lm4l1t8w1g1w4g3p' \
# '1g4mg5m2g6kvjj1j5j3k4f6j6nk5n4ws1xj2va5b6k3t7a2t615l2el3e7v1' \
# 'e8v7e9s6b4j4p5p6rr2r5r6r7s7'
'ydb2r1b3qpoc1d1' \
'cd2c6t1k2p2c8m5gm7' \
'hm8k1m3lm4l1t8w1g1' \
'w4g3p1mg5m2kjj1j5' \
'j3k4j6nk5n4ws1xv' \
't7a2t6i5l2el3e7v1e8' \
'v7e9s6b4j4p5p6rr2r5' \
'r6r7s7g4g6'
values = _request(symbol, ids).split(',')
return dict(
dividend_yield=values[0], # y
dividend_per_share=values[1], # d
ask_realtime=values[2], # b2
dividend_pay_date=values[3], # r1
bid_realtime=values[4], # b3

ex_dividend_date=values[5], # q
previous_close=values[6], # p
today_open=values[7], # o
Expand All @@ -80,7 +67,6 @@ def get_all(symbol):
change_realtime=values[12], # c6
last_trade_time=values[13], # t1
change_percent_realtime=values[14], # k2

change_percent=values[15], # p2
after_hours_change_realtime=values[16], # c8
change_200_sma=values[17], # m5
Expand All @@ -92,7 +78,6 @@ def get_all(symbol):
last_trade_realtime_time=values[22], # k1
fifty_sma=values[23], # m3
last_trade_time_plus=values[24], # l - el

twohundred_sma=values[25], # m4
last_trade_price=values[26], # l1 - el one
one_year_target=values[27], # t8
Expand All @@ -102,63 +87,62 @@ def get_all(symbol):
todays_value_change_realtime=values[30], # w4
annualized_gain=values[31], # g3
price_paid=values[32], # p1
holdings_gain=values[33], # g4
todays_range=values[34], # m

holdings_gain_percent_realtime=values[35], # g5
todays_range_realtime=values[36], # m2
holdings_gain_realtime=values[37], # g6
fiftytwo_week_high=values[38], # k
more_info=values[39], # v

fiftytwo_week_low=values[40], # j
market_cap=values[41], # j1
change_from_52_week_low=values[42], # j5
market_cap_realtime=values[43], # j3
change_from_52_week_high=values[44], # k4

float_shares=_request(symbol, 'f6'), # ''.join(values[45:47]), # f6
percent_change_from_52_week_low=values[45], # j6
company_name=values[46], # n
percent_change_from_52_week_high=values[47], # k5
notes=values[48], # n4

fiftytwo_week_range=values[49], # w
shares_owned=values[50], # s1
stock_exchange=values[51], # x
shares_outstanding=_request(symbol, 'j2'), # j2
volume=values[52], # v

ask_size=values[53], # a5
bid_size=values[54], # b6
last_trade_size=values[55], # k3
ticker_trend=values[56], # t7
average_daily_volume=values[57], # a2

trade_links=values[58], # t6
order_book_realtime=values[59], # i5
high_limit=values[60], # l2
eps=values[61], # e
low_limit=values[62], # l3

eps_estimate_current_year=values[63], # e7
holdings_value=values[64], # v1
eps_estimate_next_year=values[65], # e8
holdings_value_realtime=values[66], # v7
eps_estimate_next_quarter=values[67], # e9

revenue=values[68], # s6
book_value=values[69], # b4
ebitda=values[70], # j4
price_sales=values[71], # p5
price_book=values[72], # p6

pe=values[73], # r
pe_realtime=values[74], # r2
peg=values[75], # r5
price_eps_estimate_current_year=values[76], # r6
price_eps_estimate_next_year=values[77], # r7
short_ratio=values[78], # s7
todays_range=values[33], # m
holdings_gain_percent_realtime=values[34], # g5
todays_range_realtime=values[35], # m2
fiftytwo_week_high=values[36], # k
fiftytwo_week_low=values[37], # j
market_cap=values[38], # j1
change_from_52_week_low=values[39], # j5

market_cap_realtime=values[40], # j3
change_from_52_week_high=values[41], # k4
percent_change_from_52_week_low=values[42], # j6
company_name=values[43], # n
percent_change_from_52_week_high=values[44], # k5
notes=values[45], # n4
fiftytwo_week_range=values[46], # w
shares_owned=values[47], # s1
stock_exchange=values[48], # x
volume=values[49], # v

ticker_trend=values[50], # t7
average_daily_volume=values[51], # a2
trade_links=values[52], # t6
order_book_realtime=values[53], # i5
high_limit=values[54], # l2
eps=values[55], # e
low_limit=values[56], # l3
eps_estimate_current_year=values[57], # e7
holdings_value=values[58], # v1
eps_estimate_next_year=values[59], # e8

holdings_value_realtime=values[60], # v7
eps_estimate_next_quarter=values[61], # e9
revenue=values[62], # s6
book_value=values[63], # b4
ebitda=values[64], # j4
price_sales=values[65], # p5
price_book=values[66], # p6
pe=values[67], # r
pe_realtime=values[68], # r2
peg=values[69], # r5

price_eps_estimate_current_year=values[70], # r6
price_eps_estimate_next_year=values[71], # r7
short_ratio=values[72], # s7
holdings_gain=values[73], # g4
holdings_gain_realtime=values[74], # g6

# Seperate Queries - results may contain commas
float_shares=''.join(_request(symbol, 'f6').split(',')), # f6
shares_outstanding=''.join(_request(symbol, 'j2').split(',')), # j2
ask_size=''.join(_request(symbol, 'a5').split(',')), # a5
bid_size=''.join(_request(symbol, 'b6').split(',')), # b6
last_trade_size=''.join(_request(symbol, 'k3').split(',')), # k3

# Removed
# more_info=values[37], # v - v is for volume, not 'more_info'
)


Expand Down

3 comments on commit 4553991

@jplehmann
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

While I appreciate that you've worked around the problem, issuing multiple queries is not a very good solution. Not sure ATM what the best solution is though, as Yahoo's output is just BROKEN.

@jplehmann
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actually, see my comment in cgoldberg#12 -- probably moving the extra queries to get_all_extra would be better, so get_all remains fast. Or something like that. FWIW.

@jplehmann
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@rarmknecht I used your work here:
jplehmann@84e0832

and you might like this:
jplehmann@b7e7fa2

Please sign in to comment.