优化预售查询

pull/66/head
wenxianping 2019-01-02 23:10:01 +08:00
parent 3d199a0a21
commit 57f223126e
5 changed files with 58 additions and 23 deletions

View File

@ -15,7 +15,8 @@
- 项目开始
- 服务器启动:
- 修改config/ticket_config.yaml文件按照提示更改自己想要的信息
- 运行根目录run.py即可开始
- 运行根目录sudo python run.py即可开始
- 由于新增对时功能请务必用sudosudosudo 执行否则会报权限错误windows打开ide或者cmd请用管理员身份执行python run.py不需要加sudo
- 如果你的服务器安装了docker那么就可以docker启动
- 1、docker build -t dockerticket .
- 2、docker run dockerticket python run.py &
@ -59,11 +60,11 @@
- 测试下单接口是否可用有两个下单接口随便用哪个都ok
- 如果下载验证码过期或者下载失败的问题应该是12306封ip的策略多重试几次12306现在封服务器(阿里云和腾讯云)ip比较严重尽量不要放在服务器里面
- 感谢一下小伙伴对本项目提供的帮助
- @读,◢
- @ sun7127@126.com
- @才
- [更新日志](Update.md)
- 如果觉得项目还不错,可怀疑考虑打赏一波,哈哈
- 如果觉得项目还不错,可考虑打赏一波,哈哈
-
![image](https://github.com/testerSunshine/12306/blob/master/uml/wx.jpeg?imageMogr2/auto-orient/strip)
![image](https://github.com/testerSunshine/12306/blob/master/uml/zfb.jpeg?imageMogr2/auto-orient/strip)

View File

@ -128,3 +128,8 @@
- 优化已知bug
- 开启cdn查询
- 自动识别查询接口
- 2018.12.26更新
- ticket_config 配置文件增加order_model字段下单模式
- mac和linux服务器自动对点
- 增加预售踩点查询下单经测试误差在0.004s

View File

@ -5,7 +5,8 @@ set:
# - 2018-01-06
# - 2018-01-07
station_dates:
- "2018-12-29"
- "2019-01-27"
- "2019-01-26"
# 是否根据时间范围 和 乘车类型 购票
# 否则将需要手动填写车次
@ -26,7 +27,7 @@ set:
# take_time: "24:00"
take_time: "24:00"
# 过滤车次(list)格式ex
# 填入需要购买的车次(list)格式ex
# - "G1353"
# - "G1329"
station_trains:
@ -44,13 +45,16 @@ set:
# - "G6341"
# - "G1021"
# - "G99"
- "G6011"
# - "G6011"
- "D2972"
- "D1874"
- "D2834"
# 出发城市,比如深圳北,就填深圳就搜得到
from_station: "长沙"
from_station: "广州南"
# 到达城市 比如深圳北,就填深圳就搜得到
to_station: "深圳"
to_station: "三江南"
# 座位(list) 多个座位ex:
# - "二等座"
@ -65,11 +69,11 @@ set:
# - "张三"
# - "李四"
ticke_peoples:
- "文贤平"
# - "文贤平"
- "梁敏"
# 12306登录账号(list)
12306account:
- user: "@qq.com"
- user: "931128603@qq.com"
- pwd: ""
# 加入小黑屋时间,此功能为了防止僵尸票导致一直下单不成功错过正常的票
@ -83,7 +87,7 @@ auto_code_type: 2
# 打码平台账号
auto_code_account:
user: ""
user: "931128603"
pwd: ""
# 邮箱配置,如果抢票成功,将通过邮件配置通知给您
@ -108,10 +112,14 @@ email_conf:
host: "smtp.qq.com"
# 是否开启cdn查询可以更快的检测票票 1为开启2为关闭
is_cdn: 2
is_cdn: 1
# 下单接口分为两种1 为快速下单2 是普通下单
order_type: 1
order_type: 2
# 下单模式 1 为预售整点刷新刷新间隔0.1-0.5S, 然后会校验时间比如12点的预售那脚本就会在12.00整检票,刷新订单
# 2 是捡漏捡漏的刷新间隔时间为0.5-3秒时间间隔长不容易封ip
order_model: 1

View File

@ -10,6 +10,7 @@ import wrapcache
from agency.cdn_utils import CDNProxy
from config import urlConf
from config.AutoSynchroTime import autoSynchroTime
from config.TicketEnmu import ticket
from config.configCommon import seat_conf
from config.configCommon import seat_conf_2
@ -42,7 +43,7 @@ class select:
self.from_station, self.to_station, self.station_dates, self._station_seat, self.is_more_ticket, \
self.ticke_peoples, self.station_trains, self.ticket_black_list_time, \
self.order_type, self.is_by_time, self.train_types, self.departure_time, \
self.arrival_time, self.take_time = self.get_ticket_info()
self.arrival_time, self.take_time, self.order_model = self.get_ticket_info()
self.is_auto_code = _get_yaml()["is_auto_code"]
self.auto_code_type = _get_yaml()["auto_code_type"]
self.is_cdn = _get_yaml()["is_cdn"]
@ -79,16 +80,19 @@ class select:
arrival_time = time_to_minutes(ticket_info_config["set"]["arrival_time"])
take_time = time_to_minutes(ticket_info_config["set"]["take_time"])
# 下单模式
order_model = ticket_info_config["order_model"]
print u"*" * 20
print u"12306刷票小助手最后更新于2018.12.26请勿作为商业用途交流群号286271084(已满) 请加2群649992274"
print u"12306刷票小助手最后更新于2019.01.02请勿作为商业用途交流群号286271084(已满) 请加2群649992274"
if is_by_time:
method_notie = "购票方式:根据时间区间购票\n可接受最早出发时间:{0}\n可接受最晚抵达时间:{1}\n可接受最长旅途时间:{2}\n可接受列车类型:{3}\n" \
method_notie = u"购票方式:根据时间区间购票\n可接受最早出发时间:{0}\n可接受最晚抵达时间:{1}\n可接受最长旅途时间:{2}\n可接受列车类型:{3}\n" \
.format(minutes_to_time(departure_time), minutes_to_time(arrival_time), minutes_to_time(take_time),
" , ".join(train_types))
else:
method_notie = "购票方式:根据候选车次购买\n候选购买车次:{0}".format(",".join(station_trains))
method_notie = u"购票方式:根据候选车次购买\n候选购买车次:{0}".format(",".join(station_trains))
print u"当前配置:\n出发站:{0}\n到达站:{1}\n乘车日期:{2}\n坐席:{3}\n是否有票优先提交:{4}\n乘车人:{5}\n" \
u"刷新间隔:随机(1-3S)\n{6}\n僵尸票关小黑屋时长:{7}\n 下单接口:{8}\n".format \
u"刷新间隔:随机(1-3S)\n{6}\n僵尸票关小黑屋时长:{7}\n 下单接口:{8}\n 下单模式:{9}\n".format \
(
from_station,
to_station,
@ -99,9 +103,12 @@ class select:
method_notie,
ticket_black_list_time,
order_type,
order_model
)
print u"*" * 20
return from_station, to_station, station_dates, set_type, is_more_ticket, ticke_peoples, station_trains, ticket_black_list_time, order_type, is_by_time, train_types, departure_time, arrival_time, take_time
return from_station, to_station, station_dates, set_type, is_more_ticket, ticke_peoples, station_trains, \
ticket_black_list_time, order_type, is_by_time, train_types, departure_time, arrival_time, take_time, \
order_model
def station_table(self, from_station, to_station):
"""
@ -187,7 +194,18 @@ class select:
self.call_login()
break
start_time = datetime.datetime.now()
if self.order_model is 1:
autoSynchroTime()
sleep_time_s = 0.1
sleep_time_t = 0.5
# 测试了一下有微妙级的误差应该不影响测试结果2019-01-02 22:30:00.004555
if start_time.strftime("%M:%S") == "29:55" or start_time.strftime("%M:%S") == "59:55":
print(u"预售整点模式卡点中")
time.sleep(5)
print(u"预售模式执行")
else:
sleep_time_s = 0.5
sleep_time_t = 3
q = query(session=self,
from_station=from_station,
to_station=to_station,
@ -243,7 +261,7 @@ class select:
self.ticke_peoples)
sor.sendSubmitOrderRequest()
else:
random_time = round(random.uniform(0.5, 0.5), 2)
random_time = round(random.uniform(sleep_time_s, sleep_time_t), 2)
print(u"正在第{0}次查询 随机停留时长:{6} 乘车日期: {1} 车次:{2} 查询无票 cdn轮询IP{4}当前cdn总数{5} 总耗时:{3}ms".format(num,
",".join(
self.station_dates),
@ -251,7 +269,9 @@ class select:
self.station_trains),
(
datetime.datetime.now() - start_time).microseconds / 1000,
queryResult.get("cdn", None),
queryResult.get(
"cdn",
None),
len(
self.cdn_list),
random_time))

View File

@ -5,3 +5,4 @@ six==1.10.0
requests==2.18.4
Pillow==5.0.0
wrapcache==1.0.8
ntplib==0.3.3