77
88import pandas as pd
99
10+ from tigeropen .common .consts import TradingSession
1011from tigeropen .common .response import TigerResponse
12+ from tigeropen .common .util .string_utils import camel_to_underline
1113
12- COLUMNS = ['symbol' , 'time' , 'price' , 'avg_price' , 'pre_close' , 'volume' , 'trading_session' ]
13- TIMELINE_FIELD_MAPPINGS = {'avgPrice' : 'avg_price' }
14+ FIELD_PREMARKET = 'preMarket'
15+ FIELD_ITEMS = 'items'
16+ FIELD_INTRADAY = 'intraday'
17+ FIELD_AFTERHOURS = 'afterHours'
18+ FIELD_OVERNIGHT = 'overnight'
19+ COLUMN_TRADE_SESSION = 'trade_session'
20+ COLUMN_PRE_CLOSE = 'pre_close'
1421
1522
1623class QuoteTimelineResponse (TigerResponse ):
1724 def __init__ (self ):
1825 super (QuoteTimelineResponse , self ).__init__ ()
19- self .timelines = None
26+ self .result = None
2027 self ._is_success = None
2128
2229 def parse_response_content (self , response_content ):
@@ -29,40 +36,46 @@ def parse_response_content(self, response_content):
2936 for symbol_item in self .data :
3037 symbol = symbol_item .get ('symbol' )
3138 pre_close = symbol_item .get ('preClose' )
32- if 'preMarket' in symbol_item : # 盘前
33- pre_markets = symbol_item ['preMarket' ].get ('items' )
39+ if FIELD_PREMARKET in symbol_item : # 盘前
40+ pre_markets = symbol_item [FIELD_PREMARKET ].get ('items' )
3441 if pre_markets :
3542 for item in pre_markets :
36- item_values = self .parse_timeline (item , symbol , pre_close , 'pre_market' )
37- timeline_items .append ([ item_values . get ( tag ) for tag in COLUMNS ] )
43+ item_values = self .parse_timeline (item , symbol , pre_close , TradingSession . PreMarket . value )
44+ timeline_items .append (item_values )
3845
39- if 'intraday' in symbol_item : # 盘中
40- regulars = symbol_item ['intraday' ].get ('items' )
41- elif 'items' in symbol_item :
42- regulars = symbol_item ['items' ][0 ].get ('items' )
46+ if FIELD_INTRADAY in symbol_item : # 盘中
47+ regulars = symbol_item [FIELD_INTRADAY ].get ('items' )
48+ elif FIELD_ITEMS in symbol_item :
49+ regulars = symbol_item [FIELD_ITEMS ][0 ].get ('items' )
4350 else :
4451 regulars = None
4552 if regulars :
4653 for item in regulars :
47- item_values = self .parse_timeline (item , symbol , pre_close , 'regular' )
48- timeline_items .append ([ item_values . get ( tag ) for tag in COLUMNS ] )
54+ item_values = self .parse_timeline (item , symbol , pre_close , TradingSession . Regular . value )
55+ timeline_items .append (item_values )
4956
50- if 'afterHours' in symbol_item : # 盘后
51- after_hours = symbol_item ['afterHours' ].get ('items' )
57+ if FIELD_AFTERHOURS in symbol_item : # 盘后
58+ after_hours = symbol_item [FIELD_AFTERHOURS ].get ('items' )
5259 if after_hours :
5360 for item in after_hours :
54- item_values = self .parse_timeline (item , symbol , pre_close , 'after_hours' )
55- timeline_items .append ([item_values .get (tag ) for tag in COLUMNS ])
61+ item_values = self .parse_timeline (item , symbol , pre_close , TradingSession .AfterHours .value )
62+ timeline_items .append (item_values )
63+ if FIELD_OVERNIGHT in symbol_item : # 夜盘
64+ overnights = symbol_item [FIELD_OVERNIGHT ].get ('items' )
65+ if overnights :
66+ for item in overnights :
67+ item_values = self .parse_timeline (item , symbol , pre_close , TradingSession .OverNight .value )
68+ timeline_items .append (item_values )
5669
57- self .timelines = pd .DataFrame (timeline_items , columns = COLUMNS )
70+ self .result = pd .DataFrame (timeline_items )
5871
5972 @staticmethod
6073 def parse_timeline (item , symbol , pre_close , trading_session ):
61- item_values = {'symbol' : symbol , 'pre_close' : pre_close , 'trading_session' : trading_session }
74+ item_values = {'symbol' : symbol , COLUMN_PRE_CLOSE : pre_close , COLUMN_TRADE_SESSION : trading_session }
6275 for key , value in item .items ():
6376 if value is None :
6477 continue
65- tag = TIMELINE_FIELD_MAPPINGS [ key ] if key in TIMELINE_FIELD_MAPPINGS else key
78+ tag = camel_to_underline ( key )
6679 item_values [tag ] = value
6780
6881 return item_values
0 commit comments