增加单个任务添加多个出发和到达车站

This commit is contained in:
Jalin
2019-01-08 17:28:08 +08:00
parent 6dc3005cd9
commit 6d18a8d11b
4 changed files with 38 additions and 16 deletions

View File

@@ -1,5 +1,5 @@
# 🚂 py12306 购票助手
多账号,多任务购票
支持多账号,多任务购票
## 前言
今年回家的票明显要难买很多,早早就答应了父母今年的票没问题,到现在一张票没买到,虽然家里已经订了汽车票,让我不用操心,但是想想他们一行还有小孩,心还是很伤的。
@@ -11,7 +11,7 @@
- [x] 用户状态恢复
- [x] 电话语音通知
- [x] 多账号、多任务、多线程支持
- [ ] 单个任务多站点查询
- [x] 单个任务多站点查询
- [ ] Docker 支持
- [ ] 邮件通知
@@ -57,7 +57,7 @@ python main.py -t -n
python main.py
```
## 下单成功图
## 下单成功
![下单成功图片](./data/images/order_success.png)
## Thanks

View File

@@ -52,10 +52,18 @@ QUERY_JOBS = [
"2019-01-25",
"2019-01-26",
],
'stations': { # 车站 :Dict
'stations': { # 车站 支持多个车站同时查询 :Dict or :List
'left': '北京',
'arrive': '深圳',
},
# # 多个车站示例 (建议添加多个,有时多买几站成功率会高一点)
# 'stations': [{
# 'left': '北京',
# 'arrive': '深圳',
# },{ # 多个车站示例
# 'left': '北京',
# 'arrive': '广州',
# }],
'members': [ # 乘客姓名,会根据当前账号自动识别乘客类型 购买儿童票 设置两个相同的姓名即可,程序会自动识别 如 ['张三', '张三']
"张三",
"王五",

View File

@@ -52,7 +52,9 @@ class QueryLog(BaseLog):
index = 1
for job in jobs:
self.add_log('================== 任务 {} =================='.format(index))
self.add_log('出发站:{} 到达站:{}'.format(job.left_station, job.arrive_station))
for station in job.stations:
self.add_log('出发站:{} 到达站:{}'.format(station.get('left'), station.get('arrive')))
self.add_log('乘车日期:{}'.format(job.left_dates))
self.add_log('坐席:{}'.format(''.join(job.allow_seats)))
self.add_log('乘车人:{}'.format(''.join(job.members)))

View File

@@ -14,6 +14,7 @@ class Job:
left_dates = []
left_date = None
stations = []
left_station = ''
arrive_station = ''
left_station_code = ''
@@ -45,10 +46,13 @@ class Job:
def __init__(self, info, query):
self.left_dates = info.get('left_dates')
self.left_station = info.get('stations').get('left')
self.arrive_station = info.get('stations').get('arrive')
self.left_station_code = Station.get_station_key_by_name(self.left_station)
self.arrive_station_code = Station.get_station_key_by_name(self.arrive_station)
# 多车站已放在下面处理
# self.left_station = info.get('stations').get('left')
# self.arrive_station = info.get('stations').get('arrive')
# self.left_station_code = Station.get_station_key_by_name(self.left_station)
# self.arrive_station_code = Station.get_station_key_by_name(self.arrive_station)
self.stations = info.get('stations')
self.stations = [self.stations] if isinstance(self.stations, dict) else self.stations
self.account_key = info.get('account_key')
self.allow_seats = info.get('seats')
@@ -74,13 +78,15 @@ class Job:
:return:
"""
QueryLog.print_job_start()
for date in self.left_dates:
self.left_date = date
response = self.query_by_date(date)
self.handle_response(response)
self.safe_stay()
if is_main_thread():
QueryLog.flush(sep='\t\t')
for station in self.stations:
self.refresh_station(station)
for date in self.left_dates:
self.left_date = date
response = self.query_by_date(date)
self.handle_response(response)
self.safe_stay()
if is_main_thread():
QueryLog.flush(sep='\t\t')
if is_main_thread():
QueryLog.add_quick_log('').flush()
else:
@@ -201,6 +207,12 @@ class Job:
User.check_members(self.members, self.account_key, call_back=self.set_passengers)
return True
def refresh_station(self, station):
self.left_station = station.get('left')
self.arrive_station = station.get('arrive')
self.left_station_code = Station.get_station_key_by_name(self.left_station)
self.arrive_station_code = Station.get_station_key_by_name(self.arrive_station)
# 提供一些便利方法
def get_info_of_left_date(self):
return self.ticket_info[self.INDEX_LEFT_DATE]