改为自动候补+下单

pull/569/head
文贤平 2019-09-02 20:19:24 +08:00
parent d31171ea29
commit 28c3b37cbe
5 changed files with 75 additions and 46 deletions

View File

@ -1,17 +1,18 @@
# 刷票模式1=刷票 2=候补
# 关于软件使用配置说明,一定要看!!!
# ps: 如果是候补车票需要通过人证一致性核验的用户及激活的“铁路畅行”会员可以提交候补需求请您按照操作说明在铁路12306app.上完成人证核验
TICKET_TYPE = 2
# 候补最晚兑现日期,如果是候补订单,这个值一定要填
# 格式为日期+小时+分
# ps: 这个日期一定要填小于最长订票时间(30天)
# 举例: 比如今天才可以买10.1号的票比如你那个发车是10.1号上午两点你兑现时间写到10.1晚上22点
# 这个日期一定要填小于最长订票时间(30天)
# t("#fromDate").val() + "#" + t("#dafaultTime").html().replace("时", "") + "#" + t("#dafaultMinutes").html().replace("分", ""),
# 关于候补了之后是否还能继续捡漏的问题在此说明: 软件为全自动候补加捡漏,如果软件候补成功则会停止抢票,发出邮件通知,但是不会影响你继续捡漏,
# 如果这个时候捡漏捡到的话,也是可以付款成功的,也就是说,捡漏+候补,可以最大程度提升抢票成功率
# 候补最晚兑现日期,目前软件为捡漏加自动候补,所以这个值一定要填
# 格式为日期+小时+分
# 举例: 比如今天才可以买10.1号的票比如你那个发车是10.1号上午两点你兑现时间写到10.1晚上22点
J_Z_PARAM = "2019-09-28#22#59"
# 出发日期(list) "2018-01-06", "2018-01-07"
STATION_DATES = [
"2019-10-01"
"2019-09-27"
]
# 填入需要购买的车次(list)"G1353"
@ -26,17 +27,18 @@ FROM_STATION = "深圳北"
TO_STATION = "隆回"
# 座位(list) 多个座位ex:
# - "商务座"
# - "一等座"
# - "二等座"
# - "特等座"
# - "软卧"
# - "硬卧"
# - "硬座"
# - "无座"
# - "动卧"
# "商务座",
# "一等座",
# "二等座",
# "特等座",
# "软卧",
# "硬卧",
# "硬座",
# "无座",
# "动卧",
SET_TYPE = [
"商务座"
"商务座",
"一等座"
]
# 当余票小于乘车人,如果选择优先提交,则删减联系人和余票数一致在提交
@ -47,12 +49,12 @@ IS_MORE_TICKET = False
# - "张三"
# - "李四"
TICKET_PEOPLES = [
"文贤平",
"",
]
# 12306登录账号
USER = "931128603@qq.com"
PWD = "QWERTY"
USER = ""
PWD = ""
# 加入小黑屋时间默认为5分钟此功能为了防止僵尸票导致一直下单不成功错过正常的票
TICKET_BLACK_LIST_TIME = 5
@ -74,12 +76,12 @@ IS_AUTO_CODE = True
# password: "授权码"
# host: "smtp.qq.com"
EMAIL_CONF = {
"IS_MAIL": True,
"email": "931128603@qq.com",
"notice_email_list": "931128603@qq.com",
"username": "931128603@qq.com",
"IS_MAIL": False,
"email": "",
"notice_email_list": "",
"username": "",
"password": "",
"host": "smtp.qq.com",
"host": "",
}
# 是否开启 pushbear 微信提醒, 使用前需要前往 http://pushbear.ftqq.com 扫码绑定获取 send_key 并关注获得抢票结果通知的公众号

View File

@ -163,3 +163,8 @@
- 增加候补订单功能
- 新增TICKET_TYPE字段1=刷票 2=候补
- 目前候补只支持单车次,多乘车人候补,由于目前不是很懂候补的需求,所以暂时这样做
- 2019.09.02更新
- 剔除新增TICKET_TYPE字段发现此字段冗余目前改为全天自动候补+捡漏
- 增加候补订单功能
- 优先级:下单再候补

View File

