Check for invalid requests
[miner.git] / yahoo.py
blob5aefd966a1a253ec43a421c965dc331421bba6da
1 #!/usr/bin/python
3 import urllib
4 import re
7 #These constants are specific to the Yahoo Finance
8 #request URL
11 NAME = 'n'
12 ASK = 'a'
13 AVERAGE_DAILY_VOL = 'a2'
14 ASK_SIZE = 'a5'
15 BID = 'b'
16 ASK_RT = 'b2'
17 BID_RT = 'b3'
18 BOOK_VALUE = 'b4'
19 BID_SIZE = 'b6'
20 CHANGE_PERCENT_CHANGE = 'c'
21 CHANGE = 'c1'
22 COMMISSION = 'c3'
23 CHANGE_RT = 'c6'
24 AFTER_HOURS_CHANGE = 'c8'
25 DIVIDEND_PER_SHARE = 'd'
26 LAST_TRADE_DATE = 'd1'
27 TRADE_DATE = 'd2'
28 EPS = 'e'
29 EPS_CUR_YEAR = 'e7'
30 EPS_NEXT_YEAR = 'e8'
31 EPS_NEXT_Q = 'e9'
32 FLOAT_SHARES = 'f6'
33 DAY_LOW = 'g'
34 DAY_HIGH = 'h'
35 LOW_52W = 'j'
36 HIGH_52W = 'k'
37 HOLDINGS_GAIN_PERCENT = 'g1'
38 ANNUALIZED_GAIN = 'g3'
39 HOLDINGS_GAIN = 'g4'
40 HOLDINGS_GAIN_PERCENT = 'g5'
41 HOLDINGS_GAIN_RT = 'g6'
42 ORDER_BOOK = 'i5'
43 MARKET_CAP = 'j1'
44 MARKET_CAP_RT = 'j3'
45 EBITDA = 'j4'
46 CHANGE_FROM_52W_LOW = 'j5'
47 PER_CHANGE_FROM_52W_LOW = 'j6'
48 LAST_TRADE_WITH_TIME_RT = 'k1'
49 CHANGE_PERCENT_RT = 'k2'
50 LAST_TRADE_SIZE = 'k3'
51 CHANGE_FROM_52W_HIGH = 'k4'
52 PER_CHANGE_FROM_52W_HIGH= 'k5'
53 LAST_TRADE_WITH_TIME = 'l'
54 LAST_TRADE_PRICE = 'l1'
55 HIGH_LIMIT = 'l2'
56 LOW_LIMIT = 'l3'
57 DAYS_RANGE = 'm'
58 DAYS_RANGE_RT = 'm2'
59 MA_50D = 'm3'
60 MA_200D = 'm4'
61 CHANGE_FROM_200D_MA = 'm5'
62 PERC_CHANGE_FROM_200D_MA= 'm6'
63 CHANGE_FROM_50D_MA = 'm7'
64 PERC_CHANGE_FROM_50D_MA = 'm8'
65 NOTES = 'n4'
66 OPEN = 'o'
67 PREVIOUS_CLOSE = 'p'
68 PRICE_PAID = 'p1'
69 PERCENT_CHANGE = 'p2'
70 PRICE_PER_SALES = 'p5'
71 PRICE_PER_BOOK = 'p6'
72 EX_DIVIDEND_DATE = 'q'
73 PE = 'r'
74 DIVIDEND_PAY_DATE = 'r1'
75 PE_RT = 'r2'
76 PEG = 'r5'
77 PRICE_PER_EPS_CUR_YEAR = 'r6'
78 PRICE_PER_EPS_NEXT_YEAR = 'r7'
79 SYMBOL = 's'
80 SHARES_OWNED = 's1'
81 SHORT_RATIO = 's7'
82 LAST_TRADE_TIME = 't1'
83 TRADE_LINKS = 't6'
84 TICKER_TREND = 't7'
85 ONE_YEAR_TARGET = 't8'
86 VOLUME = 'v'
87 HOLDINGS_VALUE = 'v1'
88 HOLDINGS_VALUE_RT = 'v7'
89 RANGE_52W = 'w'
90 DAY_VALUE_CHANGE = 'w1'
91 DAY_VALUE_CHANGE_RT = 'w4'
92 STOCK_EXCHANGE = 'x'
95 valid_requests = ['n' , 'a', 'a2', 'a5', 'b', 'b2', 'b3', 'b4', 'b6', 'c', 'c1', 'c3', 'c6', 'c8', 'd', 'd1', 'd2', 'e', 'e7', 'e9', 'f6', 'g', 'h', 'j', 'k', 'g1', 'g3', 'g4', 'g5', 'g6', 'i5', 'j1', 'j3', 'j4', 'j5', 'j6', 'k1', 'k2', 'k3', 'k4', 'k5', 'l', 'l1', 'l2', 'l3', 'm', 'm2', 'm3', 'm4', 'm5', 'm6', 'm7', 'm8', 'n4', 'o', 'p', 'p1', 'p2', 'p5', 'p6', 'q', 'r', 'r1', 'r2', 'r5', 'r6', 'r7', 's', 's1', 's7', 't1', 't6', 't7', 't8', 'v', 'v1', 'v7', 'w', 'w1', 'w4', 'x']
97 def check_request(field):
98 p = re.compile('[a-z][0-9]|[a-z]')
99 list = p.findall(field)
100 for user_entry in list:
101 valid = 0
102 for word in valid_requests:
103 if word == user_entry:
104 valid = 1
105 if valid == 0:
106 print "Error, malfomed request: " + user_entry
107 print "Please ensure that the symbols you are requesting are part of the Yahoo API"
108 print "fatal: Exiting program"
109 quit()
111 def yahoo_request(sym, field):
113 check_request(field)
115 sym = sym.upper()
117 prefix = "http://finance.yahoo.com/d/quotes.csv?s="
118 url = prefix + sym+ "&f=" + field
119 print "Requesting: " + url
120 data = urllib.urlopen(url).read()
122 data_list = list()
123 data_list = data.split(',')
125 return data_list
129 def yahoo_hist_request(sym, start, end):
130 prefix = "http://ichart.yahoo.com/table.csv?s="
131 suffix = "&ignore=.csv"
133 start_list = start.split('-')
134 end_list = end.split('-')
136 if (len(start_list) != len(end_list) != 3):
137 print "Error, stockr yahoo historical api does not understand "\
138 + start + " or " + end + ". Use the format 2008-1-30"
140 start_date_url = "&g=d&a=" + start_list[2] + "&b=" + start_list[1] + "&c=" + start_list[0]
141 end_date_url = "&d=" + end_list[2] + "&e=" + end_list[1] + "&f=" + end_list[0]
143 url = prefix + sym + end_date_url + start_date_url + suffix
145 print "Request url for historical quote: " + url
146 data = urllib.urlopen(url).read()
148 print data
153 #yahoo_hist_request("XOM", "2007-1-1", "2008-1-1")
155 print yahoo_request("XOm", NAME + AVERAGE_DAILY_VOL)