优化查询与参数获取

This commit is contained in:
Jalin
2020-01-02 11:06:35 +08:00
parent 1dee214ec1
commit 65fbb6fb5e
5 changed files with 29 additions and 7 deletions

View File

@@ -1,6 +1,7 @@
# -*- coding: utf-8 -*-
import sys
import py12306
sys.path.insert(0, 'py12306')
def main():

View File

@@ -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 = []

View File

@@ -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'),

View File

@@ -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}')

View File

@@ -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