diff --git a/main.py b/main.py index 1a0fadf..e9fdfe1 100644 --- a/main.py +++ b/main.py @@ -1,6 +1,7 @@ # -*- coding: utf-8 -*- import sys -import py12306 + +sys.path.insert(0, 'py12306') def main(): diff --git a/py12306/app/models.py b/py12306/app/models.py index b8a66c4..e7bcd0d 100644 --- a/py12306/app/models.py +++ b/py12306/app/models.py @@ -236,6 +236,14 @@ class Ticket(TimestampMixin, BaseModel): class Meta: table = 'tickets' + @property + def left_date_order(self): + return self.left_date.strftime('%Y-%m-%d') + + @property + def secret_str_unquote(self) -> str: + return urllib.parse.unquote(self.secret_str) + @classmethod def parse_tickets_text(cls, tickts: List[str]): ret = [] diff --git a/py12306/app/order.py b/py12306/app/order.py index e77c462..73de09a 100644 --- a/py12306/app/order.py +++ b/py12306/app/order.py @@ -142,9 +142,9 @@ class OrderTicket: async def submit_order_request(self): """ 提交下单请求 """ data = { - 'secretStr': self.ticket.secret_str_unquote(), # 解密 - 'train_date': self.ticket.left_date_order(), # 出发时间 - 'back_train_date': self.ticket.left_date_order(), # 返程时间 + 'secretStr': self.ticket.secret_str_unquote, # 解密 + 'train_date': self.ticket.left_date_order, # 出发时间 + 'back_train_date': self.ticket.left_date_order, # 返程时间 'tour_flag': 'dc', # 旅途类型 'purpose_codes': 'ADULT', # 成人 | 学生 'query_from_station_name': StationHelper.cn_by_id(self.query.left_station), @@ -226,7 +226,7 @@ class OrderTicket: """ 获取队列人数 """ data = { # 'train_date': '{} 00:00:00 GMT+0800 (China Standard Time)'.format( - datetime.datetime.strptime(self.ticket.left_date_order(), '%Y-%m-%d').strftime("%a %h %d %Y")), + self.ticket.left_date.strftime("%a %h %d %Y")), 'train_no': self.ticket_info_for_passenger_form['queryLeftTicketRequestDTO']['train_no'], 'stationTrainCode': self.ticket_info_for_passenger_form['queryLeftTicketRequestDTO']['station_train_code'], 'seatType': self.ticket.available_seat.get('order_id'), diff --git a/py12306/app/query.py b/py12306/app/query.py index 3667afa..27636a5 100644 --- a/py12306/app/query.py +++ b/py12306/app/query.py @@ -85,7 +85,7 @@ class QueryTicket: try: self.api_type = res.group(1) Logger.info(f'更新查询接口地址: {self.api_type}') - except IndexError: + except (IndexError, AttributeError): raise RetryException('获取车票查询地址失败') return await self.get_query_api_type() @@ -162,7 +162,7 @@ class QueryTicket: response = await self.session.otn_query_left_ticket(await self.get_query_api_type(), query) if response.status is not 200: Logger.error(f'车票查询失败, 状态码 {response.status}, {response.reason} 请求被拒绝') - return [] + raise RetryException(wait_s=1, default=[]) result = response.json().get('data.result') if not result: Logger.error(f'车票查询失败, {response.reason}') diff --git a/py12306/lib/helper.py b/py12306/lib/helper.py index 72a4552..e25774a 100644 --- a/py12306/lib/helper.py +++ b/py12306/lib/helper.py @@ -150,6 +150,19 @@ def json_friendly_dumps(obj: Any, **kwargs): return json.dumps(obj, ensure_ascii=False, default=json_encoder, **kwargs) +def str_to_date(_str: str): + if isinstance(_str, datetime.date): + return _str + if len(_str) is 10: + return datetime.datetime.strptime(_str, '%Y-%m-%d').date() + else: + return datetime.datetime.strptime(_str, '%Y-%m-%d %H:%M:%S') + + +def lmap(*args, **kwargs): + return list(map(*args, **kwargs)) + + class ShareInstance: __session = None