@@ -142,9 +142,12 @@ def urlopen(self, url, redirect=True, data=None, headers={}, cookies=[], **kwarg
142142 self .response = self .request ('POST' if data else 'GET' , url , data , headers , cookies , ** kwargs )
143143 text = self .response .read ()
144144
145- # Allow two redirects: used by Yahoo for some cookie based consent
145+ # Allow redirects - used by Yahoo for some cookie based consent
146+ redirect_count = 3
146147
147- if 300 <= self .response .status < 400 :
148+ while 300 <= self .response .status < 400 and redirect_count >= 0 :
149+
150+ redirect_count -= 1
148151 location = self .response .getheader ('Location' )
149152
150153 if location and redirect :
@@ -156,21 +159,6 @@ def urlopen(self, url, redirect=True, data=None, headers={}, cookies=[], **kwarg
156159 self .response = self .request ('POST' if data else 'GET' , location , data , headers , cookies , ** kwargs )
157160 text = self .response .read ()
158161
159- if 300 <= self .response .status < 400 :
160- location = self .response .getheader ('Location' )
161-
162- if location and redirect :
163-
164- if location .startswith ('/' ):
165- scheme , _ , host , path = url .split ('/' , 3 )
166- location = '{}//{}{}' .format (scheme , host , location )
167-
168- self .response = self .request ('POST' if data else 'GET' , location , data , headers , cookies ,
169- ** kwargs )
170- text = self .response .read ()
171- else :
172- raise RedirectException (location )
173-
174162 else :
175163 raise RedirectException (location )
176164
@@ -187,6 +175,47 @@ def urlopen(self, url, redirect=True, data=None, headers={}, cookies=[], **kwarg
187175
188176 return text
189177
178+ def get_ticker (self ):
179+
180+ tick = {}
181+
182+ tick [Datacode .ADJ_CLOSE ] = None
183+ tick [Datacode .ASKSIZE ] = None
184+ tick [Datacode .ASK ] = None
185+ tick [Datacode .AVG_DAILY_VOL_3MONTH ] = None
186+ tick [Datacode .BETA ] = None
187+ tick [Datacode .BIDSIZE ] = None
188+ tick [Datacode .BID ] = None
189+ tick [Datacode .CHANGE ] = None
190+ tick [Datacode .CHANGE_IN_PERCENT ] = None
191+ tick [Datacode .CURRENCY ] = None
192+ tick [Datacode .DIV ] = None
193+ tick [Datacode .DIV_YIELD ] = None
194+ tick [Datacode .EPS ] = None
195+ tick [Datacode .EXCHANGE ] = None
196+ tick [Datacode .EXPIRY_DATE ] = None
197+ tick [Datacode .EX_DIV_DATE ] = None
198+ tick [Datacode .HIGH ] = None
199+ tick [Datacode .HIGH_52_WEEK ] = None
200+ tick [Datacode .INDUSTRY ] = None
201+ tick [Datacode .LAST_PRICE ] = None
202+ tick [Datacode .LAST_PRICE_DATE ] = None
203+ tick [Datacode .LAST_PRICE_TIME ] = None
204+ tick [Datacode .LOW ] = None
205+ tick [Datacode .LOW_52_WEEK ] = None
206+ tick [Datacode .MARKET_CAP ] = None
207+ tick [Datacode .NAME ] = None
208+ tick [Datacode .OPEN ] = None
209+ tick [Datacode .PAYOUT_RATIO ] = None
210+ tick [Datacode .PE_RATIO ] = None
211+ tick [Datacode .PREV_CLOSE ] = None
212+ tick [Datacode .SECTOR ] = None
213+ tick [Datacode .TICKER ] = None
214+ tick [Datacode .TIMEZONE ] = None
215+ tick [Datacode .VOLUME ] = None
216+
217+ return tick
218+
190219 def _return_value (self , data : dict , datacode : int ):
191220
192221 """
@@ -234,6 +263,18 @@ def _return_value(self, data: dict, datacode: int):
234263 elif datacode == Datacode .LAST_PRICE .value and Datacode .LAST_PRICE in data :
235264 return data [Datacode .LAST_PRICE ]
236265
266+ elif datacode == Datacode .BID .value and Datacode .BID in data :
267+ return data [Datacode .BID ]
268+
269+ elif datacode == Datacode .ASK .value and Datacode .ASK in data :
270+ return data [Datacode .ASK ]
271+
272+ elif datacode == Datacode .BIDSIZE .value and Datacode .BIDSIZE in data :
273+ return data [Datacode .BIDSIZE ]
274+
275+ elif datacode == Datacode .ASKSIZE .value and Datacode .ASKSIZE in data :
276+ return data [Datacode .ASKSIZE ]
277+
237278 elif datacode == Datacode .LOW_52_WEEK .value and Datacode .LOW_52_WEEK in data :
238279 return data [Datacode .LOW_52_WEEK ]
239280
@@ -273,6 +314,12 @@ def _return_value(self, data: dict, datacode: int):
273314 elif datacode == Datacode .PAYOUT_RATIO .value and Datacode .PAYOUT_RATIO in data :
274315 return data [Datacode .PAYOUT_RATIO ]
275316
317+ elif datacode == Datacode .EXPIRY_DATE .value and Datacode .EXPIRY_DATE in data :
318+ if data [Datacode .EXPIRY_DATE ]:
319+ return data [Datacode .EXPIRY_DATE ].isoformat ()
320+ else :
321+ return data [Datacode .EXPIRY_DATE ]
322+
276323 elif datacode == Datacode .CLOSE .value and Datacode .CLOSE in data :
277324 return data [Datacode .CLOSE ]
278325
0 commit comments