From f53270c1512a0efeb159aa986abea1e5c1618074 Mon Sep 17 00:00:00 2001 From: wenxianping <931128603@qq.com> Date: Wed, 10 Jan 2018 19:36:22 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E7=99=BB=E5=BD=95=E8=AE=A2?= =?UTF-8?q?=E7=A5=A8=E6=B5=81=E7=A8=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- init/select_ticket_info.py | 158 +++++++++++++++++++------------------ tkcode | Bin 13976 -> 14714 bytes 2 files changed, 81 insertions(+), 77 deletions(-) diff --git a/init/select_ticket_info.py b/init/select_ticket_info.py index d9fc295..96112a8 100644 --- a/init/select_ticket_info.py +++ b/init/select_ticket_info.py @@ -293,7 +293,7 @@ class select: else: print ('出票失败') elif 'messages' in submitResult and submitResult['messages']: - raise ticketIsExitsException("检查到有未支付的订单,程序自动停止") + raise ticketIsExitsException(submitResult['messages'][0]) def getPassengerTicketStr(self, set_type): """ @@ -375,8 +375,12 @@ class select: open(img_path, 'wb').write(result) data['pass_code'] = DamatuApi(_get_yaml()["damatu"]["uesr"], _get_yaml()["damatu"]["pwd"], img_path).main() checkOrderInfo = json.loads(myurllib2.Post(checkOrderInfoUrl, data, )) - if self.getQueueCount(train_no, set_type): - return True + if checkOrderInfo['data']['submitStatus'] is True: + print ('车票提交通过,正在尝试排队') + if self.getQueueCount(train_no, set_type): + return True + else: + raise ticketNumOutException("提交订单失败") else: print("验证码识别错误,第{0}次重试".format(i)) if checkOrderInfo['data']['submitStatus'] is True: @@ -415,41 +419,38 @@ class select: 'train_location': self.get_ticketInfoForPassengerForm()['train_location'], 'REPEAT_SUBMIT_TOKEN': self.get_token(), } - for i in range(3): - print("第{0}次排队".format(i+1)) - getQueueCountResult = json.loads(myurllib2.Post(getQueueCountUrl, data)) - if "status" in getQueueCountResult and getQueueCountResult["status"] is True: - if "countT" in getQueueCountResult["data"]: - ticket = getQueueCountResult["data"]["ticket"] - ticket_split = sum(map(self.conversion_int, ticket.split(","))) if ticket.find(",") != -1 else ticket - # ticket_sum = sum([int(ticket_split[0]),int(ticket_split[1])]) - # if set_type == "无座": # 修改无座和硬座的座位号提交是个字符串的问题 - # ticket = ticket_split[1] - # elif set_type == "硬座": - # ticket = ticket_split[0] - countT = getQueueCountResult["data"]["countT"] - if int(countT) is 0: - if int(ticket_split) < len(self.user_info): - print("当前余票数小于乘车人数,放弃订票") - else: - print("排队成功, 当前余票还剩余: {0} 张".format(ticket_split)) - if self.checkQueueOrder(): - return True + getQueueCountResult = json.loads(myurllib2.Post(getQueueCountUrl, data)) + if "status" in getQueueCountResult and getQueueCountResult["status"] is True: + if "countT" in getQueueCountResult["data"]: + ticket = getQueueCountResult["data"]["ticket"] + ticket_split = sum(map(self.conversion_int, ticket.split(","))) if ticket.find(",") != -1 else ticket + # ticket_sum = sum([int(ticket_split[0]),int(ticket_split[1])]) + # if set_type == "无座": # 修改无座和硬座的座位号提交是个字符串的问题 + # ticket = ticket_split[1] + # elif set_type == "硬座": + # ticket = ticket_split[0] + countT = getQueueCountResult["data"]["countT"] + if int(countT) is 0: + if int(ticket_split) < len(self.user_info): + print("当前余票数小于乘车人数,放弃订票") else: - print("当前排队人数:" + str(countT) + "当前余票还剩余:{} 张,继续排队中".format(ticket_split)) + print("排队成功, 当前余票还剩余: {0} 张".format(ticket_split)) + if self.checkQueueOrder(): + return True else: - print("排队发现未知错误{0},将此列车 {1}加入小黑屋".format(getQueueCountResult, train_no)) - self.ticket_black_list[train_no] = datetime.datetime.now() - break - elif "messages" in getQueueCountResult and getQueueCountResult["messages"]: - print("排队异常,错误信息:{0}, 将此列车 {1}加入小黑屋".format(getQueueCountResult["messages"][0], train_no)) - self.ticket_black_list[train_no] = datetime.datetime.now() - break + print("当前排队人数:" + str(countT) + "当前余票还剩余:{} 张,继续排队中".format(ticket_split)) else: + print("排队发现未知错误{0},将此列车 {1}加入小黑屋".format(getQueueCountResult, train_no)) + self.ticket_black_list[train_no] = datetime.datetime.now() + elif "messages" in getQueueCountResult and getQueueCountResult["messages"]: + print("排队异常,错误信息:{0}, 将此列车 {1}加入小黑屋".format(getQueueCountResult["messages"][0], train_no)) + self.ticket_black_list[train_no] = datetime.datetime.now() + else: + if "validateMessages" in getQueueCountResult and getQueueCountResult["validateMessages"]: print(str(getQueueCountResult["validateMessages"])) self.ticket_black_list[train_no] = datetime.datetime.now() - break - time.sleep(1) + else: + print("未知错误 {0}".format("".join(getQueueCountResult))) def checkQueueOrder(self): """ @@ -472,15 +473,17 @@ class select: } try: checkQueueOrderResult = json.loads(myurllib2.Post(checkQueueOrderUrl, data)) + except ValueError: + checkQueueOrderResult = {} + if checkQueueOrderResult: if "status" in checkQueueOrderResult and checkQueueOrderResult["status"]: c_data = checkQueueOrderResult["data"] if "data" in checkQueueOrderResult else {} if 'submitStatus' in c_data and c_data['submitStatus']: print("提交订单成功!") - if self.queryOrderWaitTime(): - return True + self.queryOrderWaitTime() else: if 'errMsg' in c_data and c_data['errMsg']: - print("提交订单成功!," + c_data['errMsg']) + print("提交订单失败," + c_data['errMsg']) else: print(c_data) print('订票失败!很抱歉,请重试提交预订功能!') @@ -488,8 +491,8 @@ class select: print("提交订单失败,错误信息: " + checkQueueOrderResult["messages"]) else: print("订单提交中,请耐心等待:" + str(checkQueueOrderResult["validateMessages"])) - except ValueError: - pass + else: + print("接口 {} 无响应".format("confirmSingleForQueue")) def queryOrderWaitTime(self): """ @@ -511,57 +514,58 @@ class select: try: queryOrderWaitTimeResult = json.loads(myurllib2.Post(queryOrderWaitTimeUrl, data)) except ValueError: - pass - if "status" in queryOrderWaitTimeResult and queryOrderWaitTimeResult["status"]: - if "orderId" in queryOrderWaitTimeResult["data"] and queryOrderWaitTimeResult["data"]["orderId"] != "null": - self.initNoComplete() - orderId = self.queryMyOrderNoComplete() - if orderId: - raise ticketIsExitsException(("恭喜您订票成功,订单号为:{0}, 请立即打开浏览器登录12306,访问‘未完成订单’,在30分钟内完成支付!".format(orderId))) - else: - print("等待出票中...") - continue - elif "msg" in queryOrderWaitTimeResult["data"] and queryOrderWaitTimeResult["data"]["msg"]: - orderId = self.queryMyOrderNoComplete() - if orderId: - raise ticketIsExitsException( - ("恭喜您订票成功,订单号为:{0}, 请立即打开浏览器登录12306,访问‘未完成订单’,在30分钟内完成支付!".format(orderId))) - else: + queryOrderWaitTimeResult = {} + if queryOrderWaitTimeResult: + if "status" in queryOrderWaitTimeResult and queryOrderWaitTimeResult["status"]: + if "orderId" in queryOrderWaitTimeResult["data"] and queryOrderWaitTimeResult["data"]["orderId"] is not None: + raise ticketIsExitsException("恭喜您订票成功,订单号为:{0}, 请立即打开浏览器登录12306,访问‘未完成订单’,在30分钟内完成支付!".format(queryOrderWaitTimeResult["data"]["orderId"])) + elif "msg" in queryOrderWaitTimeResult["data"] and queryOrderWaitTimeResult["data"]["msg"]: + print queryOrderWaitTimeResult["data"]["msg"] break - elif "messages" in queryOrderWaitTimeResult and queryOrderWaitTimeResult["messages"]: - print("订单提交失败: " + queryOrderWaitTimeResult["messages"]) - orderId = self.queryMyOrderNoComplete() - if orderId: - raise ticketIsExitsException( - ("恭喜您订票成功,订单号为:{0}, 请立即打开浏览器登录12306,访问‘未完成订单’,在30分钟内完成支付!".format(orderId))) + elif "waitTime"in queryOrderWaitTimeResult["data"] and queryOrderWaitTimeResult["data"]["waitTime"]: + print("排队等待时间预计还剩{}".format(queryOrderWaitTimeResult["data"]["waitTime"])) + else: + print ("正在等待中") + elif "messages" in queryOrderWaitTimeResult and queryOrderWaitTimeResult["messages"]: + print("订单提交失败: " + queryOrderWaitTimeResult["messages"]) else: - break + print("订单提交中,请耐心等待") + time.sleep(2) else: - print("订单提交中,请耐心等待") - time.sleep(1) - raise ticketNumOutException("订单提交时排队超时,重新刷票") + print("接口 {} 无响应".format("queryOrderWaitTime")) + order_id = self.queryMyOrderNoComplete() # 尝试查看订单列表,如果有订单,则判断成功,不过一般可能性不大 + if order_id: + raise ticketIsExitsException("恭喜您订票成功,订单号为:{0}, 请立即打开浏览器登录12306,访问‘未完成订单’,在30分钟内完成支付!".format(order_id)) + raise ticketNumOutException("订单提交失败!") def queryMyOrderNoComplete(self): """ 获取订单列表信息 :return: """ + self.initNoComplete() queryMyOrderNoCompleteUrl = "https://kyfw.12306.cn/otn/queryOrder/queryMyOrderNoComplete" data = {"_json_att": None} - queryMyOrderNoCompleteResult = json.loads(myurllib2.Post(queryMyOrderNoCompleteUrl, data)) - if "data" in queryMyOrderNoCompleteResult and queryMyOrderNoCompleteResult["data"] and "orderDBList" in queryMyOrderNoCompleteResult["data"] and queryMyOrderNoCompleteResult["data"]["orderDBList"]: - orderId = queryMyOrderNoCompleteResult["data"]["orderDBList"][0]["sequence_no"] - return orderId - elif "data" in queryMyOrderNoCompleteResult and "orderCacheDTO" in queryMyOrderNoCompleteResult["data"] and queryMyOrderNoCompleteResult["data"]["orderCacheDTO"]: - if "message" in queryMyOrderNoCompleteResult["data"]["orderCacheDTO"] and queryMyOrderNoCompleteResult["data"]["orderCacheDTO"]["message"]: - print(queryMyOrderNoCompleteResult["data"]["orderCacheDTO"]["message"]["message"]) - raise ticketNumOutException(queryMyOrderNoCompleteResult["data"]["orderCacheDTO"]["message"]["message"]) - else: - if "message" in queryMyOrderNoCompleteResult and queryMyOrderNoCompleteResult["message"]: - print queryMyOrderNoCompleteResult["message"] - return False + try: + queryMyOrderNoCompleteResult = json.loads(myurllib2.Post(queryMyOrderNoCompleteUrl, data)) + except ValueError: + queryMyOrderNoCompleteResult = {} + if queryMyOrderNoCompleteResult: + if "data" in queryMyOrderNoCompleteResult and queryMyOrderNoCompleteResult["data"] and "orderDBList" in queryMyOrderNoCompleteResult["data"] and queryMyOrderNoCompleteResult["data"]["orderDBList"]: + orderId = queryMyOrderNoCompleteResult["data"]["orderDBList"][0]["sequence_no"] + return orderId + elif "data" in queryMyOrderNoCompleteResult and "orderCacheDTO" in queryMyOrderNoCompleteResult["data"] and queryMyOrderNoCompleteResult["data"]["orderCacheDTO"]: + if "message" in queryMyOrderNoCompleteResult["data"]["orderCacheDTO"] and queryMyOrderNoCompleteResult["data"]["orderCacheDTO"]["message"]: + print(queryMyOrderNoCompleteResult["data"]["orderCacheDTO"]["message"]["message"]) + raise ticketNumOutException(queryMyOrderNoCompleteResult["data"]["orderCacheDTO"]["message"]["message"]) else: - return False + if "message" in queryMyOrderNoCompleteResult and queryMyOrderNoCompleteResult["message"]: + print queryMyOrderNoCompleteResult["message"] + return False + else: + return False + else: + print("接口 {} 无响应".format("queryMyOrderNoComplete")) def initNoComplete(self): """ diff --git a/tkcode b/tkcode index 86b791b2ec71fc0656ac5d57192991c0bbdfe31c..475bfb175f874f24e5a9d0d9fc3b54acf3cffeaf 100644 GIT binary patch delta 13360 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