@ -187,6 +187,7 @@ class select:
train_date = queryResult.get("train_date", "")
stationTrainCode = queryResult.get("stationTrainCode", "")
secretStr = queryResult.get("secretStr", "")
secretList = queryResult.get("secretList", "")
seat = queryResult.get("seat", "")
leftTicket = queryResult.get("leftTicket", "")
query_from_station_name = queryResult.get("query_from_station_name", "")
@ -200,7 +201,7 @@ class select:
set_type="" if isinstance(seat, list) else seat_conf_2[seat],
# 候补订单需要设置多个坐席
is_more_ticket_num=is_more_ticket_num)
getPassengerDTOsResult = s.getPassengerTicketStrListAndOldPassengerStr()
getPassengerDTOsResult = s.getPassengerTicketStrListAndOldPassengerStr(secretStr, secretList)
if getPassengerDTOsResult.get("status", False):
self.passengerTicketStrList = getPassengerDTOsResult.get("passengerTicketStrList", "")
self.passengerTicketStrByAfterLate = getPassengerDTOsResult.get(
@ -209,7 +210,7 @@ class select:
self.set_type = getPassengerDTOsResult.get("set_type", "")
# 提交订单
# 订单分为两种,一种为抢单,一种为候补订单
if TickerConfig.TICKET_TYPE == 1:
if secretStr: # 正常下单
if TickerConfig.ORDER_TYPE == 1: # 快速下单
a = autoSubmitOrderRequest(session=self,
secretStr=secretStr,
@ -230,8 +231,8 @@ class select:
self.passengerTicketStrList, self.oldPassengerStr, train_date,
TickerConfig.TICKET_PEOPLES)
sor.sendSubmitOrderRequest()
elif TickerConfig.TICKET_TYPE == 2:
c = chechFace(self, secretStr)
elif secretList: # 候补订单
c = chechFace(self, secretList)
c.sendChechFace()
else:
random_time = round(random.uniform(sleep_time_s, sleep_time_t), 2)

View File

@ -62,7 +62,7 @@ class getPassengerDTOs:
}
return str(passengerTicketStr[set_type.replace(' ', '')])
def getPassengerTicketStrListAndOldPassengerStr(self):
def getPassengerTicketStrListAndOldPassengerStr(self, secretStr, secretList):
"""
获取提交车次人内容格式
passengerTicketStr O,0,1,文贤平,1,43052419950223XXXX,15618715583,N_O,0,1,梁敏,1,43052719920118XXXX,,N
@ -84,7 +84,7 @@ class getPassengerDTOs:
raise PassengerUserException(ticket.DTO_NOT_IN_LIST)
if len(user_info) < self.is_more_ticket_num: # 如果乘车人填错了导致没有这个乘车人的话,可能乘车人数会小于自动乘车人
self.is_more_ticket_num = len(user_info)
if TickerConfig.TICKET_TYPE is 1:
if secretStr:
set_type = self.getPassengerTicketStr(self.set_type)
if self.is_more_ticket_num is 1:
passengerTicketStrList.append(
@ -104,7 +104,7 @@ class getPassengerDTOs:
oldPassengerStr.append(
user_info[i]['passenger_name'] + "," + user_info[i]['passenger_id_type_code'] + "," +
user_info[i]['passenger_id_no'] + "," + user_info[i]['passenger_type'] + '_')
elif TickerConfig.TICKET_TYPE is 2:
elif secretList:
"""
候补订单有多少个联系人就候补多少个联系人了没有优先提交之说
1#XXXX#1#***************77X#bf6ae40d3655ae7eff005ee21d95876b38ab97a8031b464bc2f74a067e3ec957;

View File

@ -77,19 +77,24 @@ class query:
if result:
for i in value['result']:
ticket_info = i.split('|')
if TickerConfig.TICKET_TYPE is 2 and self.check_is_need_train(ticket_info):
# 如果最后一位为1则是可以候补的不知道这些正确嘛
if ticket_info[-2] == "1":
print("当前订单可以候补,尝试提交候补订单")
return {
"secretStr": ticket_info[0],
"seat": TickerConfig.SET_TYPE,
"status": True,
}
elif TickerConfig.TICKET_TYPE is 1:
if ticket_info[11] == "Y" and ticket_info[1] == "预订": # 筛选未在开始时间内的车次
for j in self._station_seat:
is_ticket_pass = ticket_info[j]
# if TickerConfig.TICKET_TYPE is 2 and self.check_is_need_train(ticket_info):
# # 如果最后一位为1则是可以候补的不知道这些正确嘛
# if ticket_info[-2] == "1":
# nate = list(ticket_info[-1])
# for set_type in TickerConfig.SET_TYPE:
# if TickerConfig.PASSENGER_TICKER_STR(set_type) not in nate:
# continue
# print("当前订单可以候补,尝试提交候补订单")
# return {
# "secretStr": ticket_info[0],
# "seat": TickerConfig.SET_TYPE,
# "status": True,
# }
# elif TickerConfig.TICKET_TYPE is 1:
if ticket_info[1] == "预订": # 筛选未在开始时间内的车次
for j in self._station_seat:
is_ticket_pass = ticket_info[j]
if ticket_info[11] == "Y":
if is_ticket_pass != '' and is_ticket_pass != '' and is_ticket_pass != '*' and self.check_is_need_train(
ticket_info): # 过滤有效目标车次
secretStr = ticket_info[0]
@ -144,6 +149,22 @@ class query:
"cdn": self.httpClint.cdn,
"status": True,
}
elif is_ticket_pass == '' and ticket_info[-2] == "1":
"""
is_ticket_pass如果有别的显示但是可以候补可以提issues提出来附上query log我将添加上
判断车次是否可以候补
目前的候补机制是只要一有候补位置立马提交候补
"""
# 如果最后一位为1则是可以候补的不知道这些正确嘛
nate = list(ticket_info[-1])
for set_type in TickerConfig.SET_TYPE:
if TickerConfig.PASSENGER_TICKER_STR[set_type] not in nate:
print(f"当前订单可以候补,候补位置为: {set_type}, 尝试提交候补订单")
return {
"secretList": ticket_info[0],
"seat": [set_type],
"status": True,
}
else:
print(u"车次配置信息有误,或者返回数据异常,请检查 {}".format(station_ticket))
return {"code": ticket.FAIL_CODE, "status": False, "cdn": self.httpClint.cdn, }