diff --git a/TickerConfig.py b/TickerConfig.py index dc477d6..61de20d 100644 --- a/TickerConfig.py +++ b/TickerConfig.py @@ -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 并关注获得抢票结果通知的公众号 diff --git a/Update.md b/Update.md index 7448950..a29f695 100644 --- a/Update.md +++ b/Update.md @@ -163,3 +163,8 @@ - 增加候补订单功能 - 新增TICKET_TYPE字段,1=刷票 2=候补 - 目前候补只支持单车次,多乘车人候补,由于目前不是很懂候补的需求,所以暂时这样做 + +- 2019.09.02更新 + - 剔除新增TICKET_TYPE字段,发现此字段冗余,目前改为全天自动候补+捡漏 + - 增加候补订单功能 + - 优先级:下单再候补 diff --git a/init/select_ticket_info.py b/init/select_ticket_info.py index ab12371..97b9494 100755 --- a/init/select_ticket_info.py +++ b/init/select_ticket_info.py @@ -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) diff --git a/inter/GetPassengerDTOs.py b/inter/GetPassengerDTOs.py index 4055375..bedc179 100644 --- a/inter/GetPassengerDTOs.py +++ b/inter/GetPassengerDTOs.py @@ -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; diff --git a/inter/Query.py b/inter/Query.py index 15b9b58..304c81c 100644 --- a/inter/Query.py +++ b/inter/Query.py @@ -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, }