From 43783612da79cea2d284fa4e8808a902666af429 Mon Sep 17 00:00:00 2001 From: wenxianping <931128603@qq.com> Date: Wed, 10 Jan 2018 17:29:05 +0800 Subject: [PATCH 01/18] =?UTF-8?q?=E8=BD=AC=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 21d88c4..36c9922 100644 --- a/README.md +++ b/README.md @@ -20,7 +20,7 @@ - myUrllib - urllib库 - 思路图 - ![image](https://github.com/testerSunshine/master/uml/uml.png) + ![image](https://github.com/testerSunshine/12306/uml/uml.png) - 项目声明: - 本软件只供学习交流使用,务作为商业用途,交流群:286271084 From bebdcfaf316245ec26f0c8e124be37087657818d Mon Sep 17 00:00:00 2001 From: wenxianping <931128603@qq.com> Date: Wed, 10 Jan 2018 17:30:01 +0800 Subject: [PATCH 02/18] gix --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 36c9922..1d32455 100644 --- a/README.md +++ b/README.md @@ -20,7 +20,7 @@ - myUrllib - urllib库 - 思路图 - ![image](https://github.com/testerSunshine/12306/uml/uml.png) + ![image](https://github.com/testerSunshine/12306/blob/master/uml/uml.png) - 项目声明: - 本软件只供学习交流使用,务作为商业用途,交流群:286271084 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 03/18] =?UTF-8?q?=E4=BC=98=E5=8C=96=E7=99=BB=E5=BD=95?= =?UTF-8?q?=E8=AE=A2=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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 Date: Wed, 10 Jan 2018 21:32:11 +0800 Subject: [PATCH 04/18] =?UTF-8?q?=E4=BC=98=E5=8C=96=E6=9F=A5=E8=AF=A2?= =?UTF-8?q?=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- init/select_ticket_info.py | 24 ++++++++++++------------ tkcode | Bin 14714 -> 14600 bytes 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/init/select_ticket_info.py b/init/select_ticket_info.py index 96112a8..efbb58b 100644 --- a/init/select_ticket_info.py +++ b/init/select_ticket_info.py @@ -241,10 +241,9 @@ class select: break else: pass - print "当前车次{0} 查询无符合条件坐席,正在重新查询".format(ticket_info[3]) else: - time.sleep(self.expect_refresh_interval) pass + time.sleep(self.expect_refresh_interval) else: raise ticketConfigException("车次配置信息有误,请检查") @@ -438,7 +437,7 @@ class select: if self.checkQueueOrder(): return True else: - print("当前排队人数:" + str(countT) + "当前余票还剩余:{} 张,继续排队中".format(ticket_split)) + print("当前排队人数:" + str(countT) + "当前余票还剩余:{0} 张,继续排队中".format(ticket_split)) else: print("排队发现未知错误{0},将此列车 {1}加入小黑屋".format(getQueueCountResult, train_no)) self.ticket_black_list[train_no] = datetime.datetime.now() @@ -490,9 +489,9 @@ class select: elif "messages" in checkQueueOrderResult and checkQueueOrderResult["messages"]: print("提交订单失败,错误信息: " + checkQueueOrderResult["messages"]) else: - print("订单提交中,请耐心等待:" + str(checkQueueOrderResult["validateMessages"])) + print("提交订单中,请耐心等待:" + str(checkQueueOrderResult["validateMessages"])) else: - print("接口 {} 无响应".format("confirmSingleForQueue")) + print("接口 {} 无响应".format(checkQueueOrderUrl)) def queryOrderWaitTime(self): """ @@ -523,20 +522,21 @@ class select: print queryOrderWaitTimeResult["data"]["msg"] break elif "waitTime"in queryOrderWaitTimeResult["data"] and queryOrderWaitTimeResult["data"]["waitTime"]: - print("排队等待时间预计还剩{}".format(queryOrderWaitTimeResult["data"]["waitTime"])) + print("排队等待时间预计还剩 {0} ms".format(0-queryOrderWaitTimeResult["data"]["waitTime"])) else: print ("正在等待中") elif "messages" in queryOrderWaitTimeResult and queryOrderWaitTimeResult["messages"]: - print("订单提交失败: " + queryOrderWaitTimeResult["messages"]) + print("排队等待失败: " + queryOrderWaitTimeResult["messages"]) else: - print("订单提交中,请耐心等待") + print("第{}排队中,请耐心等待".format(num)) time.sleep(2) else: - print("接口 {} 无响应".format("queryOrderWaitTime")) + print("接口 {} 无响应".format(queryOrderWaitTimeUrl)) order_id = self.queryMyOrderNoComplete() # 尝试查看订单列表,如果有订单,则判断成功,不过一般可能性不大 if order_id: raise ticketIsExitsException("恭喜您订票成功,订单号为:{0}, 请立即打开浏览器登录12306,访问‘未完成订单’,在30分钟内完成支付!".format(order_id)) - raise ticketNumOutException("订单提交失败!") + else: + print(ticketNumOutException("订单提交失败!,正在重新刷票")) def queryMyOrderNoComplete(self): """ @@ -565,7 +565,7 @@ class select: else: return False else: - print("接口 {} 无响应".format("queryMyOrderNoComplete")) + print("接口 {} 无响应".format(queryMyOrderNoCompleteUrl)) def initNoComplete(self): """ @@ -601,7 +601,7 @@ class select: break start_time = datetime.datetime.now() self.submitOrderRequest(from_station, to_station) - print "正在第{0}次查询 乘车日期: {1} 查询无票 代理设置无 总耗时{2}ms".format(num, self.station_date, (datetime.datetime.now()-start_time).microseconds/1000) + print "正在第{0}次查询 乘车日期: {1} 车次{2} 查询 无 票 代理设置 无 总耗时{3}ms".format(num, self.station_date, ",".join(self.station_trains), (datetime.datetime.now()-start_time).microseconds/1000) except PassengerUserException as e: print e.message break diff --git a/tkcode b/tkcode index 475bfb175f874f24e5a9d0d9fc3b54acf3cffeaf..09b89da4c2045026cb9f1d294130338d3b616208 100644 GIT binary patch delta 12889 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

8(p-1 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 N3%w5XvWSB6-vH}47WM!D From 85ae1b9f6b566d1568906b60a1576f913255f3c5 Mon Sep 17 00:00:00 2001 From: wenxianping <931128603@qq.com> Date: Wed, 10 Jan 2018 21:58:39 +0800 Subject: [PATCH 05/18] test --- init/select_ticket_info.py | 18 ++++++++++-------- tkcode | Bin 14600 -> 15384 bytes 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/init/select_ticket_info.py b/init/select_ticket_info.py index efbb58b..de28ec9 100644 --- a/init/select_ticket_info.py +++ b/init/select_ticket_info.py @@ -498,20 +498,22 @@ class select: 排队获取订单等待信息,每隔3秒请求一次,最高请求次数为20次! :return: """ - queryOrderWaitTimeUrl = "https://kyfw.12306.cn/otn/confirmPassenger/queryOrderWaitTime" - data = { - "random": "149545481029" + str(random.randint(1, 9)), - "tourFlag": "dc", - "REPEAT_SUBMIT_TOKEN": self.get_token(), - } + # queryOrderWaitTimeUrl = "https://kyfw.12306.cn/otn/confirmPassenger/queryOrderWaitTime" + # data = { + # "random": "{0}{1}".format(int(time.time()), random.randint(1, 9)), + # "tourFlag": "dc", + # "REPEAT_SUBMIT_TOKEN": self.get_token(), + # } num = 1 while True: + _random = "{0}{1}".format(int(time.time()), random.randint(1, 9)), num += 1 if num > 30: print("超出排队时间,自动放弃,正在重新刷票") break try: - queryOrderWaitTimeResult = json.loads(myurllib2.Post(queryOrderWaitTimeUrl, data)) + queryOrderWaitTimeUrl = "https://kyfw.12306.cn/otn/confirmPassenger/queryOrderWaitTime?random={0}&tourFlag=dc&_json_att=&REPEAT_SUBMIT_TOKEN={1}".format(_random, self.get_token()) + queryOrderWaitTimeResult = json.loads(myurllib2.get(queryOrderWaitTimeUrl)) except ValueError: queryOrderWaitTimeResult = {} if queryOrderWaitTimeResult: @@ -601,7 +603,7 @@ class select: break start_time = datetime.datetime.now() self.submitOrderRequest(from_station, to_station) - print "正在第{0}次查询 乘车日期: {1} 车次{2} 查询 无 票 代理设置 无 总耗时{3}ms".format(num, self.station_date, ",".join(self.station_trains), (datetime.datetime.now()-start_time).microseconds/1000) + print "正在第{0}次查询 乘车日期: {1} 车次{2} 查询无票 代理设置 无 总耗时{3}ms".format(num, self.station_date, ",".join(self.station_trains), (datetime.datetime.now()-start_time).microseconds/1000) except PassengerUserException as e: print e.message break diff --git a/tkcode b/tkcode index 09b89da4c2045026cb9f1d294130338d3b616208..76f028b9128fd71edb389a46e42319281e59bd00 100644 GIT binary patch delta 14184 zcmchdMN}Qp60Q#c0tA8u2n6RGT!I952p-&n1UR@K2ri8W*Wex?xVuAecXxMpf85Ev z>y6&*4SKB_^sd#r_UhX8*H?jd3C?AH2tY{wZ7}M4X;fSqLt_$qHa&4<2!{PEhRW(~K#6GZiPSA3TP1JkbsqJt<5thPL`Ex*po`e*&gE zI)fr5?tcyHAs7kh)y)nidmNl^mrs0w1NYQIiYfCa#d2 zWw(A?{=r@Jo|}Q%IYCRwU|m)RJV`pv>58=tlT?)fquB}tdw*cmy#xs?qD$qWFQE5| z-ea|)m+A&_Y<>CCTyy##8Z7+7z+0{!JN*fF`n;}ObG3LZvoWen9)@zJIptn>bY_Y$8Rp)0 zZL}R~{F27um}ifi$C(#UaMu6K4D>JV>|;_i_i}*-#&t^K@gTj3K|{=R7lGYF3GJi_ z9?w>yd>&!}Gu?l@W*w4ec~LUh{cqCHkJF}FccflGF{&sZgcOhjv&~$ms+Xf{3k?~I z7}6H2KJc>DfI+czNT(!E`&Y}ce9sKySE{C+cyaLxJkd^gQJHi?-7F6^Bm6zz$79M- zJ__c+(`${NFm0B5a4mF>%7Xj0@w5ZNCL`5T=k)Bghi-h??|vQ`EH6Lz)?`81vl#lB zW%A)d{8qZb9YfSD zYeh>#)WX8S-g*?JDTBE<)Hl2bw=_l(yzQaMQ3S?bTrd>GgGDQv0}gTe6ru6kL_|i=ddUp^;GJ|2bsIl z7Z9$*|4hY0{rt&FG?6X$`O;g#?O|zBWL@F)Li)-2_xh%X2it?X;*`L<4eL=P$VH68 zUJKUL;gyzK(6J>|jo-4BAK1{PhwQ_n=*(YU<3>Rq`Mc}*iyzN)5&yMvXGQOyn?hXv zk{9w?Sv3QsE-5F!9(i31?|;{ZSym_PC+G8DKH`QJ0%#g@ViwopakNKJ z!*HuP1HzcbN;`XBO`9y|Kl}##VxOz>b0kB>!kVH^lqYP_g~1EBlXv65NL6dn3+PP6 z<-ew?xCDEqvxVlwF(m0i8&{m|n@Orwu@8aN;b2!dl5ptHl9J5-94t}Z8*@6+|8Dkw z+xDXR^Z)Aw;Q#)HU{F#pO~#vGXm9xjtc#_DLNSI8?ieQYK~bR#hSqtf3`yv{(;!K8 zRq=bc5JLZxAg2v-vzLEeL0ckHBGpDLiy=fTX75@X_9cwur;pjdw@pNN@AUkFuniQA zIqA3zEx89uCk8YmFkv^>u=7l*zWSLy9;TqB%8cL2OKr)^rBgFi-z$%2>%Qh__T0C;BSqx zyk6NoZOZ*brQAARFwI{$G4l0tsx$WDmMnY2GdUw)Q-e3Fn}*Qs%j{V~;J2DlT3LKV zm6rU+%orQN7}b!%TZS0-ZB^kuqo7&1eMzJ@33$7CRwd*O{>DD4aa2UCDZa`IaAG)p z2}R$8H__>gm^A7Iyaa;J(@74J($b4er>~R3I$7wY9Bi?T5yvUfR94TCmwHO*`=Dng z!4L=4GxUyR~=9d+f8dmeL}-W51bf6&mMa0^`4 z%dM0SDQn)ofVv!6*}6(~%dP*Ip|yFy@8DJxp#NBS{E{fAg8EZm)_nq%IaA><4!NEVb zkjx4{RVj*Tz6RtID8O1%%-B3bGS;3e3l2X}FXK-U%;148@C zoe)SnCAgkw;3I)CE6Q|<2Q6;r64DXB-|rkN^0{wTnx46il-|ZI^~4?ekuXb^th_MD%fL?+e|UCRbMGR&`o1Y zI{O>A=)CgHE9}geOnuabdt@#6T3-^eZ;Sf3J1#X~Vwy&yzR_ayW@V|Koh7enw@$BJzlwtKLm9eJi}Y z4U}svI|O-QK~FjYfVD6Ei_k%O~Mj+4H4fp=HH`ecG+c+)*5OV}zTU#n5}B&Vty< zjK|OcaqJHz5x2h_p=i2S+|2gqCL#K5`90d0!!-QuojX&VqsDHb;E2sC-V$VQKf0}?X@q?;i8&6Lc8p1*dsoH>c;*OSMdM7t}N z0dDFDU#D%062vSU*?N%%k=HbVkso#ufBCseS#NdBeoaBzI-TfEGYoyo{$%jo&*X+z zm*^(PO1Y$ePL#eXV#HAdbTfDS$#b%;f5YvNu$;-}oiVlstk<_xwb)XB#Op07^m+l& zhpleFb6w-yInb_jj8^thZsg1cxKIWuM73JDXGFf8E?Q_sl+SmbKIww()3+%6p=X2R zwe<$3t?@_r8>bqR`JwU+6O8^%vbddxHXJgIdJZZ|tZxsk7CqX40xi`1F){w5P*~^m zj6AkP70(w#Tgh&e5uw~?#3N1ReY?dWiiAy_EOMhN=gOnHQ%|4TtR``z%HO?AYV4mI zsNgf68LW=ore!Zrb-^Cd&RaAcPg=e{=(e!S40M}+z1GiQ6rshydi|%BCB2CD!s%b% zF9d(F+&xoH*+gOhw7#qN*0vJ6?_I5^zTk$eJ5bAr;6zsV*z%x#nlDwcTrM);f-TiQI zBhxF{chx20F6Q2YFNBd%6v6kQj~#-6%6Wnxk?}X#1F=6Gh#pW(TMM{`IE_e8F3-?W zMDWTldnQ~Lp;`=Zl@<86uhl2G*UDT!m>XyOAaoOYpi*jW zy^)4f^UJl;^DF{Rj8=-$R(d-ONAWwd=;%y}7K^FxhiJ`+16^O&ZC-*!BHXZW53bTL zI-J_be~0%wfh>^7;@3q_I*DRY$0!+S`B>}pyYh9r+^^9bd*DA;ui1)p^Syl>$1-Qt z5B85D_3+P{r3rq|kSIlqPrrgbXZkECjTRq5&8DD9yk{IcJD@y8@5vqhhELRtZ|Ieq z1K5KhVa_TF8E)^Q6Z~RE*5nJcu>aMc5UvpO{^Ptc2i73rR4nC(x4eM1x~Mj3S0CXs z=58@2+OlrfTd8igIMM>|+i8u!3#Dit=BVvb+-+xp+G?t*8hBL1Y?<)Qio0KD@4@e~ z3wgfk;0Y6^`Ui;AU@SDz%ZhW_Ndb!#N5%M&nJc3h z;O1yjsLwF3c-W^UlMi)0LtyA_vOo&#KwVdJen2Va2n+w1h^R1@6?4%_iB;uTFqaS0 zC~cZ*GJ4sKJBs1RD@Dkc*Q?J?q6UNimVZbFh~D>2=RDv{#A_lc=? zHQ|2%RzyqLi?3ajw(n_P*0-I)1;`8_eaWfM2k6+5&1d+{v zb#b&4ti(lL`P8iLhf7OG_Z+IK6jOS~svKBr?a;N{qCWL=)`H1dHdeFrZXVzq5 zx^<%k`4&N%rLQBu{a$I}ZyShI|6Uomw8aQMDaEte9SaP80l`LhF39~Ah!gfS8!~(* z0oUL6P4U$QH;|`giE+b`QUvrDe031*pP7MJgK>QZ zp`kW-!Q<+0&v@+hUDX}A13W3$p51Aoe!zEABXBNG0L{IB`xO%I(5|KCyWE_&%&tT# zAg+g!j?>(prn2|sJ)=sKC~H9>UKufa2Rgd3xpL*dQeu@K;Y)Wk8-C1f7#UlpD-T)A z7cOXN1wkAL169%5oj$a|L)3sMDf+%dZUS{!cjPyd$sFhBi5rCt8$l=b@-L$vQBx&v zXd)OE0)%?LZycAZE1Hpo(-U@u%MQkH5P0*Y{3J~{Qi<$CL)#W5Y$wE1v1K8&ZkCgN!+1)VUP{NDrYZ}8tq)-nJ&vJJ3d#xI zCM6}KQ%lmCAu@i)R7W|}fOa@4ouhHKm`BaU5lBC0V01S&ta&neEh9#;!np-TepsMJ zsymc5(tRG9J!pFYHHiX~rv$64U1gDm7(}#n0s?!G_dVf~z2H4{Yo%kEz3F|LTs*vN z4tYfG4!87lfhO2^Ms)x;J1=%k2uoCwdY~=xq7XhGfDRjWCfQ}#XSf9($)8zNj{stfO<4A+9vX%{}$JWGr9lPjyh&03x^1?cq=(& zzlm!$Em7@nAjP?IdX<6&a2V3tk0vxa9LN<;U)ozi7`H(1o&{2u0KtzB8aegNX=7Pd z0}zI`ofR{L=bv!BngeCNdorsJAzGz1D|6hY)|=QVFCf(OY)?3~qB(b-X@Jdp7CtL9!4R#MqA z>lmQKKLS{Tt~_I#^W5>u>amM+9v$~6$QCHelP&W5jHteOiN6(SsmuSdx)rt|$xc7J z9X2IC%a}x*&BTc&DeiWeIiBC#iX)TERhS-xw+Bzm^sxzc9xjr{#nmU!mYz}g$>_SV zL>Q73ih+2juVcVQN8dKLh$EnKin0_MmJ38WmmECfx~oN-o$t=4Ut7lQf8FNN2uVMV z>j=df;ocGWmtB2p9;ePW^fnXg!mbfgV^Gkd@eNH9Ly(1VxFz>Yx{pK*lh@%=vKlIEY3lTuAo|PE!3={@!y4X1itg2_LVT1tg9DK?- zV!2IcUD(5vky0p;JpTH%0ZO?LBHx8Nsy~04zVk50g5|1A7^BW7bXX!~KKW6Q(%5Ri z)td3$?0Z&iw#HFz_S`qp{}egQ4eM=8WCk;(%^6K|(0YWrS5QCpmxr_0*9vh3w%)K+6G?sr1=-l6cL z7?!F7+&`};i&RVh*3Wn}n^NG6hyCn> z<42?Y2b~}QpBAW*!h3eP5sy4V#OC=bFv_7A5wWe)j$DHNu1J1-tbDYYU4KJbtC24r zMm`(cN%0xpkI{W_z)K?Hdi418yPmfH1?18w%`-lxvoqq4qbNiKbcPvhd_7&{R2yQB zDv1+Z;#RUN?v|*--2w2HnWm4?5I-MlQuZH9EtM@NjBvLFt48YN zyPx^bu3ju~_iX5DH)whrRS0#f>w`IPrO~blUGNcL-cg~7>;hj`o%A-u&GJv~KgE;K zOcgKIUZ*aI+u54%f%t_tqS7<*52SJrlAg27<7xAC4TLJ*Fad<-w5#w(DL$UR51N^a zy&?t>lL;&2rmo;yJ(2e!(Vf}fdevOdn?_w1d|xaxwghECKvJuY8^m2k0e0!EiAnxk zrZqe??6M;3OGe@Mr{Uo(_QxVff?Zde&s^XycgBXIlRCGC8s9JthX=cZb+V0N8Q_8&I!O@P|XO$o>Y?xe6voO+f z`6l0lEer-Dh0~`tO;;^Z;w`V+j{gb$i(0peRt8T$X(umGUA`_Ww<0zEJYh#^v{J1` zP1jXs3viKLKR3U%khY1nC?Eb)GIhmWY<};C{Mc8*jzW$m%+kA$q=2qi8S2FiE>;fd z{K)x$ud6L#6)T2(JAf&97lig!-E3G~3gT7WZE@ptf8X&GgvBd;bYb{TP9t?t)c&S^ zCu8rxLT&h8(>kYN9>lj%wO>-TK7TI7? zsYUB`)#<^J%dIfKVk#$s)hT+JA@iAmXj$WHQ6{;b)NI9WXYv4verI@o^Vs1+DMZb7%>olK%Lzc`6763y)BFWv3ih$`&{ZwlVNPl0ROycqSN_bH)M z0%pg=z#=+OO(_woT<5=X2*w6ld~fVyCenY~_k4Tj?%GmG5WFn2;B{WB)?~1X?yMa) zM-<5t@t2-IWr**G33I(wMYg_>0nAH+>_ZBNR(UT15d*6fgF?2JRlgB4nw#Qp_f{9X z*>3JO0tnjX2B{VGq$8*9jq-AuZcg5t9zgKRNYqS?t;-0}sJn1shu2IglTgn|a4nyg z3z+NP15uwWT2II>KtIq^`!pBbR^EWWmz1_|Rdq7$Py{+I&>wF54gFBkz!snRVGga) z2^|PQDyce92_MIeS8lm&bo0<((??3@KRri3p#D-5QzQ@1=Kbtcv}!MaGhOKK@ZP!zTm&WrMl@@Ugr(CVjf< zM<>q#J?#v;5QalzOvH5F{MxD#(8PM`oEy7pg|EFsQr)GvtVOEh^KU#1aeCLs%A#{D zv^22VQC`uF`V~B>M!dq#h&%i%;PHLTEAY!{jQw>?(Z_fb*!Rd)$dN{B;D3VuZxtvs z5=`u}BFO7L=Oc2U5ie!@n5*P{_A%(eIbMVG`swqlE8U*6T;<6xrEh_G`M=AHnuGH` zU@04V@hANH;a&9*aaSn-L&=t2?j=(yBuceBZQ}XgfMI~JM`>T8u@O7 z+|>HpxQpc#jUF#o3U3?UBdhD|?(mcPS0@D(3nqg&AS@BUt>aViib)ZZ2<f!ECBdU|}1OmwyBCCJl?7qs3id&BxQS5H3(^_Xar-nWwLP(uwCCSzWF z@u@?fc0xf`YsB73^(^(sTcSK}TPC~iU-i%g@>ZyifYGAMu%JKemgwIyH*mh^+VA zsaE?)(V#K{qwI9z`8{?dbfc6A*ET{Z+&1D4%{%%I8J|jt&KF@ClS&zDoV@ao`RPeJ zeS$2~q83jchKiwy{-ze}P0+jP#9oik!czM*9BaKt*bUS-On%-a#){)A%lmKZ|C_G}@DLUe5=&1PBakY^es7n5bJdqSAovNl?0NT}YQM_r{CmETCz{ z8qL@|4K#n6!Nc67f${0kQL9A#Xfxd-XgF77B^!=s$AUmluIt*GuXY1V(j^xHRA0*iwMeQtRnluQH7eS!{+M8GAiHmgZYtmjY73$1^JB7sWx*WJ3g$?N3*)@|-g?RA$vCrLRUC%+D8G(6Dyl`>1Yab3yT=pl+p7N|}8K{{es0$q`c5worRA!daA;Gv9S7@5Fkj)-N%_+31*1 z5)3=ZlarBBF80>5VCwkxGJmE1+Tdfjp8mX}gMFk@{=&aZlMC`nE^5DM3l6S%s(?QD z?kMuR#1t<_FIUi_zBtm(2tldsKkWkXilUIR_x-BviySq=BcNz*E?r~-`d`_z5@tl@ zi>O-hk%#&ptY7G#6eD8zaxzPi&{?zV1?EE*7AyMZJD zvFO5}QOMy~PLnRQ$qIZ|kXPWnSkfXgJNX)3jA9r1X)6~)@ zfciNky2(hbIeq=)F*vUE>M{KuA$B8}tF-=KqcUH^3clsKpWgsL(cP@!#Y%hEHbT88 zSMOM%;=@5|m0-gERchbk1=L-Wa#*!E@m^RZb}L)$1+>Z7A!WE?>?4EbX|^{e9Bt7&xjr*`5%WJP3lZ*53Q*>d8(r zvec^Vvi(7+nqv~c>zyeZ&nP3mPNd?ZGDz-O^X-`g?n|{0A`JxDRZPNG!<&dcOtjvH zTZl*&mst6C(h=G&5sGJ@BK=RI3t-xI`YqIqUMz5HaSOQ;hs!vZ6D^eO^aLL*Kbu1oo&)qaOEYuuw* z8431AT--h|Weqi)r6&Mj4V5HY^UnsE^m1p5=Yay)&Nfm$TFD(wj^NPBqKZ`}B#7la zz@{S`;GZRd#@wEz<&h#(6b2y==h}eS&*bZQHjD3y^T7p&ulm)RD0N{4ygPN_e*wLr z51_4dnF4;dP$^eU2n^<3PuEP(1s=v;^0o5_NASY=QX%fYpmL!IH zk_dH+fk<4(LZlHpDj7lb?{H10x^<-5^=CtO1X5{Z=u`Xg>AQWmm%J8tB6&AqhvvOW z_;Hjfutxd|J?0mXS2X%-LDDP+nUO#5!6Y<#H%DZ7g|NY&&-I35_fPO48+R+AnML95 zD4-<;+w8dh?II4_rg?uJGy5UjpB8Yk~hD z>oy2fKYF-Ej_kJEJwr;nR)%skVz1qtZTrf>;YP?xP*itcRk4ek8tw|kHuA)FlFks- z8CCpWgsQ3vqYI(fLA-T#P$UXj)QE5luo#iK^C(e(T)N64%t!dQgZI!@ZsNvP4*5<_ zKI34vE@Y%3R+Qr~Py`Kez+)Xl59di`J#jtINke3oE>Go{&lV0%K7am)cNR+>O{)Vf0`!-oO<<>*Z41Q}Eyt^Sc-u_Ozdr;gz) zHRI-U8#hTaD-WsX>(3K6uOo2?Twf2x+jhdv%T$L6`8Ku>X5E5+LME%QLvgv9gD&SN zs(uIjYo{JUwMF>mdH&jbL>KO6TgfHZd#3B#yfv6t4b%PFq!wYT1RuBwj$3s#S#CO> zKGvuBC2p2wtclgV{sPjzcf@b6oQ6E~8?%urBd zkqlAH@LFtt=qb9?Iiwh1LQu}uDeL?^vl5UKy$bDx4>-nDaRig0M~kSK_R;O?q%_1A za`k5H5Jfhvud8Bg;^Pgt2)K|nCmOZ(4b-&Fr0@pxPK7SJ>rFtGGnwQOfmd{x<1Dp* z!O7ab4x70S|7{}S*V_0`sR!R~GDW3e2>TpIBK|TaCwd=z-m*=GszgguSNp$jQb5V! zwlIrl-4b6*kHxVB5qYOz_03PAIo)uoowhZ24A0CHDCULkaqPC zVq`F!*pbYv#~K1Yr89A;nL$FLC9Mls2bn)I`g3i5(t0nlu4TV7Kk~EYte^pLu0q%= z11maNh|rtgeuPLPHf>+n3|6CJ&~ey~kMaQ?qYBYLRTweAZnh_{m`Hwe;i+IrjeE9A zj6%};eX~fc(Uzo6mz|uP1kS`UQu(7uO?ktp)y5-R(g?ymtE2 zNrB+-uUn)0n(o{8kCi&5U9fc2`Bw}YF}e4=F_XIcE>5|o)Wv~4HLUCc63t074wC3+ z>FYaMZV4MLq`CN)6%qAsuOVhj(r16VM>3LcBK5F~JZvI$c|Bh^yJws4mvU{~y7A%& zl|sxc$b%jz9y4k^gV!&u0~f+ty7A34bfqWB)B0Ko>eMiDj_WzIKb$ zWk^46m2G)?+W%c3K5X?ggC?tzb+~8Q%7%99zHsCraz4L|?Rk9`b2%g+^^JaO_wN*R z*BHC7(L-ugg(o1fP)0DB+2YR=WyB8tBM(M@1w$q%*G1=K$)O3aL$^D|N&N&Vx7-}2qH7vY~+|Fkb6YgP=QZ<&-qD=mV ztHIjg;2CFY!n$g28un(m0G+S0_okce{?kVBm%BfI>%%q_^Ukvzwo+4i$GKv-$akW8fMC^gcU|gSzs_=1Dv04G_bh(vp+(~*4^sIcYeR?- zCmX?b=X@x&i~L+|AuyMhhCi=xgkvnf>ZqMQf>ehK<0bew-y0UnvPthpV6~ju4V!6( z_}t5LlhcLx&u+oIW9poCN+CohEwsXDtCGOs!Y~p%0+2$qQA4|#J<6>K!uCcm5W8d3^2+#kZr$u$a3&|R{1pQz6T!%+8%Xf!@m|d?Z8+lH zqMuF}G;o|Bp!wj4>tBGpbXjMW`Ca3a-9mAB*}2TPUI|J6^|9*33!*% zmGt?u(@-1VhTsnMd7iOpR3K|*Mgj}&*%z7cv#n`X74ix}nGTiEE{%qqtTKxaz$?W78d zg-2quzE`VIT{eeV$V%WjIWp;5T=f*AcLN7PYkjAT4CqMs9(u}57RpTXyd~AZ| zaueJ~Xsc0n2U$1}S^hO;!o<1`Otz@w?zMb6$$aftXv<#b=eIjvcc1GOf~kbNnI+-D z`1h(KDDS!brK`BVryX7bW~EHz6mAR2ZWc!E>P|?uBV-^u=go-Ta|?-Y4Y4I+j}IFQ zr19^1J?-k3>cV@{QY-BHN~yxvh8ES)2T$s-59g>;u1Zw{gds9y_}Db&4};^_}|ePUsG>>B&Q?JJojy)A`X& zAthE$*ae_(C;u9hzx-2WjkPN<-l~KL@!l~}j#03@aMk)cH9)Sj1RuRheubX2-P|*1o>?2A0b@^=el~_5R&_6fLJ*AyDq@i?4(&DLmF9Dr zC}=2IdA1jcI}zv{%Z<8cySIB4n(K((G3nPQeJ<}pARL_d8bVj%MBL94=aFp3)kmN! z^tNzL0$_@uSXk8RppeYe^I@yeL?6$=_w7L23IK6!uuJpkuIj|A1l-H?431noV7<=k zRiH(-)^j1s5Ro|9p_@12zaMY^$rwjK*{QZ$Qo{WZ?y0H-dIbnb%S8i>S5rr2@2#%s z4KNbT8xvA+dim}o!gp%I#0`ob^1Z}fdJMzV|jDu?3u}S-O`i$otB&u)+(QJJqrE;^l(ONMvF)8Em3w@UbhpQig4-_l-wg;wpa=Mdg zqv0b|_$2?)Z!2EI#Kjl?KrAFfIq`62<^93sj>=x#4t;^Hom zzNNF1GyAT#3$C_l!WDwp7RUk8{>ka_fajoz3$ZH@#-4+g8C6llN=OF3D<gKc*V;DH<;TL-J|M;8&}5@Iq^>Cus0N^xNexRXWX22N*J`YE(-knA2h7x9GCpH zcxl83MIEHv+iARj%-k_pRHK0N=tjJy-r+4mx1XdD=E0h}95JR#-4|)AAD&p0#Wktp zhiBp&0e#lsF~dxzonUENepkykzh#_9^y>v7v6 z5eUqINv1wX{@cX`zmJ^N_MI`Mu04A8~XqYwk^IEp&P68sya zsMH}<36_us3!`ut$7)WczflhY;3nvAhxJGlO!mftjArM(McvN+kHu$)eH?`=wNEix zB<3q96*z#^)5^WW3+Qk!cMbDF?(-8yjrxN+rxz-1s z?JGgAgS;P7b}is@r$}JIvm*r--lA6u{ga%MwzloudyC``|BP*&e!1}vbNDD*f)Yr9G#%68r^zou8HWvjCT>F*Zvy zm`o3j(3Ze;)8tio5^Y+IN!z4;7vU@SL?^8#pq#c!zs|v3kXFe-2wsGx}|5(^j&I>(^|c5^=rt=CZlUJouVW{pz$@f^0X^_sNz=8IE7uG3 z6Gu=BBECwr!A`+b)K?g+46I2DKB0-efIz^5k?R!BbGdq*8;v91A5vdVyrYCBxxNX2 z*Rnjl^n|+@{~2G$s;j%DA{16LVDda!D*mT_pHh88_%L(!d`V{Y!2CVI^9q(9Qbf54 zB(3#;e!S$UWeQXF!FFz#O^xQyK$PeoCKkonf#)8PsI-C3KDR?&W+-#w! z`0A&{*bvZv8o3Nt^o6fXW9hb^2zInH4I*8NkM4|C=YH}`k2N2YpX({BPYnM_rp;2% z_mj{w?RhT4)R2S;*8LW|%g^(WH2WvM;+Osf8}$QjqYf-oFZTtcn`MQV@H)M+j8p|Y qxz7KIFaM>tqc4V|mYohdMF1&6FwYSvKC^s!Lip4SdYOCo?*9N&gS|2U delta 13509 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π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 From 4604fd7d3b86eef6bfec39afce56ac4d611ad903 Mon Sep 17 00:00:00 2001 From: wenxianping <931128603@qq.com> Date: Wed, 10 Jan 2018 22:36:51 +0800 Subject: [PATCH 06/18] =?UTF-8?q?=E4=BC=98=E5=8C=96=E6=8E=92=E9=98=9F?= =?UTF-8?q?=E6=95=88=E7=8E=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- init/select_ticket_info.py | 4 ++-- tkcode | Bin 15384 -> 12150 bytes 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/init/select_ticket_info.py b/init/select_ticket_info.py index de28ec9..cfe1ffd 100644 --- a/init/select_ticket_info.py +++ b/init/select_ticket_info.py @@ -506,7 +506,7 @@ class select: # } num = 1 while True: - _random = "{0}{1}".format(int(time.time()), random.randint(1, 9)), + _random = int(round(time.time() * 1000)) num += 1 if num > 30: print("超出排队时间,自动放弃,正在重新刷票") @@ -533,7 +533,7 @@ class select: print("第{}排队中,请耐心等待".format(num)) time.sleep(2) else: - print("接口 {} 无响应".format(queryOrderWaitTimeUrl)) + print("排队中") order_id = self.queryMyOrderNoComplete() # 尝试查看订单列表,如果有订单,则判断成功,不过一般可能性不大 if order_id: raise ticketIsExitsException("恭喜您订票成功,订单号为:{0}, 请立即打开浏览器登录12306,访问‘未完成订单’,在30分钟内完成支付!".format(order_id)) diff --git a/tkcode b/tkcode index 76f028b9128fd71edb389a46e42319281e59bd00..afb458f9e68a941a7389934d72608e321842fe76 100644 GIT binary patch delta 10897 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 WaDMqR?=9*9>JyLC0X+UiL;F7uTz9+x delta 14009 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�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 From 947c33cd6bf70cfb331e53404a29e41bd2c19d1d Mon Sep 17 00:00:00 2001 From: wenxianping <931128603@qq.com> Date: Thu, 11 Jan 2018 11:06:41 +0800 Subject: [PATCH 07/18] =?UTF-8?q?=E6=8E=92=E9=98=9F=E8=AE=A2=E5=8D=95sleep?= =?UTF-8?q?=E9=80=BB=E8=BE=91=E4=BF=AE=E6=94=B9=20=E5=88=A4=E6=96=AD?= =?UTF-8?q?=E8=81=94=E7=B3=BB=E4=BA=BA=E4=B8=8D=E5=9C=A8=E5=88=97=E8=A1=A8?= =?UTF-8?q?=E7=BB=99=E5=87=BA=E6=8F=90=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- init/select_ticket_info.py | 85 ++++++++++++++++++++++++++++--------- tkcode | Bin 12150 -> 13736 bytes 2 files changed, 66 insertions(+), 19 deletions(-) diff --git a/init/select_ticket_info.py b/init/select_ticket_info.py index cfe1ffd..da6aa15 100644 --- a/init/select_ticket_info.py +++ b/init/select_ticket_info.py @@ -3,6 +3,7 @@ import json import datetime import random import re +import threading import urllib import sys import time @@ -326,25 +327,28 @@ class select: """ passengerTicketStrList = [] oldPassengerStr = [] - if len(self.user_info) is 1: - passengerTicketStrList.append( - '0,' + self.user_info[0]['passenger_id_type_code'] + "," + self.user_info[0][ - "passenger_name"] + "," + - self.user_info[0]['passenger_type'] + "," + self.user_info[0]['passenger_id_no'] + "," + - self.user_info[0]['mobile_no'] + ',N') - oldPassengerStr.append( - self.user_info[0]['passenger_name'] + "," + self.user_info[0]['passenger_type'] + "," + - self.user_info[0]['passenger_id_no'] + "," + self.user_info[0]['passenger_type'] + '_') - else: - for i in range(len(self.user_info)): + try: + if len(self.user_info) is 1: passengerTicketStrList.append( - '0,' + self.user_info[i]['passenger_id_type_code'] + "," + self.user_info[i][ - "passenger_name"] + "," + self.user_info[i]['passenger_type'] + "," + self.user_info[i][ - 'passenger_id_no'] + "," + self.user_info[i]['mobile_no'] + ',N_' + self.set_type) + '0,' + self.user_info[0]['passenger_id_type_code'] + "," + self.user_info[0][ + "passenger_name"] + "," + + self.user_info[0]['passenger_type'] + "," + self.user_info[0]['passenger_id_no'] + "," + + self.user_info[0]['mobile_no'] + ',N') oldPassengerStr.append( - self.user_info[i]['passenger_name'] + "," + self.user_info[i]['passenger_type'] + "," + - self.user_info[i]['passenger_id_no'] + "," + self.user_info[i]['passenger_type'] + '_') - return passengerTicketStrList, oldPassengerStr + self.user_info[0]['passenger_name'] + "," + self.user_info[0]['passenger_type'] + "," + + self.user_info[0]['passenger_id_no'] + "," + self.user_info[0]['passenger_type'] + '_') + else: + for i in range(len(self.user_info)): + passengerTicketStrList.append( + '0,' + self.user_info[i]['passenger_id_type_code'] + "," + self.user_info[i][ + "passenger_name"] + "," + self.user_info[i]['passenger_type'] + "," + self.user_info[i][ + 'passenger_id_no'] + "," + self.user_info[i]['mobile_no'] + ',N_' + self.set_type) + oldPassengerStr.append( + self.user_info[i]['passenger_name'] + "," + self.user_info[i]['passenger_type'] + "," + + self.user_info[i]['passenger_id_no'] + "," + self.user_info[i]['passenger_type'] + '_') + return passengerTicketStrList, oldPassengerStr + except Exception as e: + raise PassengerUserException("联系人不在列表中,请查证后添加 {0}".format(e.message)) def checkOrderInfo(self, train_no, set_type): """ @@ -389,6 +393,24 @@ class select: else: if "errMsg" in checkOrderInfo['data'] and checkOrderInfo['data']["errMsg"]: print checkOrderInfo['data']["errMsg"] + if checkOrderInfo['data']["errMsg"].find("验证码") != -1: + print("需要验证码,正在使用自动识别验证码功能") + for i in range(3): + codeimg = 'https://kyfw.12306.cn/otn/passcodeNew/getPassCodeNew?module=login&rand=sjrand&%s' % random.random() + result = myurllib2.get(codeimg) + img_path = './tkcode' + 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 checkOrderInfo['data']['submitStatus'] is True: + print ('车票提交通过,正在尝试排队') + if self.getQueueCount(train_no, set_type): + return True + else: + raise ticketNumOutException("提交订单失败") + else: + print("验证码识别错误,第{0}次重试".format(i)) else: print checkOrderInfo elif 'messages' in checkOrderInfo and checkOrderInfo['messages']: @@ -471,7 +493,10 @@ class select: "REPEAT_SUBMIT_TOKEN": self.get_token(), } try: - checkQueueOrderResult = json.loads(myurllib2.Post(checkQueueOrderUrl, data)) + for i in range(3): + checkQueueOrderResult = json.loads(myurllib2.Post(checkQueueOrderUrl, data)) + if checkQueueOrderResult: + break except ValueError: checkQueueOrderResult = {} if checkQueueOrderResult: @@ -531,9 +556,9 @@ class select: print("排队等待失败: " + queryOrderWaitTimeResult["messages"]) else: print("第{}排队中,请耐心等待".format(num)) - time.sleep(2) else: print("排队中") + time.sleep(2) order_id = self.queryMyOrderNoComplete() # 尝试查看订单列表,如果有订单,则判断成功,不过一般可能性不大 if order_id: raise ticketIsExitsException("恭喜您订票成功,订单号为:{0}, 请立即打开浏览器登录12306,访问‘未完成订单’,在30分钟内完成支付!".format(order_id)) @@ -623,6 +648,28 @@ class select: print(e.message) +# class selectProducer(threading.Thread): +# """刷票队列""" +# def __init__(self, t_name, queue): +# threading.Thread.__init__(self, name=t_name) +# self.data = queue +# print "{0} 正在运行".format(t_name) +# +# def run(self): +# pass +# +# +# class submitOrderConsumer(threading.Thread): +# """订单队列""" +# def __init__(self, t_name, queue): +# threading.Thread.__init__(self, name=t_name) +# self.data = queue +# print "{0} 正在运行".format(t_name) +# +# def run(self): +# pass + + if __name__ == '__main__': a = select('上海', '北京') a.main() \ No newline at end of file diff --git a/tkcode b/tkcode index afb458f9e68a941a7389934d72608e321842fe76..d87a5adb1fd5f3663c02fbcfc916b6884ecdd042 100644 GIT binary patch delta 11924 zcmb_?Wl-F~)8=B?1Pug&vjn%05F8d3l3>Ag@em*o+!7pqNN|S$fxr^nCAhl>UEF1X z#ohJtf9tLH?!Mfoo2sswsp;venXa1de)>5#%(E){jt#)sSEv_c7Y!}oQ)PzP5lwZW z8~oP&wA%Z|+G{H^;%8Nbx|VQr>lID{s|8$EpFs5 zm$`k*ox{(+cBa4H$kf*^GAK8y2{?)!VhCLnoG0(c0Ytwn@^uH&7Ud*M;9X+_)%9jc z`SW%pl|bA=pB<&RlCZ$FK2~Y2cHn1a%VHM zi#x<62ee{BL(7FZC*$4fV zkOO>U=l;I;!ai#c+cX6wCdM%@-wZ*rn)7Z=A`^cMD8vL__2M-kE;S)Og@~_dCws3p zT5dJz{$~dIytVjj|6w03_W%+{-djC@x>O~esY;Q8R3&qGT8GbmgGV*asM~V4YRJQjcCc+;sJPMN zul|AZuIf~U{VkNQeZIJXPvToK?+1pWeA7ODNMuTuj>%@19DGSUHY!W#ft;WWAcZI1 zx=aAyXc^m{!>K;sP5ju)XW&a1-PLNlWlxLd7>e4gOXAht!bR}-IcBcRI3e_N_uHO;g_Eb(D zK(JUKf-}C~OIXTt1gc)TZ~SdReeRB188|9HUKVzKiU(@Wl-rM$kMf<$9Me=(KXSK( z-b#(#0Gbf_K3I3Mr_L(unu1>+m|9Ci$ujpp z1d%9Q%~GI_u7LnI!>S{7%~ZX<<^-;^Ch8xM^wpsBEcOo`jGM`vXk~(Jaqc64>CL>( zlGVj-L&rNCuQiUCaN6V7;L-(9Ow2I<$IhDOS0l#N5og5)cBXwEUng`|V%#z3K$^nC zPKX5p&Mn7@=j(sHl(RNVV;?{(yhlGwUKQ*}xC{=Yp$v%pycu>vR;{cE)YY0?Up)@H zIIggEYA23WX2sh&QBzky<`CKgaC78WEtatStMt8nCUN6vjkS{pdWya(tVCE>m%A0S5>)QDJ%E}W zw41Rjl4r$CwCfg_!Z%(Y_}Gh^-M#^iX1Bi0n2dRn+nczq%I;0_y&>qA#E`gk_vQ~< z))_$H*1geZW01q}7Jn=4wzG4kR+SB5(q~%0jg^;S5^WO+Ec^!K>FXKH^Ns4Izu~=G z-tDkF-6rJ`YqKWqa?$K{#qGv}5%fR_Kg|D$kGfFCg&)pETH3(61!hZwsTC>%<&2NR z!yL1$m!p;I{e9DPYnwIVgdLtb<+CbUJj*YEtRj3ZR$t-I=^FNlNGFD|y)MI!juiFp zVQKh0^rBCq~|G*_UeKN)nchP{POO?^xO>9-2@8o`2x~9EG8S&X4 z`%Xz_69(Y+r?pZYOAqBB&4!Qk$G(X(n3rqMFlV~K82lzKQvYYPQIdAIo(h;B_Q1Dgsr`9nl#8QaDJ@Iwbn?_u zXiwYmGE=kGPt=1mNu{?{#?Hj{MMzTA{FSV+_u(2Hymq5JX?G>(hh|I(f;w5qBtcPt z0xLG`+@BO*8fbW-9)3er=d!ZJ^?T{Ofy@^?%uuw!_W<(clJdBoA~x|VWwK*#+FNgw z!3XXYBIs5{%xOK&3NAj_*_y_#Zs^!%-3;?SHxti}`q-T_#jV{eH>U`V94tD;^ch|? zm2SgkPKmfqts=|L4N9NbrCaLaxWM~{mu0T}!`5gyU>|I26<1N!SQ#mofbJ(@k(H~i z9Nph_?ZriSnFDujvYphALCw6BeSyA z2Iv}>O2bWfuC+>h(x8FLD9u1>t5=bBirC)y1~7L$=1;{p)l z7L7H2XX}UR$N6InoF&w2@J0UG~&l9 z-77raPpw`~5MSbk5$mYEiPEkLPr0!4q$aT5BkGcul{7R&GHEc}*~l5Ylew6uIM&CWHkP=3phGJ*~PUi0(XJ-TO^sp$4Bv3N`Q!$D9i$ zT)arkCrm=^=-_|N@kw1U)7tWFqp2xetso+zO?IbuOT&)u z2E)RG#(`p^R?C8*1z0i@W(s#@ z8E56jUpd!e`M9tdx!Ec!;Gcz#O4^*%YD7r9e9_uNt7!O~pAleL4A$ftqBcBwKPsx* z!TGL&V?SwrAQ!*D6>38J$UBIiJjhe^c?|yHQc)n(EuZCy+08uh6ouiFonhTHy~EQJ zS-Z;3&a#2~FSwXxe{F@a!_i_*ijKkDwz;80LThf>aX2cm@_Tpi>DvU&y6-njT{Qc`UFWeEwS|+y zolc=^gcGk8Ke`q`T*#~QS9OrrR^ieV68kgwr>r?j^!0*cBK`=Si5|wQ*^=MDj_|`C|y>B8aZ>h^1E))$qz%Ga@A;T7Tyn8Gn7nWcYXV*(goi(a@gwdYLERE-~Y!Xk$guGZ^cdsLaWK8Fy`V=nRamYZzzJb)?( zElcSkhE~ti5~yh%C$}YLTtolR`XPXptEb4WFFzXiT+0@_520#fqz+04225d6r0Q7I zo!25(y2`QArlFF2?}Tv1Y0OXf*Xanx|K-}0Q~TmG^=z1LJ`l>hs7P^P+}Ihyz+&~^ z+e6lUq}n7X{1QiP&D%z}PDeK) zExpUt%d}ylxbocSrLCD%DjpeJ;kGqR-<x?>f5S@?~h zG~k6r*5hL5kl5*a@B;|TpzJc{q{2DOJPEK~oZZHa$xG!5P zNAvrx^kYU)2y|pT(5@@#@UONypR7Z?HI=bz=%r}uLv8X5TF=ZYK2I4d+WKXWpIwIC zQGfGnh=_v8`B8nLnt$%VWDhg$@kWI?oNP2&j&bjCxCGPMQ5#FS*0-tsV?0{%g&=B& zrmIcwz_O~szp1?K)tk!K20Oew>V4`7tO)R;ic^&3rp;gp5JsbAJhSrswvfH=ZKsP^ zqzqtrJfE_V{b%d#u{*V&_JRjixceFqr&&^5%q>`1mUC{9qZ(i@w7K9x)L%ZkstD88 zFk@NViJ$l0A?%pTMeCB+`&3l%UP-@wOaVy~pC~fV35+Cs^_E)pV7Zp(!`934SNm(i zB<79^tB>#?O7UH;H=QD;$xjqvn&kw{A&tU+Nc#nx(Y=`FyR3D;5mK5 zeNI!cVhBmy&EEH)nUxBLk#YN9pFC2tk2pD*?CW$#T9cx62McFgo)7>_D9LFgrJ-Xp%jx zKN))Egwv-Vr4T;F_yEEUMnUEpfvMaFkh!6OKED)an*rpL|4`X}?D-JVQ2A6QN!wD; zS&$t{*vBW#){$arls1{p)x!a&YtEP#KjK9@PAK7KFc~EJ2H0I6QXRobbvLm~d z@}CG&*pgIe{g&%M_-QBelL?$-nS`=zX^^PSJF~`um-UYc96plT?AZd)mqc>{SHuQS zw95lqA72TH&y>v8Em2-No^)Qn7tqoz8#9euF|$xCOA!h9RAa$NQzkrYIW~f_-0m6H zBKe|bsW$JGvoU@3_66ymb%%KnZ@A0WR4#wrsvb^MN827#dsZK#C`}-($US4|K~TFz z2{S>SU}y8o(u8GnZKo~Oc>oupI8r|hOkGZy7s7iMED<*JxkS*>e>#D z5X$U>$`r@}C3;m&JDNF9=kwpA*nLM33QB+6=Mfa0sGy=5g z6f;&kU3E!GP&}{x0J7!srFbq~zEX$2*LAtCYD^=@^)t4q`Uzyz^!z27egs}aH92)Z zTa?}GXx5rfjp84-8#TJY=RUUin-$)m%LNe8f9)~s0G*MUo#@|)rNuc>yA}CrANeV( z@9l~v@1ZZ%PPSPtZXDhR2rSRog7#+h61Qcxy5Mmu_$LfcJY|{^eU?69VF@z^k*12& zPw$>rChH=sJpmOHWGQ2nV`7v`utv`bsTj{ew^%vYUOFw9pHqyteeB(92mZl^9Hh8S zmq^^M?3zPwH)q*IGj4>Mtm*wCai#MrKK0916!h-U<9giX0fhZaBk*9)`-K+56&1ns zT!wg$v-gpD-`uuHnl3VhrP3TLZo?}|FC&!m_d5f!aiB1d!LDL2Kzcd-@C5Z%8R>y!MV5| z;zAv@1Lu+A(U$=I8?*s0NmVeUNL8?CK3i=-p6i8uq}(B1r}Um;yiI+C`WFUMOvd5k z*rvun-JMmNE_pDw8d|0DjZ)U9NojRogpio2?pzop zI%ddoc^OqbZ!f0oWbgoLm*-43FT6TZsCEiI=b?T_^P1UdiK6csuA1w~d)S;}VpsMn z|Cx|gK9xi#x&Uplvt^+FRLTbT9liyPY`Q8yY)?wq>YNwA4R-cvuc)O#fLlgh_`1UYF*`9i%aDX0#7 zrP1dZgsG6uN}1l}>sXgYv!JiD8Qo_CEvu{5d`TV8WMlh=GaH*~U7Y@3qKQd#ef{wc zr|<)$6V9SX=ONHg7@1sr_yDR20v+kx$=Mv=O0`CJKRGM1 z2A{PO@~6r?fH2c;Eh{d68Dd4)sXc&NYyO?fx9`IxkDnm@)>m}nQTs}DfG9Ph%6D7r zJ}~F>N8R(~Om4koo7JeN=J)UF)9!Kl?)fQ?WP*WB(fkL{vVIy$XE!hdFtV&OnGT%E z@>E}iToYNQT~e}MB7ye*V>PKWoGnloD;D7FrS}#2vf^i;Y1=Gsc#4A|bIA^ZIZPv# z{ouf+7seqa$~G6v>*Ka*HB%*D`KN-nS3>Gj$~6$-G+Pov*u>nlCduGH{)$W3nogqI zyCv04gM$NbY^)Z^rTc8^)|Gk@QtC@=MLr#FYbL1FNaumD^q5-!lxNF#M52bUh)xrs zbSe8K$d?QcAn8iPhF%_XIPpy>+bha$z%b>`D*lMZaj4JXW&6sw@rxm$lKyWRXsa)u z*ea_`pI)ZHBm2~E-tN}j44m-5hGHSa+kLOi#t#5Wr;(xQ`){G-&;(Rnz8?*KI1uH& zcW!ThPm?uN4k7+n99}Z}eSg_IkYRGFR<}HJ%H3yTC%|$e9ox&9U0sETPzR z5~p2HybJp>sKfv3_=+lirI#i|n+R=KYRHkwIa?S;Nm^$ead_<5)E>%C;6TeTVwHL% z69IgMfjgevq*!od_6;SS8TYX+Vg|dmtyxv@@k$)5P`JNK*#{ z1mt#|QZOaJ`F?mNb9`0H&EO-{PGKRIc*Y_HD zwdisB+WA)hGM3#)*S?F5IzyJes`*0dN>wRmk{3lbYMS!36GKS&I=ETn0mP%H>AMQK zyefYHIV;~K_&m;9T&7n87P|~I6CvMZZvTC7#X4Ft7aco#_&r~Gm>xg@U!p@J0B#CD z5PIpBB?f+#svQM#+-3?lj&ks zq&rFo61A?gJK3T7aW858B<&3ci9I|T%!rUtx}wn_S*We7)H6+3>>>jUrJ4RHX$Qsl zP#C{{i;m>!=ES`U(AmN%hm=&x*~nCwDgOn0e3^K-t{}E0E!RMJ)^~p* zQ<-b856pzBQU2TH^fn8~y+^#SZF{(8tHL`)TA1JaY2@O3UjT{4}!&n9th^ ze=(5W%Zheu6Q*~%clS4VlhGf>K-=5#BEaKP|7{_y3)KD8KrsD%dZw9&<^khu6yt3D z{wI@JZ#Mm3c0|+hipOHt3@p60yH3NuTba@%tO6@0zll;;P2Du(A8D{sgCT;fwvWc9n!Rv5 zy+s*Y)x=>Lw%q2W0MUUr>Gy!VilKw)1V8v*@8x$Ck}OmZ!FIl zI{S0v0EbeBg9p`0S#-GAeva5+eq|jG?<4)sI&S!Es$05$$$nHft75>y@Scx|r@j_B zrQPQI^8Dq1mY_s-YSw0f=$+WkRGXQ7F`Z6>9Gx>O7KiPT?$b_$wJ#~oup`mwqo#z$ zkBZ~gc1+1%fEWZ$bOz6|(EZ`C(CGt+-a|@>p^;-Q?svXgyyyvi79&I8mi9gCWabD| z%*A^^u>1S_+{?5}nHE^@6wjYy*3eh4N=oTAj#u?UOg-IBc-&s|_|~5I5Qq#3rYY*s z68Fce4ERO~+ukpa8#4WDkhBJwW5<%>U%TH>&5RWd0@cYziFd{Ll>zm2tlO-*-!;}SJ}uWs;JDK14F7o02W zN+W`qmaspRt#m9>q6FR@D@Q7DKpZV3=dfO~0bcJ0PeB5$3QDZHBr2;V1PE#F>{V6+ zYDxKYY;{x?c1h3~k^W0lIZmx;U%eB^!Wkn_%DAOJ5f0u{9e{nE^M4KL>gG8uiI^iU zaU`_T==?PJO{m_}zz~z(Y_>W*6Z@-hw>(gR@ZwmEV{Y?>ZrL&kTURD5s=|1BAj-qV zlJ0hlEexDG%poZJl5!!8^0^@Jm@S9bt3CRG3stC$8*#of>=gwR(PTLuA8NaiJ@YUB zkY=1}$#&FDU8$)?xQ(!>bTKYO&pCFmRy#-KaOO2yOMro52d(RGoq~x0NWO~Hw5R^5 zZBa|YTWLR0iwWQ7q}?AyzOxXp@ez~=in@@p2dLGAp|mE{NiO2qRNa5Lb>@3mCWfsM zZ!oUmzb#rLM8?TxJ%99`t~Ne^P=K``Su{#s8*JX6Y+FKqgzfhaul=3 zCwPR^^dQO8A=2wZC(RcK1Chnmh5mB=0>|8&BCkJFd^^F3L&92v)$Bs!i z^5sLuCocxe6Z)@0!{PQITVNPU;xI;gS!_qNgSmi2uGG9^+2K?|GdZKE9NJTkO zjP7-23sm)&4sL4(rI)brH?C09s&jRkJ=G?TmOx>FAtA%=d!CNYn=u0V81{7>zO}Q9 zC`iy)lY`cUy}TJ+pZo_OzxT!pzHPm0z6c*@;cL%kVeiYcvhpehhLJ7%LFTc$BnIXX zuUf{^!|-pnRw*@gfQ_Y2w%PM*S1nl`a+*VL6NKv;js0WcQ>c8pYv3KqkANq6^bvlT z1q<3p4#LKY<-18lxhq{nMcaiy{Hcog9ZH{zqmT2#`xw*55sU7w8zlTRKd<{vQFwos zJILx$+>;u7!OHOY-^NRCMQCW8htUzyAAEm0K6*U+OB??b1(Yg4^tGVgmOotgo(;~d z7xu+e1=^>F9>t}2Hm;d0St9$lzt-riw!#^tNY-1?sSQeUJzz%v$SUpwElng_rPAv) zA4!NSIu{%{bK5ki(HO~DOZQ~&Z~IO}5>CZ5YA4dlY-2pLur*fUSTJGpsL@-y?Vkad zOXN?cNWTI=`O~+$3%&Nv-yF~xQgo!i-r7^g$EQ8C?|1jbzfL5De8Qa8^-5SUCC+?J zJ;juAHrxz!WP7x&Hfqv4np#L@1a^i{4~CG&3~4FW-V*5_5?akFiLN$r;n^kM%h0`9 z+-n?21v;P8(Tojlq_b;o1~*ouNpPZvsa&^rI^j8hgD?}%4TrlJePUCOs}rSkK&LrUJkEMObHCh zc1dB4nqf`-7ZCfp0mpFO)=ewtS>)=W3~i$_f9Ej`ho8JR=`af;FE~k+7>mQ`Do&~70r=$=7S5QQ+$;^V`D zODjbSZs*ju-lm_1+U{Dt8c;1IIBFBiah>Ay{_;WMA7Yq0B7=QSuMugHR(gg&cZdzy z#9B?4=6Ai{A!XDl>%B1jSGF2sefEG}7xPQ4-Q?JE5e~MD78T+5;uC)_i$e#E?SZ%V zhqh2Q7&|D|W3@iH)WgEg!-BbL!174;bw4l+Ui1;#v4}UtV!Fd%ywYkPilCch@>nff zY87S|og|K}r|8Jad7o{1gR%@nxZJ#IUR$AbER); zp56w%nbK$}c53D;^H)LIAeZH;MdPEbW8zYagxl7P5JY6d@MW_f-h8f=2+qTlsh8C9 zE>E<&J^wJ7nvbzYb!xFRtYl9Tb637jj2TSO(20E+5sp=Lbx)WiyoYRXIaChHim%A( zx(Iuu^AW4X2y|_hQC|c6DO1grv^sYqeMa&8fXVWaUP)_{*RXh9sTe=GDv5wX0A!r*e))KR()wCGq0$8&CsSVtdxH5GMd!)bS+hLv&DZA~~KlvzR#Xye# zCrjfq4L%(PBZF5__Q6X$jd3`@exN&d<^08U_@~Gnfm6wI zt@&2-Dazs&l3tUsOvZZ;jBBd(<`LPU^IJuGvuEq2Mjg_pgBbLwh%D>Qas;Zc1mumusL49%rZ!tX&)j8J^n`#(k{-CD5;xmkRA;u>IfY^$pV2k zeEAwbkKX|rRJIL7W(MEXFjIO(ZEb<>e1X(21IPeVZsF<9N8RpGm&CUL{A)44UIf*G zqxzFS$EEc49Oa)kb*CE__XNE(uRZCgwy(wBrvRZ~sqWw0#uVO>=wA~$7={^E!?|sN z#BB!?vO4civQjU}c4(xThri#7IyqhlQt^lN?-~FL>G~DVQsN@((EJ}&595n3XA={v zV~9^=tmsv|gRo0)u|qevcyu%}m5P5%bf-p&z;M3k;wt9r>HOtire1W@$w~6*b`v&R z{E@}J+5R?cE&jsh`1jpz(uHOpIs+1dsrGmZ85+HB2R zlxin{qL0#<((!C?8RJscLHDHGxxPn#fj%AV?L$E$>xX7VwbdT`J`VGdV@k`1qL-Sq zyD%HdTyZIcW`9^KWUbf!2MvfNRh0sf8i%rhGX7gYgnoJ3^={+E*qExs1hqVh3&C44 zJMg?Lq~(A`<$k2jEi-Y6!|Fsb+)77O+f~KxlJ(s-Qoi% ziGO-j$ICFyzJsGH)v;WBOZAiy#q^}n$*?fKnB|WL5S~%3wDfoxh0*=;KOSDx zX{lsJRN>eztZ3rkiq49>ozp{){Uz6#i5+PPeuIrK_wTsM)CFOFC)vx-09{;Omven? zvf4~>uZL$spL%We?msM6+5I3dCr{k~=PWdJ$kkOFQ+f7E_yLpv+_{4T;vK4Y!y#Ab z2hdbWV5nGtc>DR8Xj1)T!gW=$L?WG}4%Yrm3zRtA)P0iSl3Vp3IHK?XnrnFgeKxQm zOVy{PD&I)4z0+O^&c^}%lBW+4J+6fv6I;8xeY}fjJNy-O6`TT0y}IwOx8!`ayDNBn z|LV5?dcyVr6f;DGdp39u>?J;c45Kck$io-Vkkf$&(2?fosPYYr;I<{~0rdKM!tkH& zFcEG~+^;zQ8I`D=e@xoPDS8#>IXyW`r7bO624tl7=|T4&yObY5KbtGyb;D`6x`^^> zFSmcV;wD>0b@tm-&SOsfp>NEvkN{Fuy{G@>;{Uk$zXbrPJOQabc^>?nx{jE7hKHvK K^e}^q`@aBVt+qt~ delta 10339 zcmbVyWmHvf)AuHnZcw@r@F3kSh?GblI+O;<1BYhQDk&h{0#ef5UDB;I9J;&X;eX%n zy4U@Fde(YA?7e2!%yrG4nQLZ#SDwweVQC;L7}kbgK?!gxIW-eBO@yzl$9j7{+18$& zO(-^j4rES7tTRQtCx#v9inC4NCNKY8gN7Tvjd;QhXxKYse{&N=P4kAhDJJTla1m2s zMkKq=?pyC1n$uo>CU$k~a?DjAT%oDdbH_Gw{ZfWGkm;kMsp#5DGO=}C6kJFU*S=2y zey1cN3T`_Uk6k6VZ7P_Rh4T)QW$M|Bb;gh=b1x6a_ezm`V z3U`+_sZ*_u>qQqJ^oYI4!1cWxTdr(#vHgHLNRm6te%l}Xl}_sYB$|mGvke^BJuFMb*`ztx(-!3xnR^cl5= zbAClahv)lIeas`i9_#Uie{7&&DC`4_vR87B#E(U8h!if~otfOJt68Z&2=gSyZ{zaI zj`h!XK%%uM(f76?lB;SO7iG;`&>!T>nJZW1>EqO)BJk0m0+>H?2>!Cc!C?R8>@B)5 zCwA6>HT(Ah!i#qI0Udp&E*@BdMR;HX&h-LeYPqqTgEW{c430F;G&oZjAz^`O(V8v6ovVA*{(W!y5k>@%K2|D#d9Nn zhg-a^oZ9_RQTyiDBuPl&J2oi;O3kKYNJ|WeK`Q>#?BMgO1K!%xs@mG%Ry)Es<%Fiv zDfu7ed&I;93p`wd28*gjbOys>%75I2qWlh$e;J}pos$p~7TvR>cmL0*z}G*m;;uC- zq>-X(>Y`SoYDCJm#BlEv>@!xvML$-eTfBFRc-^FBL zc z-pP>`TW_p93$+K?sr6!6C6YYD5CI+pmm106fr|2Ot0gyezOf>Iwaa>%|PfRq6d-Fb1p^na9!k4oI0$J}4@wpb?L zd&)lm-sGtEs@g{Xxe^~0`1cD)4Kg3yPrzZV2cS8e+H3J-@&P!=lB95ka-<8~o`E-; zWB+*!*pA8&1FAAy$;3#y$1678#b2l-zPOU;+8QF+tTTXKt4kaX)`)7D_I3ELkNgQA zw$AJ2U>qlCg=hr-sze^&s9r-to0r8x zY3oXkAtg8_TlRdwpeI+saZ4xN)`XK_qu&ruOvx(gfNUe3h&OalS48gFG8E%Wh=kC2 z7xC3nor>~69k8?%G5fXHQ}*)13WQ=dxo~z~+}%7pW+-lX)l!;J{#`d9B*qf~O2`}q z!eiX*-0TKE@a(rW)Zp+DB%ooghr#>N>nA>D^GXZEdWHS{>GUt++Xf z$Mr_bTL_izE#G)>?vt*AFSgAxmhCgMve?PWf@o~Q(XbjZM}M22<1XF2otZ|gElk^6E z2q-lR#c*2$J-G8lI2x)$kH6C;#}}cRS>?{9%~Z)76XxAobl+eGQ>!$MwLdl zF*|rSm^}}`kDQW3$&y^q(rq=q^%)j9_*`Np>JaUYJFXe-KO|^u;_=OH@u55}j_aLQ-xrWO)ZI?7-$Sv>U_TJ1%5;KFh|D#r8Ln#b(S>&+EI-MN+L!8ww*o~9<0j;DKuM@P?<$s>bTzYVo}>Y#oZ+x^(4 z$nMs<*?HPqLhOck%^)_M1doa2u=aNo+}OE-euu~xX>Smlg(G{VUhpHRzDIkDLH3l? z@5SQpj&8%fY?=i`yUSgc%faCXz_7V*68BZS#3Id9!{*@c3nA<5A`{3dSd7(8gFh|P zaP#zg>97k0n9b|^UHWbTZ(%E4xmYr}+lOwFNV-;-QYdu44_1g2z=YgvBrcbZ3(n~r*Z#5-J#>tl^$o?gCJ#rLCR zuPCDw!ql|0^?B{MzInUR`U^6kTJR#-^I{tFE?FY|%@|Xaq&QWT0Z34bB4QzwnEp^C zr5C(XdXXO4yX^ZRF2M}LH%eRk0K<{^#LZt_(pVFQ;qQBqvvYS(L8UjxGP$~5i!6p{ zM_fW%`%WN_rptSFHO`c}9J6v(>(Wk>ZUGU8tchs}QSxXJPPXSGER0~db9Je_NOE%6 zQwGc?sYvDf7Vvj=qK2ul7HVF>K~knQ>!#|+evuUVDx*GLqaLZr9Yk#fF)02{=@_rM zqoxW*{wMAa+GNMv&H~Le z$B&R9F~v?-0?CUf+6MAyGfuz@qETWC-)#I=Ei;57?*s=3T|lVTjZeN}v}CU7US=>u z?{N(1MJ3vX1c%Bs`ya2Hfcb`^{S@^boK=L}zJ+y)T*jG1R=Byvczlu`r8pUvPS9v& zVeQG(bUV>L{pk1H4p?P~YR8$Pt!GBYV|#nb3vaHDVJFne%h5JpTaKz4vaj_KT+vd7(J~AH+41}3A910@+AAxu|pq?`A>Et-`i~Ag`W$=-(yrMvM|LWTI6Z^ z!HetFY6O^dj4NJ-DBBXjwC{gRZb)qR2 z6HAybjX79P61Cjg0N8XH*}<09#`vqg4K`F%;JxIYG z)L`SZoD1u|EkQ)4i>N+LG-+1fHael~$oW+`%*vB0{&PGum28R^iUQ|pk45oEV)RR) zgdG^#7hHZ;n=~_l!Dxe$9ct9x*lY!zladKBBJ~xMYnbWOzzVXLl^|J@RYLTMaU9GV zu_RIlo?*y56T5aPX_IYkk&3}sot|n0AeDdslds6@ovSIkn3Zs;-*Sk!6~#~)x_5S6 z{(g6JcMEl`OVgRw^-Nt;;nY>wPxWlv20J8Zg}?lrxIsC-PpeW$$s1%3ix-^uy591) zMvc@jDACj@io1A`(-#-$mM7cVhirr7bFZJp+TwKeMAryN;WwdXXMIb&=*b)60*4%Y zr0Q#<-50F%D_Rx=d#FBBB1HguAvbtkikbCR(uSr4pe6I)&d=!MpS&|0Oeo6IF0ZvJ zWOx%dG&~APDh)`v^paz*B!AQ0bHMJw>pRj1fIcbLS9l4Y3$5X)rG8>&U0vOUsC7rw z)Jf1+)KVJ*W$HV=q#JoaTH+9xDTsQF`B;L=W0`BHY;g7ZhB=N?d3&U__)2ki3UIys zX{jSm8PU>za%;5|p!ZtJmly!Lxn>HLO|Y{CUy=3pMN-}vhr!;lsb<_ku#ApS#R+aW z&Ii7ztxX9o0Io5Si31jlw1`ZTLBp}Ca0%Ut=N>L&`jYSGf4ifNL}Y*`3wg47GQ=vV zFiP6%NmeF`W|JVwG*8Xs?pbv4vq5XukmI5Z``EhV^ySkBfMz-*Pdag@oV!F*J?Q$B zU2mw^bYfjZrI-$<`%jNZ3w4V^$kdC8+#CJvH<+Lc8ENnR5zTnDPn7{9dDYaw_sT&3 zw_GhF-e{EGIF`fil&au2QhE;9_)Kk%`mAE&E#&CM_fN$aFQUG)Pxdsa(Z(ZQR1{TN z?ek^YlGNXY<-d^fu}efN1~yu1#0vF?QPpKpgSr=LwVKYUN(n50SY7ef+n@0;%2av9vc@N$8wlw>T`kO(2q~nO#ayRO;@LK4k z6(O#2H#MoZJK-A(Z(o)#??wswuD(YIIEf!ZS{W&k3=Mv5X$im|0ON_`g}(~v3q8la zC;(LZq=BOPq_>}C4x`I+)|lgiPK_>gx_iNlb<8YUV+Af<45P8&%wLpX(z8JonwQoK z)XgJ{&*h3x@SlOp7+f`Et%7%WVxAv!MjK@dHlI_Qr^Anq_4*mhV|M&@{Ce9;GWdp3 ze9M)xe%VqWn~nc`0JP|K0-5*0h6@i9d&Vp3qNOhz(Jo^(dh^nL;_1%tN(-{3G$90P z3bmXdG17vY34$qSq2Jp~e3%O{&^x0nb`3v>%r8-{XaTF6BfTqsBSxrYCuq8xCDO=j zf4b#q_;Wr?7hQ_=J>8E;a-n;6I zc2?|fk1xZXVoT=WbY(`n{DqWZJW9KSDT{xdrvZ0c3O6m;nsdZKi5%*+$4xvpl&O&p zO5g5`(ofl~9^T^1=g-Sn+A;`+yrU<%5;qoNpw&vpO4fMCMsbJL;CMx#EZiB2EKP<% z?hl~VsNsp9X+W zR_aOR>pgW0cJ?=B+Ay!1oYWBbqAztRjH~00*liAa3&OE#Q4;7V3+v~3>@iU`k#YiOkBz*Jr z1QAy&jYbHgFm#M%n-_h8aVL;zFpJ*e0ic#Rr1ltL2s&b~aYvLqtLk*DW(4WS2m!91 z^zYP-DXS?dgq}!-lgmoDVpwneheQdpoFl`Y!zR+#b^)rwfXffd{!#1|&iIXAzn~cu z#zcD$*GS5h=!U~XGO3;rt4fl2oULeYE!ZIIxuIvuGnG2F?(AG@q1cLoH78tOYZ^bV z!AA0deY8xpvU^#+&6%{+XN9Iy6}~1W(U|KMMU7ncmgs(y0^WON2#F#YGuH8Q$5FA{ zA@`Auf}aatGHvnx?sam8Atufw?(4r!sTHy6(Dc)qJ(sv>z4b_o9bu2H$zHrXc+A2B za)L>%obV`fAL)v7%s$Xrn61bZrrO79L_fquo_@8;ty~Az3&ZEEAn?4y zW}%e0+G)9qB$LH)BvQXJSeAekP}pd9@!IwQh90W($?>X8EJI1`(&o*d(p4iDZB&uD@6-IN9@DUt#t%!wH2O9pGtDV{f*7o}j@Eg; zLBrSG5-^5nj5cNowcbL_Y^voDr-IrpMjDf&0+S-S@8pa90HhH zM*a8!vS_FVsc-_+6Sqhss=klx>F<6dlyux6OKd`D?nC05%?Txnyd#e&S{DyXMaArM zK+C&;zIwfMf!-5Xpv!D{|K06|Sm8j+auT@xsEptC4}fj<;v$9@qShv{B0zvjDhWzkwP82k2tsKxgBh|djA0IRU&Tq zE$+>SZ*#%(86nwWqBi*hCFV4ng$H0cSz`OsqohYw+CH`kgRLKc{Kpmy>*8H?C>N~r zFv}hCrY!a|CRY@)-R)6~k)w4Mf8qV*{o6*_d$Pj&pNs$Ed7)PbR(66!@Hu{1*d&8c zar&YD9Wa7V1IlTY;Lx`Oi^QhjCEbF~wETmSd|M;fvN%1n86p%HmUb z_x0UA8Y)7ot+g;TYmfBg0r+RC5;q+8$snTT&I1_z5yFB((K$Y7`?H6UP}J@PWg$US zK+jlXor{4r&RZMhJ)3n1EaC4yWXAlOVK3WDOsnDxO2I7=*5#psCdw{_I~Zy%geJt~ zXjpVOu_)l@+~}`D%UT?Q`N{VE%{9urNNhAt_uWGP)N}I9!HtCpY+ULVHj@VJ>V{p zqp=X!X3d(Ue6{%iT#RP(C`hbjJphYulRVT+81dA#`S*2l?HhUxI%Bq#l-|7#LK#ut z$+ryCRwLI9_Dm=mcMbzib6DTLJT_6drdL<(7j-D!V$?v%H*ftVGU)9qE{EB&V7(6R zb1*f1Y!fKdp#)LY%}WRlIQkP^&D%ec|0IWJk=>j zcg{jk%`qSq0pK}I?xs;(#w?c*%yb@Y$4yOt0z4JJN(r~Pkah2R6u-`MEVD`tBAzt< z(}ot&!@C_7M3<8-#)8E1PgfiK=ky~+@RLQl0-*cYZKisx1)g$zeE?QT)6XVA27Qgg z?8CTI0p8WW(3W}2dBvlKMlO*-t@ph^!p&Tv@S{pQ}~ z^iYRJL;aEH)Q&64EZ>-WzQc-OcDSi(Riq0fJsu}r%4X)4oykD>js4|C#A}k;?bom{#DXtxvTr0vEJIUpd7;S2K8L_;zD_1RBuhn=z_-eiEGo$Gl-%;JU zFsyKw_EfeoAR~(!uIgmZfo(xgI?O!v)1)>Gn*~9YUp=~4g_b(xO76HUNmbaIlDg}m zs3t&54HOVH^Mq8f(kYqGNj$CRJesKcWap-(tEYEj&)TVu4+`H+?HT$CPk;SN#;)P- z37!>BRpQ85d+4hZdUa8lJ^*e=>BA)mBb&JC_0J5OZVB7^0N}9dGhQwEs3o{1PddVNy z=kRH)eKSKNK?K?#EuAAN9ka%%!2}Lb_&NU$>Gl{~5&PoJx(wgWzDZ5Bg}F8&9D~h+ z1*K$5Pr&qxqI#>dXCz7gO21ZsTuqD`w}LtM?;y&~W~es%2r^==`>A~Q>k@;8L#SVg z-mm%vzg)4?f+9yo`QQ_NUq=?qRX8fbPhYuxN3X6CRI$&Ar(cu_URa@b*Ga80y;)Y? zFl-1(id5|}Njtpo_YzySNz5Jng;N>BK0R8_y2bK|13FD`7q;Y zLjj#REejdrDRQ|{=QUv)W3KM_@3+5(plj$V!l&YmuK88r&&KtF(K$N$Y$yvEX7}&r zz)tT`+IyxU-0^P7;T+S;9=*yDXLob_Ur8xZEq_+zI_g~1T;c6`S6{`@>HuG8Ojiwg zOR(t_FBa>1B{#P$o%Fg~<`?!TUwJfAsv##yl$3e;83VO@)|`swa(9EsWKlfIf#+lt zWkFP&+!z$4Pr3O{zuc<+wBm;=W^V@3fnQZ(CsqySoE%rF<%M=`Pc*#nYzh~xXNs#z ztm)U6U)admEw*gf)v%lvNWD)W->eIJpJL;-3 zuciM1t9p)@Zv$ff<)A}e(rn+@)MVH40vmtIisEG1JtiUqbdh8Co8msw{|&E`o>qq$}$_( zske;%f)+`O?Tck7ZgAe5R7_9VwFO_6btbKfut`Y0XVj~&Ta>=s9=KLE5_+*&rR~-8 zdzI;*Xby9A3v!eOPl*`@nTXOSvQO-DKHTm4=xeg#(t{Vu$N4%nAm#OmYHv`M8C91L zEHu8dc$?<+d(kpg>`yh35}uZb!#vWleREBm32gEYznH8PO)LxX=cpksmQHkeqCKaa z=VA>0xR?_1%-MZPi=Dh=P>p+~qPsufO7`0#3+db9H@^N@Hs#({iww$|OGg6<-_x4f ziR_6)gk{EnHG?s{85B~#6cGDNI?T7fR5!2LSJodAqLI$EMI0QLuuFi&1#mFN_(HaZ zQICpT)@qMtl&l517no}1crLOc7$elY{nW3tG!YK~nI*iLU~>0^jgZ zDKx~@J1kVfa`Z+xXP`PhiC4YT!U5K0hwvoR-?^u_d;s2*PF3lJPS*Q->$<7KY>%@v3^GHXp%qddx*<13 z&=76Hbc$AXo=MHe!!J@b@bUz^h4J0d0*p914i~lSz9*KPUTQec>~bVB7P(+u(q9bAE`$(X<+p5{#+%1_ zu;id8=iN$NM`-Q$N0)l7!B;5HQK@)iDS5J99nI3W+a*U+{PKdjCHCX?{i~5mjTbi> zRbPW))Q1CNy_A0Y4&1V$Bi{)AZY!htW=?cqWPg57M5v72PyJqbLL&{oGGe&hEN_jMZaJ-<}c_#%ZOcr+7=@ zoOvpKq%5l4BfDsuPXwGHsjrAt14;6pndb_ zteX+)z;BBbuRTMV6@5fjX(t|l;>Tq45D%o7yDGu_%4j?cS&p~Hb%V4H$%cRLGBI?u zq`yilkd!+2AnYbxcfUhJARjv7!_2F+{Pmxu|Oo-SM^EU#&vlgmsbU~Z^ zl=kvlNgm_$vk{O%H&#ov^2V$*(ov1VL2%gQo-acD`_6~l_Y{=|WGoYE7E~8ju;a;w zRPmL$C`K>%hhB+|u>#(AA~b78Y42054fozmHb%lp=w2lnl*Oo)8SY(c48)R2xdAbM zkYaS&st3pA^$VHf@PPE5B2BJ7HgL3q(D#_Xi%NiKroKs{qx}7wc%2B*yU~jTP+_y^ z^hQtPO$aK|``6v?y#2jFTLH6W16r$U4oEjuHV5mIgqTGD_bJ-@$%+Uo8E+X(;w{-YOt2>kTDjfO z7pmcsEXYUo?7V$b&UQb;jfuctJBt!k+f6TU zJnQ{kF|r|$t{xj%el_e!tN(KCs_GD$iU}u_3w#9nrJA$=)sSMiGV5Ad`qxj3$4Fxz zFW6efq@l@5m$6O>&xK!Qfz$}b$Xk~n4;f-u>6&apN$@>Wh1UYpxa0kAyn8;V#4_el z(9pOm;z{`QekFevkY+ zAv1!du#`ic+Ji0^U3iR14nt0OrNd_-IAulpdBU+rS{1t%YG|dZjQqb=`keefpykY$ zH_bXYwfuAEVigC5E`?rH-cYw3aaz{3Jk6)Q_<+Pg1Y{yF$E~ z6JtMA9B1RTz(qd(T8RtEjvmEm2!1RmKH~enMbAqco1cZXQP8Mm@$r#x2byKab|>o* zFDjHfVfe|8hr~f3+D2aRqe2r3f77sg7cmloOa=CB$Ua3%x=QPh5Qv)8Bi!~6 Date: Thu, 11 Jan 2018 11:15:16 +0800 Subject: [PATCH 08/18] fix --- init/select_ticket_info.py | 40 +++++++++++++++++++------------------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/init/select_ticket_info.py b/init/select_ticket_info.py index da6aa15..68bed59 100644 --- a/init/select_ticket_info.py +++ b/init/select_ticket_info.py @@ -327,28 +327,28 @@ class select: """ passengerTicketStrList = [] oldPassengerStr = [] - try: - if len(self.user_info) is 1: + if not self.user_info: + raise PassengerUserException("联系人不在列表中,请查证后添加") + if len(self.user_info) is 1: + passengerTicketStrList.append( + '0,' + self.user_info[0]['passenger_id_type_code'] + "," + self.user_info[0][ + "passenger_name"] + "," + + self.user_info[0]['passenger_type'] + "," + self.user_info[0]['passenger_id_no'] + "," + + self.user_info[0]['mobile_no'] + ',N') + oldPassengerStr.append( + self.user_info[0]['passenger_name'] + "," + self.user_info[0]['passenger_type'] + "," + + self.user_info[0]['passenger_id_no'] + "," + self.user_info[0]['passenger_type'] + '_') + else: + for i in range(len(self.user_info)): passengerTicketStrList.append( - '0,' + self.user_info[0]['passenger_id_type_code'] + "," + self.user_info[0][ - "passenger_name"] + "," + - self.user_info[0]['passenger_type'] + "," + self.user_info[0]['passenger_id_no'] + "," + - self.user_info[0]['mobile_no'] + ',N') + '0,' + self.user_info[i]['passenger_id_type_code'] + "," + self.user_info[i][ + "passenger_name"] + "," + self.user_info[i]['passenger_type'] + "," + self.user_info[i][ + 'passenger_id_no'] + "," + self.user_info[i]['mobile_no'] + ',N_' + self.set_type) oldPassengerStr.append( - self.user_info[0]['passenger_name'] + "," + self.user_info[0]['passenger_type'] + "," + - self.user_info[0]['passenger_id_no'] + "," + self.user_info[0]['passenger_type'] + '_') - else: - for i in range(len(self.user_info)): - passengerTicketStrList.append( - '0,' + self.user_info[i]['passenger_id_type_code'] + "," + self.user_info[i][ - "passenger_name"] + "," + self.user_info[i]['passenger_type'] + "," + self.user_info[i][ - 'passenger_id_no'] + "," + self.user_info[i]['mobile_no'] + ',N_' + self.set_type) - oldPassengerStr.append( - self.user_info[i]['passenger_name'] + "," + self.user_info[i]['passenger_type'] + "," + - self.user_info[i]['passenger_id_no'] + "," + self.user_info[i]['passenger_type'] + '_') - return passengerTicketStrList, oldPassengerStr - except Exception as e: - raise PassengerUserException("联系人不在列表中,请查证后添加 {0}".format(e.message)) + self.user_info[i]['passenger_name'] + "," + self.user_info[i]['passenger_type'] + "," + + self.user_info[i]['passenger_id_no'] + "," + self.user_info[i]['passenger_type'] + '_') + return passengerTicketStrList, oldPassengerStr + def checkOrderInfo(self, train_no, set_type): """ From e5320663e8248b4c4416b16ba1f11fd745a77a24 Mon Sep 17 00:00:00 2001 From: "79277490@qq.com" Date: Thu, 11 Jan 2018 12:43:25 +0800 Subject: [PATCH 09/18] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- init/select_ticket_info.py | 92 ++++++++++++++++++++++++-------------- 1 file changed, 58 insertions(+), 34 deletions(-) diff --git a/init/select_ticket_info.py b/init/select_ticket_info.py index 68bed59..d54a062 100644 --- a/init/select_ticket_info.py +++ b/init/select_ticket_info.py @@ -7,6 +7,7 @@ import threading import urllib import sys import time +import Queue from collections import OrderedDict from config.ticketConf import _get_yaml @@ -32,6 +33,7 @@ class select: self.user_info = "" self.secretStr = "" self.ticket_black_list = dict() + self.submitQueue=Queue.Queue(20) def get_ticket_info(self): """ @@ -226,25 +228,29 @@ class select: # tiket_values = [k for k in value['map'].values()] self.secretStr = ticket_info[0] train_no = ticket_info[3] - print ('车次: ' + train_no + ' 始发车站: ' + self.from_station + ' 终点站: ' + - self.to_station + ' ' + self._station_seat[j].encode("utf8") + ':' + ticket_info[self.station_seat(self._station_seat[j].encode("utf8"))]) + # print ('车次: ' + train_no + ' 始发车站: ' + self.from_station + ' 终点站: ' + + # self.to_station + ' ' + self._station_seat[j].encode("utf8") + ':' + ticket_info[self.station_seat(self._station_seat[j].encode("utf8"))]) if self.ticket_black_list.has_key(train_no) and (datetime.datetime.now() - self.ticket_black_list[train_no]).seconds/60 < int(self.ticket_black_list_time): print("该车次{} 正在被关小黑屋,跳过此车次".format(train_no)) break else: print ('正在尝试提交订票...') - if self.check_user(): - self.submit_station() - self.getPassengerTicketStr(self._station_seat[j].encode("utf8")) - self.getRepeatSubmitToken() - self.user_info = self.getPassengerDTOs() - if self.checkOrderInfo(train_no, self._station_seat[j].encode("utf8")): - break + self.submitQueue.put({"obj":self,"train_no":train_no,"seat":self._station_seat[j].encode("utf8")}) + # if self.check_user(): + # self.submit_station() + # self.getPassengerTicketStr(self._station_seat[j].encode("utf8")) + # self.getRepeatSubmitToken() + # self.user_info = self.getPassengerDTOs() + # if self.checkOrderInfo(train_no, self._station_seat[j].encode("utf8")): + # break else: pass - else: - pass - time.sleep(self.expect_refresh_interval) + print "当前车次{0} 查询无符合条件坐席,正在重新查询".format(ticket_info[3]) + # elif ticket_info[11] == "N": + # print("当前车次{0} 无票".format(ticket_info[3])) + # else: + # print("当前这次还处于待售状态,请耐心等待") + # time.sleep(self.expect_refresh_interval) else: raise ticketConfigException("车次配置信息有误,请检查") @@ -619,16 +625,20 @@ class select: from_station, to_station = self.station_table(self.from_station, self.to_station) if self.leftTicketLog(from_station, to_station): num = 1 + runedTime=0 while 1: try: num += 1 - time.sleep(self.select_refresh_interval) + sleepTime=self.select_refresh_interval*1000-runedTime + if sleepTime>0: + time.sleep(sleepTime/1000.0) if time.strftime('%H:%M:%S', time.localtime(time.time())) > "23:00:00": print "12306休息时间,本程序自动停止,明天早上七点运行" break start_time = datetime.datetime.now() self.submitOrderRequest(from_station, to_station) - print "正在第{0}次查询 乘车日期: {1} 车次{2} 查询无票 代理设置 无 总耗时{3}ms".format(num, self.station_date, ",".join(self.station_trains), (datetime.datetime.now()-start_time).microseconds/1000) + runedTime=(datetime.datetime.now()-start_time).microseconds/1000 + print "正在第{0}次查询 乘车日期: {1} 车次{2} 查询无票 代理设置 无 总耗时{3}ms".format(num, self.station_date, ",".join(self.station_trains), runedTime) except PassengerUserException as e: print e.message break @@ -648,27 +658,41 @@ class select: print(e.message) -# class selectProducer(threading.Thread): -# """刷票队列""" -# def __init__(self, t_name, queue): -# threading.Thread.__init__(self, name=t_name) -# self.data = queue -# print "{0} 正在运行".format(t_name) -# -# def run(self): -# pass -# -# -# class submitOrderConsumer(threading.Thread): -# """订单队列""" -# def __init__(self, t_name, queue): -# threading.Thread.__init__(self, name=t_name) -# self.data = queue -# print "{0} 正在运行".format(t_name) -# -# def run(self): -# pass +class selectProducer(threading.Thread): + """刷票队列""" + def __init__(self, t_name, data): + self.data=data + # tName=data.train_no+"_"+str(random.random) + threading.Thread.__init__(self, name=t_name) + print "{0} 正在运行".format(t_name) + def run(self): + self.worker(self.data) + + def worker(self,data): + if data.obj.check_user(): + data.obj.submit_station() + data.obj.getPassengerTicketStr(self._station_seat[j].encode("utf8")) + data.obj.getRepeatSubmitToken() + data.obj.user_info = self.getPassengerDTOs() + if data.obj.checkOrderInfo(data.train_no, data.seat): + return + + +class submitOrderConsumer(threading.Thread): + """订单队列""" + def __init__(self,t_name, queue): + threading.Thread.__init__(self, name=t_name) + self.data = queue + print "{0} 正在运行".format(t_name) + + def run(self): + while 1: + if not self.data.empty(): + taskData=self.data.get() + selectProducer('submit_'+str(random.random),taskData).start() + else: + time.sleep(1.5) if __name__ == '__main__': a = select('上海', '北京') From 162a7cefe55e2efc155e9194b4b3495ff47a9862 Mon Sep 17 00:00:00 2001 From: wenxianping <931128603@qq.com> Date: Thu, 11 Jan 2018 13:34:35 +0800 Subject: [PATCH 10/18] =?UTF-8?q?=E6=9B=B4=E6=94=B9=E8=BD=A6=E6=AC=A1?= =?UTF-8?q?=E6=8F=90=E7=A4=BA=E4=B8=8D=E9=97=B4=E6=96=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- init/select_ticket_info.py | 3 +-- tkcode | Bin 13736 -> 14896 bytes 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/init/select_ticket_info.py b/init/select_ticket_info.py index 68bed59..55179b1 100644 --- a/init/select_ticket_info.py +++ b/init/select_ticket_info.py @@ -246,7 +246,7 @@ class select: pass time.sleep(self.expect_refresh_interval) else: - raise ticketConfigException("车次配置信息有误,请检查") + print "车次配置信息有误,或者返回数据异常,请检查 {}".format(station_ticket) def check_user(self): """ @@ -349,7 +349,6 @@ class select: self.user_info[i]['passenger_id_no'] + "," + self.user_info[i]['passenger_type'] + '_') return passengerTicketStrList, oldPassengerStr - def checkOrderInfo(self, train_no, set_type): """ 检查支付订单,需要提交REPEAT_SUBMIT_TOKEN diff --git a/tkcode b/tkcode index d87a5adb1fd5f3663c02fbcfc916b6884ecdd042..2fa3803db0f69aa2562fe57e2f3cc9c96f94646f 100644 GIT binary patch delta 12942 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 BRBQkM delta 11785 zcmYki1yIyq)HlB5Dk%ukEYc;4G%PIWkCM)%ML>`)rQu6RHwXyABHba~-I7apEUOdb=SACxpAet& z=77wFo@l!99+xCndM6Q%=+~(m&YH#^rA2EcLW)SXR(Zmeh&`SC;GZKex0=2($B3Ml zs@sPEm9va*{G&wNT$9dyAoGp&tm4C|?bx!pU)ui3uyBqrEG(8Mv58c2~%bC<89 zUDlovaHhu&t6*X6aLMAN-uTu{ZYX>Y>QRQ(j6COI(HS3!;V=?B^mGEDsLp>A%Zzzx z*cR;&=W%OXAHUzEx@&s>h7vo=A~t@hb~on8HQGyjt)DRW2Q}BvmkY*j7YPy1gfG_N zALAc!$m5^kV*ig+KEsW|1Poc;qvan#637SZM^Lxg|I)Q%!@?>=xTX@^8{(H$+I7kt zv-J$EAU0{x-dn!81Ut>F1a98LDmbLb4R3RYs-z?^L-&CCy(2S{Iaa1GMAMjVB@-mY zKz#t+hN0&^4gpt%|G$>S#H4!EoS0))ynPcm5E_^ZeBr8dmq~@6(ugtxzGYZ zvRUwLPa%_j3@XM3UH9QPBCfO`zD08JazH(T$t=>Itc9kwV>zrA-1-zsd!FFcjsN{_#T+bBauC4u{mxE0XasIU-Nw zBvl|8Jn7DL@*5pf`wKYr=ljVY`vr{riR1h>@V`G+5*Sbnj(hA_6YOQ-@Lu{?z{p)B z_3{G&%Ohy5aDkrxSRX6>`7SK-?%%UO-qF%t>6UBD&&8fUf}YZsy3^U4{j)1lhmg5_ zM||5?J$(eh;($o5gaL06X|GYJM%jVMw?&QldmfeJLgZCZ*QW%a_FSdoMCG`^x!fsT zRqZ2BYuKIi_${CXQRs*DqyS#JYp@$i0Rv!qJsqVm$FL!hof&5RMvGe+v}65FR?Pq& z`oN&OrDhvUs(3v|i8{Uk0^Nc>^w61jWXV2z>0SZFxOvQWJSz0vOtx^?QDu)LV`9 zz?=tZiHtZS774kwohDyw{PkAJ-YScG1g-KN|1f=BxGU*8G?eKE(#E-iBu<45fBRHjLlK!va+nabFGRC}pwCop~=}6DP%# z4wQ)DZElcnCK-t$M%JV!iv;&MUU0!NPXC;!Bu8~_&Uq&R;(;FTXj3g2h`_6VYrxJZkKrTnPR4zA_gcL=2f}Q?yoeX4Aj>S)E*ezyE#E-jaDjhJ zKjSUm{mNda)!7aiuXwu+Nw=$3pBr8eK8&yzO7vj?_>&NQse%VTnvb%wh4l!|m4(nK zRt3qMoJ52>W!tR8s5AulrR&wTXvT{;K65T$Q?h(sPzqT?_*t&KCYaYV>KBzs3TJ;) zjvW&v7SPMu_<7j9)Uzl31UCc)YlYn4Yv*yoEk@$+SleRvzZv$z8l!Yz@7h~)RFhVF z>TT(PjTg0GXt8>X?EM*zM}49oy?#^dK`*l{EbXoQL#NH@VqefAhABH81!7rh=DAMc zk=-KxIyA?NuVnUZal^Ovk-HOmi=BE%iE#E*@81MwdH5Bj@gs=yJlr$iE<=9BVQYs@ z`N;yY7d?=m7xiDPoG`;t+f;bM9*v#b)h|5Yov&<(q=6kyXqjQ%(Lt>1GvYkSCNytp zhfj`!HNN^0B9Mes4mnpCks$vRB`(L1>N)X&TWIEVoH72g5lNpWtGAcbrnb<<^QvrJ zXPqkYa{%_evg{TNZy>#m`b1_p7im87l&ni=eE__xX58w$gN3YsN^vNOt3uA>a6SP$ zA~0n2&lNavnbpq;o>fOK%G~cDjL)iVC||MDkz77QT#I0@cMXk=$JP6VEv9}Z(j!Oy ze#h5;iigDhQz(dg8*jKE-;rs-e2X#kO+vKc&sdWb-ChIr!iXn<9c$gsYvVi|MJpLO z8t2nzPQv>-PFGo4b^cRrZc z&(gfV(IiXopcqNNCTcevSudJj?I!9d6QO6o|6}xF}X*-+|7B3{|!IeLgj~@@k-zU*v>k>vbw1%N7W&$p(*~5x(9;e@I=4o0roA)Y1yr(|%Sft0ovqsyK z?Yu|+jAlJ9>mpQ8K7KV7jZ@Olj>o>t;M7$Sv{0OF%Op&9imdUWaZA@cCTK{p(#Xyv zA&Iu)M7^vWFOvkG?;8a7;A;nWPYHQSMtMpm(+&I?+4>8YpzUN0KgI+O73&a!u2t>4 zq+0WwC@QQg1vreqIVak2^!E|;*ywoABFFiGRPBX7_vLezROEcUL}Bj@iGFX4JBmCu zGcVQ^Ai*mhZ~D&OBX8p5eWYELrUfQnI6^km%b?rlUQLHYRdcJ;1aq?BIS&O*!tlY<9bse1?IGv2l09H?M1e(V4QXT{y_POG zvKrV#5U2d0_~an1W+hQ#nFmIqtNxxR@+iL}wu*20ZxtF8Xf8bLt>t(%4RKymGS_#r zmHEAF{;@75rqMAbOWZL+OZ>gwM455alILymiaK6)l-xOb!Rf6hoV%#Kv2;qjLB#M& zw~UhhuVlpRsxYt!rO6Ev`#H}=6tKa>bcR~0c%ZlRUsg`J9n#g-KKbp~$NQ4u&Dnx0 zt?CU@>S&X#B1T@MHfoARoh+1+GphMXpRl-$81?p71>rq@PcfZ7voLbi&a1lh2XX6~ zr(*695#0fjw6o3FOwnmRR1RTg8~%@>ffFKFU{Nks3L5aT?ujJ6_j>){KbeghdJ!eu z$Tt#uA(VLeGO2(l8MSM0zff6P$xHEO;l-2O1@`}RDx6PF>qD5=SMHk3%;4&Uk&*3k zyM5c5_WZXPmY%eZl$&+hmV~X#<|51yuFPw7oS#xPrr&?#O3ew%a<_K2+-xVW&cyl1 zw|T9}&NK)xf#Ud19RFek#3II(el8?u%LGo+{I!j2+%)>VvI0>hl3F2-3wujD*PUKq?HD0G9G(&7393s3}mslA8=2#%JEgP`sOtWV8v7f7Zljh^m~ z=%wo)ot?_rS8a8b4?cXs!z}-6CxRV;7H?K^3gNNK3mX<*ch8B(QH@jB$8QvGQHxQr zy%(L%pU@jUW1_Z8kvr4zlJ*A7;^!<$O{6+M+`G?@M_uoRHJg4bkazg&{-wM}mE3s8 z9Ti~)TrOT~8+f=?RQS(nxcM*OE=6uKl|$D-%5OdWuEWYK>`n6xllKqpBNF#8mah8H zbdn<;J@T}XvI#Sn{(MvAP%S$eIde%NFgB_cvI5>P#3){L;$uzVfd!{;-+vJvLrDmX zMu$K}$2$DVUOi0#fw_4Hu>9TWg4HRYa4g^xB+abEMw8zZn@733ol%H~W z<+IB;eT8^aw5iY8&93ftG9fz}sQKy`+Mdj9?j=bzPD)b_^xVBPIyVMvcZ@K9bxvE;xu6p?@L&d zITJ(H-A^nqbD0q;e@CnpN8h_ur*6tjvV*Q2!bZ&X2zmy^bRm7xD}vj!-033Zf%tvn z9YM^ch@nvz7=k_&qHI&|6dqAD1CG4s6~})g`TJ~aA9je78z@XKe@4XjUv7t~MK?Qt zn4Dlgc{S_AOj9|(-0Y#`K8Sxx{Nc=M;pC?}wH_fRG!OMT{Z4`3Th@m_h>!@jY&iP} z>ig!Gsmy)%ZMA4SIr+di+Fg8hEQ>A}YoqsLfk^4)+EB{k9jqC6g-~#f0yIG=u!A~q zm}qruZRoVgn^Y>Ml z?(jZ>s)nq}7$8R0&(#xY=$xi@Bxl{i{?Pd&TCblWyTANsN$d{kCQnn9~v@; zOOt6}(RAI2TI;FA$(V%!QvC0QaVBUjP6amT2`B#5+EmjA60;5Lm~TH2$-b;ib!FPz z9mc?73)tUB)_Y3 zrS#-qjR#~j(f;DrT}{qK`c^H>zxIOIBHsl4w}tjq_IB&>25mM1Poa)^wZZ1q)d>4q zetTNEp(Mhpm7sp`E@I)-NY()v`g2fsHk4Z@PX1D&dMG?Uhe*?7mL6BNh%+8J$E;uV zr==-Ox1_`@mJ!y(p1r>kJH9=Y(Ogwu^CLVY`(2bNOE5;zQz|q<7Eo@2=iR-Y*iRW= z>qb&;!YP3Sg=3)O_%BH?>_f>h>|=nHrJ$z-vP+;dDnCmMp63-m9o_ z)Xi>Z4PusyI+}8o4A6ATYrUQJJ8*Otk;D>*3oTdNRTwbPLhqL%=)jY7@CV078y&W5 z9dcFljj$~6rDgV$5|_}pnFsJA2+OeiD)zL}CEOwzuvwbh!HdmL?84MtNShr7wSjk2 zwrnhdRtd%m`mYUQM^OlLR6>WIl;gkF>SC%M@y<-vzOj$8y&tv3J7hDvp!6bjymSQ5xG3U?ryAux@f1O27tO$>F0EpKrEh*s1dj>F6|~P`0NsO&gY@^C>ne#tNE^F-aVm&q)SW|TjT~s5xss#BX_t`$NORX zRmJOrbrDjFvDS|RB^z)U58qT;LazZ){V;IvT^Ko>V{K2~+0W43kQh(rOI2hm9{OwI z0?>L>LG7OC%_AahZ8MR8Q{Scrxd%VzA$(5(U*yM+6Mv z&`uSs+(Y0ArObXS4ffY=HQtep%m+|gW^@4+s>HPWsIqfZjy2J9o5|=yKW89J9R!QA zZs0%=E1F~|;Onfr>brG{{Ehi-Cy_S=B*f-brIk1#qKTqEnZ#IPF6dX9-qYF>bT*PK z@9M33Qvau=76>AiQZI}TrG_N6S7EOmZA?n>hPS{lX~yVM~1?El6iUaFM) zfSne|#Mi5^r#vOuf%x~MgV~q>DOYcC3yF0Ov@x`J6;mo1+RN@EwK4knr@~Mm##+$5WvYVz+Wo529{{7H9?lOX*p71Y zLW`$3(g#wY*UmWo2GNQU(@c*bybu&*z6qGldjwe+85#&kbF~{nJ_QVyAH-b@BaKwf zWRrEQgj|F;phW%rBJ7>1X2$7L8Qi@*`*B@yy{!e^9?^FkcSHh%kdGC>#n<$syz7yR zOYzn*Q2=#LOlSyf+xP80%=|rA&ne4#1Tnr2)U$4$+|2x2!~Bs$7MmB9o=q9z>9Sx-gZBif{2)UDJPymL2auHU^R`?KM=0OE^q-JZ@9s9)2^iSBIQXYR=EXA+|gq7!{! z3Ofw$uqs!Ks#;4(=wVwP$8SITQ7zR?WF8^ zx`IZ4wwzt?F2s0d3IG#){A+?8l6633yIy|7J%t>Tv@AF~iqhqfXE{x%sKVt$2F8GmU$( zpU$zripKt)Sjs;7O8s<)_43y7zd*s2Sv%1FoPN@d>~=RiewE;q@u`<=bCU1!CoC)x zreLx((T175i>eeogpHS~DYA^I+9@g8HAJ)bluVrWut&TC>>!gKBETii*D?P7jibO& zV=jP{uzPxITige`y9C?)$vd zM!2COnP13~>~rF_(!T;k_{@KX{Nh0T-3ib zm})u!pTIUVslT^w*P{sGQAev*y;aWsG$o_qhY%JQ85XzVe4nhd-?sKpqLI7@xM?A` zck|}MsnD^*UMnl8ngs`O6=%aoP=^9nhDFi!v0{yL$OSLWd)hZF&dZejH*mE)FTSIe zR8#x%Uj@&FtqZ6nyU>Mb%iV25gJ;sVc<%`;Y2`B1NF2zB+FbGjdEm}vRLO-C-ajxW)zE9~J zu_?0%5pgm#NgOgwJ_A`0&ODVc7S#~wgAP${OkY+J@o;5i@6TS&Hj9W@wQK!Q9xA^r z>>MCL3?ti)5ppu>^L3R|NCvm!F25I(9CD~QX!#fKc{)dL!|-z7vGh-X+BaYnIb}ul zQlmOKxE_41+3yvMshGh=mC^0zRG&_}XrQ|l({Bqcudma3MU%j6YxkBb2b+3Bg5h7G ziAj8O^YI?1=mVq+&ZDzAPSVMW@jKZ4q7{~auF=*Oc-m?ZnwUwrFX_gZa` zI4!c;Z%6zgDEI6~{fm_>9{m*CwdiLS5APe&A8`5~1gMT>Lx3%@f=AGbK{`rzFDTR4 zs@`-aXg1qRV-0dcY?XdR#dd`RI{w#gN_Qkj5GaZh4|MU?|B8H7`7_9@eU2|8)zOHh zbQi%At{KO1cxc-PFg{tyZY|Q_0sSDg7z+28eW?D-9)TW@%oRVsxZ< z%`IX>FWKYMn&z&_$?4QoBbrD5+04B=?J~5?kHnf{Cc@5KNV$pL6Jg~!zX+(zRqTpJ z1H)LvXGu`{)PqvwE5=8VOci2NKc6LnU0HWF>OqN{oo% zTO`WjXM;od`j5aDW;!NY3D+;F~tG9_fI&o_52;(4h zq+=YlPCJ&3{0akiKHsJAQHyy_Yn79HJWbx?roT2BI2^e~sIS|I5L56(PMPZfSu$?v z5(eyKX@i1-@_Wvyn3CWEe|*z<{_2$$@GbKyDsM#JC zR;~v^$h5kHH1X@u6AX0=Z2{%1dr@vc|K(=A5o>?-LJ>`snzRe)%VJw~Erq(tVI+J5+#>o2 z;?>vkTZ3F(S3H7TRPGafpJXqsFsK7d-G*98kZ-bg{~}z8uD0xD=dM0M@0VWYM^NCG zn6OA5N`DY~`Hu68VsR@ctGFxVsJL~1pMQj(!!g+;Av0E6kVOZ_gczVD5Ir4_T`I9` z$SKX({H04bB{-+kGr+fC=1aVKHIBKLUHJJ53t1rE^&b0AkBp>2O8r-0Y}lIAQm~II zgi;ui2D0CFE}pux>jRxU+12rZQH>fy&Q4ly@HLl6>f_dy0Nz@gncpb7NRvB*3G;C; zHhX?ynljABgyC)yIiTyD_O5jtk-%w1y6KIZi9X2kZA_#wd&M924>>GbT`J$4B-q)U zH|c3MTgr~|KnX*lH+1)=I@LbzCvTjlzvU!#fX9HD5VFeGw3?)gbyZdRW{FGPIc@%C`xT?guJ>l?>_om80y6vAG4Aam49*W80fuig2f`WY`Z`|*dR`g4E249SdYl;wW&D?sW$vkU z$TSztG}mzO$#l+#-Qbr!@l1l!iTDj8D_`B7^T_Wu=5$HxpvtLlVl>vs7 zFf0sew?Yc0dn@Ze=t0rN6!~Ig6LenwCVcCi@wV@Rhg*4vF#TPsS+H>DKU4Y#Cb9m) ziLZ~zTzNz3)P>7UcG^EI!+QfK%;=b_4asS2=+}8-x=HIC{li7P^2&M0mBM^cv)&7b zrqVBt_Z*$`IcktoIn&XTdbK+wZxxE&i|&=y>o&^MyRcz#+8ygX>q6N0k>QLu z5uf2UCpLXlny|5FPWcjxz=_G^T@ijb8WBEw1TlC@D>F86&d2{QP)`s$Wyoe?4BFOt zU<0PIMxo-aK7&F%-~Y?IO23kAh4oGI{yAX_d;Pk!jDGWEO+VDk%l(ws{SB{Q-Kj63 z=&(?_k}e&|K!WO^U$ltb!^(sa^Up>p8;}Kd92vol$1U~jc=1q8igD7t2`d^M+57wM z?F7cO7grGP8ow6f8>WOdwJM8Gd;cbHMzw&ecuA3H3o?u8ORw6lk?GN>0nnjqyUuQ0 zczco^sGj}2_fId%C>TYh&BfM_}wJWC8LA@9jsy;Uf9e)*l8 z%^hw1W@I8Yy{DR6HGKZt9O4zjUMncB*?n3)Vf=;szy?f zi1yw=buF-tj9=GIS9NiZ6rC9rusogX+=lkkKZPuwGnFxI8%#!k_tgerU*`kfK)QQ) z&q^cbNlKlFtTnqn4Sf@C@G>;Q1Q^WcYBI90zl!uI0F?-D&ZT&kc0cI09kYl{RpOEw zjJFq}GEyStVb9dc$fe5?iXtej5XPvO4+f9haeBYrXBfOxgUY&-6u7`%Q$i8VRuc(f zcAGi>U@#e`>DC-4y|mTZ8ie~OyJ|PnV$8f#CtHn6bS_tZlZ_-8C~*X|Z@zU2B?Th+ zE7Q`S1*Ek{FNRuuDQN2}BpDoiDeVBzsEa`9Olgu`C32{H{_yB7 z^s-Kl*dX3w+`xZZwnd6gkk5Jj=sR0$dIX_t{2@;)k>B4crWCVMwqtqyf_z!`fjW0P zYr@0%GxwQC(go@i{^2j;qE91AvDJ9r2I15M_&T=r_ttO$MslV?7h_M1NhEW1)!xps z;r*&0mduL1jvW$*by|ORvNvsd`yq>$FSo5&>bC9jI_6$}&=-$w zJI~5f&LN-T6VWh$q|S!PZjPL_ULp)dm(~^sDhvvp@@|X0|4j4m(#));a}HKWI8V2@ z-DsUSCEqGk44a(39I8khxDJbeJAmv)prnrDbXO(z#JiY_NaSkmd#3$&u3o|8!rKw_ z&AUGn_i>QdzA-?_q_Wt}#fsJ<=f8eNzj$i2I7{MlC+gE-)dgFWchLu@1fju@bnY{Y zJnwW)VpR_k+1chIp-#OC3iW>DQ~NLdnl8qU0pqalb6Up(u7X=(IvGBr5~%tQui>X^ zmWVWzGv(NRSB_xyK-tiaR&YisyFk+_6`clmm-#atk{Cb|g$0I$j(F^QIk{}b3L0QI z)N}gP%`KrI!Q;)2+LsOr=JfpvAAJ4)Gg0(w?_2jn__~PPc(sW5T%DI!R5LP;ZaWOI zjNd0SvV?lqF_j%fe7mzwt*y7U(#q+B60>*$Z!j~NBI-- zri|edgaekWXk&Q@I~$hY7BSVHOffZGHv;jeI`VfILmrL+&P$&YOkXD~`uiS`$g_g{ zo_i&cgFT*LYuxy!wFE*{5evUfmfwle(z=YGBV#`J{dB^8GWSb|;0#r!2reaMvx@?6U*!fzky9Ttu8Kp@#+R$l@%JRKnrhuqwo!%G!K$BCDt^PVq!2aqGCr zN2mSY1u)mBpUhGIg({!E)nDp&bp7Up&XS>{1ozjUIXyY+rTcI1K;r9Ua_A?_89ndB zMZkkZ8`bL#m>3(%S4*}m4K#o%OSDV-VA6-qM{N)|h;tyFhMY;Z(mJ*O zpYk9}|8{A=X)q1wdO=S+KD3#^p|us#RGBWxg&v`H+u7}c=UVFbSAAdO2Y;upKj@u) z1Wkx%^)3-4bx%zN;V)OJShmu{JC!?N0CcjK((dOY?O> z{C;s|FeJw{l`VRfE$v@I?C$}bBKX?2tX<}iYe%wlO)3IiC$yaY3O-~btW131WHk~j zPUF*uVaNIO?UajX@E5@wiFm?(E$jMKc$}j5sHAO}Hy9h?+%E2WS_$nDriKFhhRwm0 zBD_majtZ}=l`MH&(%$))eHw1RZ}VS9!13dTiB=U89UW>^68JqFXYcE@le z{S>q3TKRIDkYhjF%z5QT#1m9q05`bNpYMGBt}p^Ya;zxrRd2I-sjKUFU7{XC^9Zu8 zlO$slegwHiZ&@u?^{6F($b)?qwEh{~Nzdi_G6l&SabP)2yj~5vV??lFJxK7Q9znMM z!(ielz!+T`DE$d$1j=8RQtB&?^|nY7&CJ#u+DpnEDuBP=y=OAnxfvik|K1dQ!T^Yl zjWsb`xb_@sG%D1}4nBESn6cMI>eP0Ij;dPl-C-~+&qQQMmYS{+$2E{w#kbS;C0WhH zV&PmHm|0}BLvN=wTT7f<_{#%Sk+#Sc`5Li=7@OGmv|^EVVBHu&Og;i%G5_Ji?^cE2 zI!c{>MWf*QRJ+IP53`xYI9qg=Hf!T*&J+nx)tjW)p+rsHxL1)8Sk>1LM9Cui$VS&A zmEi1z%IxmTa9rJwSgppO8}rPD+CSxLc~aIF?qts?UmP-9;p&&RHG7Xp)R&11P`DxD zl|Kxggf!u=0b(5;bo}yvLQE=U9Ar(L_wRO6A1J1)=39ACigAKmb-XW=Xiw`%VR~oo zb^>&Q{j#Z37wd)jQnefNu~otY>qIi(mkp)@YOlD>Cm2t&TJ;+xNfnMATftPuuIsi` zOui!E-$QmqjgZfB?t588)e3wGG{{=40vR6l5`Q*$$Sq!)hTumFu`&H|6dL&9_#RVKET{6ScdrkA_P78M-kE~$(1avpKFvEiy-a{ z8#&Defj0g4n?6t6Yf{@a5}O--Q^!p06SK1edI|*7z6>G*&3Hs+x^R0uqOVBq0tMEA z*k3P$>%h?iDWBt0`+AQHE}DBXOiFr#Us=?hcGfu5VINR}P_Q(QZ|>uY?@0}Ah#ZZ= zjcVXLc0kgOqbYg4&nG$QSLD02GAtwC@5G#)E`_KC!Uy&Y7c&ehpQpx0)uRPIsvRYi zT+JmV)x?sV%33q1`UGQ_-C>7qZS(2^npw&vKPG$9qC{ahU-a;l3iNgV3arp9x$EX8 z`}Vktn6G?YztM8{Qp)Oh7rvfwX?ybfelPh_s~_^w=kGMQPn2L|s*w=Z z@hUBbY{%}x^RtmwgO*hXQMz|5u)a?dS?UrOw@z*MZ&2h$Fig>p3SZ|s8{ZaY3RKvJ z5Zo_4f|3Ph#&o@n(gD+t#hM3>PHxmE@(Haq)5erDQ^uzwA_U@AKORB&#&t3>6Xle~ z4=ew8c+qENQkl_3<9o2;$-`@UYl;poPkoM8+~=nDWTga+wthUne0S-)X ztl5izT%#XB)1^US;(-z!7w2Nh4O59X)hUum^isN52eYkEk_a=8DaI=vwSVA<;v;Cj z^%3;h(3U*SfR4IiGu7^1XEme%=PyOZAn}tr*a?Y^hx^C-1oop}(bplV!1U{ffd(tC z*L!w=lxH*6>Hr zo100af3_pUc)jtz;sa(?qj&#thM%PBS6<}y<}R1Dwr(4elRabvKYZ+d1pREOgx8Ox z Date: Thu, 11 Jan 2018 15:23:50 +0800 Subject: [PATCH 11/18] =?UTF-8?q?=E4=BC=98=E5=8C=96=E7=9D=A1=E7=9C=A0?= =?UTF-8?q?=E6=97=B6=E9=97=B4,=E9=98=9F=E5=88=97=E5=BE=AA=E7=8E=AF?= =?UTF-8?q?=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- init/select_ticket_info.py | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/init/select_ticket_info.py b/init/select_ticket_info.py index bd8757f..8a6229e 100644 --- a/init/select_ticket_info.py +++ b/init/select_ticket_info.py @@ -33,7 +33,7 @@ class select: self.user_info = "" self.secretStr = "" self.ticket_black_list = dict() - self.submitQueue=Queue.Queue(20) + self.submitQueue=Queue.Queue(2) def get_ticket_info(self): """ @@ -623,6 +623,7 @@ class select: def main(self): from_station, to_station = self.station_table(self.from_station, self.to_station) if self.leftTicketLog(from_station, to_station): + submitOrderConsumer("daemon1",self.submitQueue).start() num = 1 runedTime=0 while 1: @@ -669,13 +670,15 @@ class selectProducer(threading.Thread): self.worker(self.data) def worker(self,data): - if data.obj.check_user(): - data.obj.submit_station() - data.obj.getPassengerTicketStr(self._station_seat[j].encode("utf8")) - data.obj.getRepeatSubmitToken() - data.obj.user_info = self.getPassengerDTOs() - if data.obj.checkOrderInfo(data.train_no, data.seat): + obj=data['obj'] + if obj.check_user(): + obj.submit_station() + obj.getPassengerTicketStr(data['seat']) + obj.getRepeatSubmitToken() + obj.user_info = obj.getPassengerDTOs() + if obj.checkOrderInfo(data['train_no'], data['seat']): return + obj.submitQueue.task_done() class submitOrderConsumer(threading.Thread): @@ -689,7 +692,7 @@ class submitOrderConsumer(threading.Thread): while 1: if not self.data.empty(): taskData=self.data.get() - selectProducer('submit_'+str(random.random),taskData).start() + selectProducer(taskData['train_no']+str(random.random()),taskData).start() else: time.sleep(1.5) From 1d3a7867d524f5eb26ef6fba25639f53025d82d7 Mon Sep 17 00:00:00 2001 From: wenxianping <931128603@qq.com> Date: Thu, 11 Jan 2018 15:25:31 +0800 Subject: [PATCH 12/18] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=8F=90=E4=BA=A4?= =?UTF-8?q?=E9=9C=80=E8=A6=81=E9=AA=8C=E8=AF=81=E7=A0=81=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- init/select_ticket_info.py | 96 ++++++++++++++----------------------- tkcode | Bin 14896 -> 11492 bytes 2 files changed, 37 insertions(+), 59 deletions(-) diff --git a/init/select_ticket_info.py b/init/select_ticket_info.py index 55179b1..13b5805 100644 --- a/init/select_ticket_info.py +++ b/init/select_ticket_info.py @@ -368,54 +368,25 @@ class select: data['REPEAT_SUBMIT_TOKEN'] = self.token checkOrderInfo = json.loads(myurllib2.Post(checkOrderInfoUrl, data, )) if 'data' in checkOrderInfo: - if checkOrderInfo["data"]["ifShowPassCode"] == "y": - print("需要验证码,正在使用自动识别验证码功能") - for i in range(3): - codeimg = 'https://kyfw.12306.cn/otn/passcodeNew/getPassCodeNew?module=login&rand=sjrand&%s' % random.random() - result = myurllib2.get(codeimg) - img_path = './tkcode' - 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 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"]["ifShowPassCode"] == "Y": + is_need_code = True + if self.getQueueCount(train_no, set_type, is_need_code): + return True if checkOrderInfo['data']['submitStatus'] is True: print ('车票提交通过,正在尝试排队') - if self.getQueueCount(train_no, set_type): + is_need_code = False + if self.getQueueCount(train_no, set_type, is_need_code): return True else: if "errMsg" in checkOrderInfo['data'] and checkOrderInfo['data']["errMsg"]: print checkOrderInfo['data']["errMsg"] - if checkOrderInfo['data']["errMsg"].find("验证码") != -1: - print("需要验证码,正在使用自动识别验证码功能") - for i in range(3): - codeimg = 'https://kyfw.12306.cn/otn/passcodeNew/getPassCodeNew?module=login&rand=sjrand&%s' % random.random() - result = myurllib2.get(codeimg) - img_path = './tkcode' - 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 checkOrderInfo['data']['submitStatus'] is True: - print ('车票提交通过,正在尝试排队') - if self.getQueueCount(train_no, set_type): - return True - else: - raise ticketNumOutException("提交订单失败") - else: - print("验证码识别错误,第{0}次重试".format(i)) + else: print checkOrderInfo elif 'messages' in checkOrderInfo and checkOrderInfo['messages']: print (checkOrderInfo['messages'][0]) - def getQueueCount(self, train_no, set_type): + def getQueueCount(self, train_no, set_type, is_need_code): """ # 模拟查询当前的列车排队人数的方法 # 返回信息组成的提示字符串 @@ -455,7 +426,7 @@ class select: print("当前余票数小于乘车人数,放弃订票") else: print("排队成功, 当前余票还剩余: {0} 张".format(ticket_split)) - if self.checkQueueOrder(): + if self.checkQueueOrder(is_need_code): return True else: print("当前排队人数:" + str(countT) + "当前余票还剩余:{0} 张,继续排队中".format(ticket_split)) @@ -472,11 +443,12 @@ class select: else: print("未知错误 {0}".format("".join(getQueueCountResult))) - def checkQueueOrder(self): + def checkQueueOrder(self, is_node_code=False): """ 模拟提交订单是确认按钮,参数获取方法还是get_ticketInfoForPassengerForm 中获取 :return: """ + passengerTicketStrList, oldPassengerStr = self.getPassengerTicketStrListAndOldPassengerStr() checkQueueOrderUrl = "https://kyfw.12306.cn/otn/confirmPassenger/confirmSingleForQueue" data = { @@ -493,28 +465,34 @@ class select: } try: for i in range(3): - checkQueueOrderResult = json.loads(myurllib2.Post(checkQueueOrderUrl, data)) - if checkQueueOrderResult: - break - 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("提交订单成功!") - self.queryOrderWaitTime() + if is_node_code: + print("需要验证码,正在使用自动识别验证码功能") + codeimg = 'https://kyfw.12306.cn/otn/passcodeNew/getPassCodeNew?module=login&rand=sjrand&%s' % random.random() + result = myurllib2.get(codeimg) + img_path = './tkcode' + open(img_path, 'wb').write(result) + data['randCode'] = DamatuApi(_get_yaml()["damatu"]["uesr"], _get_yaml()["damatu"]["pwd"], + img_path).main() else: - if 'errMsg' in c_data and c_data['errMsg']: - print("提交订单失败," + c_data['errMsg']) + print("不需要验证码") + checkQueueOrderResult = json.loads(myurllib2.Post(checkQueueOrderUrl, data)) + 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'] is True: + print("提交订单成功!") + break else: - print(c_data) - print('订票失败!很抱歉,请重试提交预订功能!') - elif "messages" in checkQueueOrderResult and checkQueueOrderResult["messages"]: - print("提交订单失败,错误信息: " + checkQueueOrderResult["messages"]) - else: - print("提交订单中,请耐心等待:" + str(checkQueueOrderResult["validateMessages"])) - else: + if 'errMsg' in c_data and c_data['errMsg']: + print("提交订单失败,{0},重新识别中".format(c_data['errMsg'])) + else: + print(c_data) + print('订票失败!很抱歉,请重试提交预订功能!') + elif "messages" in checkQueueOrderResult and checkQueueOrderResult["messages"]: + print("提交订单失败,错误信息: " + checkQueueOrderResult["messages"]) + else: + print("提交订单中,请耐心等待:" + str(checkQueueOrderResult["validateMessages"])) + self.queryOrderWaitTime() + except ValueError: print("接口 {} 无响应".format(checkQueueOrderUrl)) def queryOrderWaitTime(self): diff --git a/tkcode b/tkcode index 2fa3803db0f69aa2562fe57e2f3cc9c96f94646f..16e5bd09da9b1b762c8d7c8dfa2ce765895d90b0 100644 GIT binary patch delta 10188 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 I5eMgg09nb-j{pDw delta 13700 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 q9fE9qegIiEO0t9UhY4|e`$(8Dw??*9ViM9uL4 From 4383d31878a55c43a73e041c22d8032b41cf3fbd Mon Sep 17 00:00:00 2001 From: "79277490@qq.com" Date: Thu, 11 Jan 2018 15:26:12 +0800 Subject: [PATCH 13/18] =?UTF-8?q?=E9=98=9F=E5=88=97=E5=BE=AA=E7=8E=AF?= =?UTF-8?q?=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- init/select_ticket_info.py | 1 - 1 file changed, 1 deletion(-) diff --git a/init/select_ticket_info.py b/init/select_ticket_info.py index 8a6229e..449bfb8 100644 --- a/init/select_ticket_info.py +++ b/init/select_ticket_info.py @@ -680,7 +680,6 @@ class selectProducer(threading.Thread): return obj.submitQueue.task_done() - class submitOrderConsumer(threading.Thread): """订单队列""" def __init__(self,t_name, queue): From ebcd2a7997bc40d9485f548d6681f890eb7a6419 Mon Sep 17 00:00:00 2001 From: "79277490@qq.com" Date: Thu, 11 Jan 2018 15:34:15 +0800 Subject: [PATCH 14/18] =?UTF-8?q?=E5=91=BD=E4=BB=A4=E6=B5=8B=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- damatuCode/damatuWeb.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/damatuCode/damatuWeb.py b/damatuCode/damatuWeb.py index 5f3a70b..3d78011 100644 --- a/damatuCode/damatuWeb.py +++ b/damatuCode/damatuWeb.py @@ -18,8 +18,8 @@ def md5(byte): # md5加密byte class DamatuApi(): - ID = '40838' - KEY = 'ca9507e17e8d5ddf7c57cd18d8d33010' + ID = '53330' + KEY = '9e5dd939b00d7473c2fa8c1283baa306' HOST = 'http://api.dama2.com:7766/app/' def __init__(self, username, password, file_path): From 9865021f8148e886154b27039043ae52bcb71258 Mon Sep 17 00:00:00 2001 From: "79277490@qq.com" Date: Thu, 11 Jan 2018 15:39:42 +0800 Subject: [PATCH 15/18] . --- damatuCode/damatuWeb.py | 1 - 1 file changed, 1 deletion(-) diff --git a/damatuCode/damatuWeb.py b/damatuCode/damatuWeb.py index 3d78011..3580bf8 100644 --- a/damatuCode/damatuWeb.py +++ b/damatuCode/damatuWeb.py @@ -124,4 +124,3 @@ class DamatuApi(): # print(dmt.decode('tkcode', 287)) # 上传打码 # # print(dmt.decodeUrl('https://kyfw.12306.cn/otn/passcodeNew/getPassCodeNew?module=login&rand=sjrand&0.7586344633015405', 310)) # 上传打码 # # print(dmt.reportError('894657096')) # 上报错误 - From 53f030537d4cf891ec7db69b619201d82a1b0f95 Mon Sep 17 00:00:00 2001 From: wenxianping <931128603@qq.com> Date: Thu, 11 Jan 2018 15:43:00 +0800 Subject: [PATCH 16/18] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E9=AA=8C=E8=AF=81?= =?UTF-8?q?=E7=A0=81=E6=8B=89=E5=8E=BB=E7=B1=BB=E5=88=AB=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- init/select_ticket_info.py | 2 +- tkcode | Bin 11492 -> 15299 bytes 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/init/select_ticket_info.py b/init/select_ticket_info.py index 13b5805..765cbb2 100644 --- a/init/select_ticket_info.py +++ b/init/select_ticket_info.py @@ -467,7 +467,7 @@ class select: for i in range(3): if is_node_code: print("需要验证码,正在使用自动识别验证码功能") - codeimg = 'https://kyfw.12306.cn/otn/passcodeNew/getPassCodeNew?module=login&rand=sjrand&%s' % random.random() + codeimg = 'https://kyfw.12306.cn/otn/passcodeNew/getPassCodeNew?module=passenger&rand=sjrand&%s' % random.random() result = myurllib2.get(codeimg) img_path = './tkcode' open(img_path, 'wb').write(result) diff --git a/tkcode b/tkcode index 16e5bd09da9b1b762c8d7c8dfa2ce765895d90b0..f7c06e73938cfeb6f6a9eb949987e8d385e553a4 100644 GIT binary patch delta 14125 zcmb`NWmp`~yQT*T9tf7;65Im>_au05_XKwv+&Vyj;O;U6cS3L{I3c*ZGr`?qX6Lu( zIDb!A(So6_e??bZmQYYUP;2UuzJF?b~Et zlL7=VzKZy)8?(GF0;(RPAlpYNmD~ta=fU;jgWi82;IGcl9BvJA$JVQ^b~t9_!e7-f z|4b5BKnfyvxnV1verv;(?=>=zjAIjNop(p9>&6k&bh&q=`N?>?p4^B@B?ES?MqJ0% zynIa@=)1MTIHuS#E!tX2TaUfFDORXgQxC|Q;wsD9?)o{E8=BY&n}lW1(AB{~;n9}~ zKQ!ZCqlT;}hJIcn-E97vGoU|PIlQd&JhAVo+N)u9XMS{~{zYtNE|e0Kiw6#U{}z8x zEv_YWe(RZkY`b{V35M;vbC~t_Gr5`Xa^d_J?+CmM=&C@2zr_5dJ>G)Uq>27HO#VIa z->*o6%UW7_cFz_4D4DmWDNOGVk6lTqD_Bx2CO{ePF6u;H|O;pW( zshetFx{VY@f-h5;X8x%P4V)OIW0Y8dMk0bvCQkOZAjzNU12?ZB3!UPZH?q4t7%FWL zHxIfhC7WyslNilxT*%w%&y;l=1zyu~h2a)RD(Idnwrh!am?QuSWb$ph?c#~N!OYK> zvoBQ~^)a*4m+-$RB%|Eo1zh=@DC7VyZG6h=OtBReODN?FajdVk)J}NnW}8KfJWcD_~A-(w!u?w*EnD+Fo=Z%Dfqbtjs%( z>tEV37WTb;;-s>Iw!XflxzQSRRh2}$UuwWCVh&NyS3oJByQPs(3s@uOKqDK#H0UW= zQvCd^zP_@J(3E+~#yk5Rn&45RCsgZLl!0$7^sU3&Iu@|?Y`3>&oPtcir(#NP!NIEX z(L|Vk;o}?}6p{a*!IJAY)BAd%w5}ZvI*-&BRt$JwxoFO`lJ^Zmf7E%nUs!U{5da}B zjn*g$-a{pBYZ&|2K9%jgH~fSK@0|F%@qdbL#bLr|52h$)o>88?0*I| z4r!kNW9hc37c`d=1=ZAx+b_^VKT>l@6O@YH(xjSneU4&c7^2F8UoeX)jFO`qKo{jto2HOg`iN6U0A1i?bO_gE39y6z9t zjdsCR`>wyHMjp&7c&A7;B65~`&*h2xdiAd!`W#?&Peqn2IcPG+0Kf`yY(?qeOb{E5 zIBlh-94j#%c5o=!cO4-@Q~$o~2)d?f+scUjc-CJip8qUqjx52@FizlY1s!$k%5?L9 z%m6q(C&?F}_18BV^UCW0I&MQM=V@}}>d_iGi3T|{nekkOsbTf<)wg54KKf(yYHPzz zFSL0gi%ABDIHFDg%mL%+8M{lSd2wimnlZjac$<<7Nvd)u4_b&N{*c?IQGx%__h!o4 z1LI$tEQP@;(chD|%$QNjU$_M8Px&49^SyfATrKS^tJY5G!~_R*hCN!trdr`3NNeoF zJ<#7G7JU5qDAlYzuL<*&qAqA#$l|AWzNMb+P^C z5w;Ah&B8%spJq;KM~>z;*et`Os`9lG|N1Bq@6s7{BsDlWCT%Bc$CdVjbK0PEf4M*U zdmKx2mMTjeH6!v7qs<)S{#2e7lZog%6Zq=5GB=5KH046t~j|)KAbrA zcqOr=2lPKLPi0w{zf@rR5~02TEc~gEL~I-IN%Q zDo-2>wXxfh8WN;Ya{d;N&*r38>@Bvm+T2{vedg{QiWBdak+gRcAINwHeuv0!_3BJS zxnV|>_gUp1F4p?RBMj&F4go%JP}W?AwT~Ntm)T*XZOp0s4xJgtuYrw&sXLt_KR~hd z;Z>MJAy0+fbv^12RQ#F;s*cVO@95C{=<%f?x=^P#$J*p+SvM3{W5!oK-)=|C*jA_u z_TF?iX1K+(Es{2Z#E%7?c9ryhOsxN$r&T-y^(N|ZaB~T4m(&=TEd&$>XKd(ogkAORW>b+-rQ?PiSWprQ(1xzIfvkw7 zIU3(qUxQ!@Q#nSxAHlTYH2mOEOqlm3Ch~VX3&Ekqb5=O$uTYuuZG<87C6dKAK>}( z2|{J=Z7fL2oT5t z{Fk}LwOIIs)bO^IbH`|m2Ig9$$xN8WXsynlCKgvR#_b~n_D}r zWPaP&!Dz!LcbL?xz|$}rACXnW!#zk7JSvPL-%6A`f_XLbEq;e53&6n?6ufu8eB5W| zi(DuYSE@*e`T8N`+x;i9veJze4hF_!%6B_6TB_mLbUEZ8yfkq9_^IH@$9jLyUI~j> zrBF)FSq(bO&B5h~VkUNQkTMdA1owfSLh-vK%3~*6ABWZNqJ*+2i%kTta!fnhaa_@V z_Z|=8yu6hT$v^Q+yfPpBg`a^L>8Grsa?SA9l zaFBaBbhusF079}n{mhm3?{-NpOJfS!-ruUfSo?1#fg*OT*%kBPN%lCuVA;&Qnmt&zS8frq|1xShn z9dtEFe+2z`2B76J{+O$qnW2v%cRf#oqGO1wg*dCIf`iXbWgj$sm9XJ^W511bWN-;^>v$b&rSMK8Yf>q!M}5JgF)uCudHbMLfBIl6 zP!nk*8CBSv>dWmc_ZN>uBQZE8>xHzq`}l}@GQwyn0`zjh6<-pUDz!0GXspE87>9eW zwHwI1rmF`QnV5JK%%q1@hZ8EJ3-E(*@$`+}>!&+bIXDoAfRQVT>_SQ7@#uSlY5OG> zi^t3*%$I6@(pdBaxc}wb#;hK(vP5U>vtq|!>ch;wjt6f22 zp42yYLV$E$4W9||Umx}$ktcNwi`5ssxOY6>)U4Yv`He2iGeV*o{?3eKI-%~0>93tT z_gEXgt;0bC=@?9~yZg-o+yq%o6!5bll*AZcE#DD^0c9=Ur6pervoDrOG)!lF+lx7o zTVuqxfgD$A*VrcaR?J?+I{Am%^odKN+cC)#djJIUlH5Y0qf4tZ)nvCUGlVzDV zCnVzw$J(RX=}tu+xlK`L(lJS+Dv{YtR>?rqi0l18ANlZ-P(|(}wAP9>Z@7&JJVvl#)cOn#`Yb~%n@hZT;f1dAGnJ1OEbq;jeo}m^^oj~=lX)8f&-P>70`&p1hr+$(t_{x zDdaSMcSOjOadOm<$yP`tM{Re*01To52TA&z4o9nK!DbaL+vC4>C39~$1F|I)W*Ikl zkxQ{59LQ|Eg5h ze`N|=+eOIs4L$UL#igB_@o#b`7Z|YL-*!*gh}5oGRX_K-Q_m zRzI?bx0lnt5Va{i5Jn)xB;p^2PERpyveY=&Vvp(R&5)9A?ObXLpmNcQL?meWoQlN= zLm6v!+JDs5C)>|bzj@4Uc)vxL<$G- z`DO+k3O#MCK}LT9j@9PPrX~Ev>Se+(%}g>K@s(MN7;KccxkNH6QNCn%2fh0KZ8v1e z+bJ82mfn8-YOOI+k4@D9XA~Ub={wb)quf~=@-VMz>S>33h*n3Co5@u|nBxPsAn6qe z>7(86{@?QDR2|3@sl3d4K1H>jxr_Sx%vtPC?JnU|_#wyu#{fEdbd#7M>XpUHYGv8l zqHsT%5}!Jo|41x%BMuFN)Jnpa`%`eRhRvdTe`v#=?M|d}hpsB83>zq1@^C8blh z@J#m9vfdr-Yjz?!xk?Jw!wCrY*y>#alvQ%jnAeD?@JMSkOR-qE%7DVJ)^MOi$;HvE z)+#}TPb(S7^PUgh;oeawp}4m~%`Pn0&}t0p6Xxq&==B()VB5}5bz>my_$2O>`K*+blj|Q%L@o zRyS|RI!Myc6Vtc5H9k0wN0R1?zwL8H$@Z9SBZj0K=R@2LqH25U zq;t9T<9;-s>&i~-dGw1(8%rBbYO_`f%yjT5X#0gXG=8oamAs*tF2b>&U0ZE+umAdP zLNp0@!JYignDABW6n|QES z-nx~;D5l*pE9p}%WHZ+Om@%`k4i+THpa~sv!$JEa2bBglAA=^3`JIw@`|5BWrci){ z(}A8=MKJq)>4Smy(k50foh$AxO6eG?dBmYxlj+Zl&2EeoW;)tDY1J|$=odj0CX#ZG z9*a67R~hevF^Sn`2*GWw{AokA9pBX`ncRYTj6`~OjONylA<+y;w~Q!bhp%0X*VxUn z<+!r@&xD71Q{sQ@Md9^C3`~fceZK|1zMePfxB7$^&op?~?}c8yq2p$WiPNxPwmmr5 z+OkdoD1fH&BA8L4Z&T41Mfs5LqP`fFG8m=a>Utc^30BiI)yS)nNz^IvP*&1v)c>L| zql>tzj*t`x<(RJJbeu~TlyEs12r0eL=XGZhTBnENpy5$|8={7l?NpZ6IL82Oee*a6 z)*e6CK?Ny7>b~()HC2}0%Zd-b5+PYuBow%O>Q0zm{M_JArwZIEr%Ps4I$M z<3#l)b9z1-YurM#Y(?o1hjKdOY#7&uVr!av{Zvw`{&G1FV*gi8ml!K$E=%?- z06P@Mo+C?f^TbL?{*KK3tPOBVdDo#|LbKrmy(Dh+cY669-{FAhm#ozvNegirz3gBaudJL$}2KmJ&}I>I_UQ* zu{b?fq0uu(Bko#keiruq(XQyH?opm5xfcGr5K1CkP<~qTv|2(IRS_`|7F2oUj@H)F z@}L<1^^PBv@@!~~??9aAbfz)l@>|_QDU)2vhQ-rx2z|)s;5b(ynAWfMW#4oHX*ekG zg+!(8qeI%S^(97J)of`rsbBwCF1L-TMCSZZ+`OwXDTHmW0d0i zcuoQ*+pGbU3ibSTKnLV`uCAenz=c=SyHBNMT_?N)1sJ|EgWzQEO9<^n7;7 z27*QHc|7b%8K4H4YIko@mu1bcvfJ#um3-^ks3sPDmmYeUW$=(ZkOd$;#9Jg%Uwu}a3H z8U?nJJ1cJpxMAzEV09b6X+3MJ!6t3DPz$9}sY-ib`M&U}D%(C`1<@I-Foa#@#5>>X z{c^(|!r5J%0SfJr$1qmzw$`pH4K6)H-U+=U7eWz>Ry~It-=#C`&sOk=v}eVgu$!mMiy&>sR*DzG1fC_( zm`68YU)ts{Q+~d0lfc1)k};=f!a=Pzl$~^q>CUtzV%vOXm(1J~zmEO<_YmnKe*=CR zQvKjQH^P+L!a>ni(?@>PrAqnqV!0CbqaT(gG)&_O*Ls6(St3%{dq5$ z-nf5|tsuGIiJi$F0Zs#G0Jj zT0dI6ZhmhO0te+pGpYC?8O`6~$KIvELFclF>>6|HmTUhJ(>CtA7B)Tgx4M-$7fgTD zbFLUdkNZoG6a|=XyTrh*WFG)kOM5vwjrinPdc59yvmYnMQR3)ZFiYyk1UTp@Y2#Fu z`r-{7w4DkE+2_v>*A!TMF&I7tw!Ne7bMjqf(|tvrZFs!+8heXJ6z(o4E8E;`AB6&K zq^{=MmpCmH9C)OszGHxcmRMwe8R8@4e{`5U9CZB~AZGF4zg_?U#MBwTql_Bc6oTp! zwS84>e0%sy6yIFF3pS}N1%1-2M}K4i?$adBRp6l7s>Xp1TsY|K+Pkoi51#XFt;vu- z=YD@S^jxBQ9#+7MEzF!c9^QA!`owg^vW0Na`yG7OFT|3PlrH@MmU*Jg0J{(!rLT`p zT`aJ$Mt$)X4%(4GwAqx&HFynjTZYgKr~ir1nU%$oYFH)gXY|$18~kbH8SG+=~3#@`FMcu2tsB4wc zAEP_(ln_6m?&Q|8^FCAJJR9-6&9V~J9{A7us0%G`lz1JB*gu9SG2qEu{wQFl8YY4e zUQ6F9y$AtqBi*X!h-l`G-y~iZKF}gM3#1UGh3(uo@G9TaVFj@Ly|`5lJuQ3?cmN8K z+&=B=Q|1)9)*9(oRFn{LTcM)}{gtg`{#m!+*!sbAg@2$y`*#qUH+oJs(BH5)=Zp|? zC(9|B=phoNW6N;R!9@8!+xr^%qob;Pd_&piy{xXK>{6%xt_!=32f|`(pU1Kxx9D(? zaUBW48bt3?q&?#=1eS2Xu^d$~`#nJd5HI`ge_^CYG<0R-rU7)O1ai8Gk2-`c}z;#BzGW z_4Lp0B2(&7$pG!{W%t;UF>cb0W|^bKV!S0qY?_ z%Kad_49zHFcST0iCCOJ9uKvQaPSI^|I@nL|rbY(h_GpsHE!X8xKgE9Jesr1pemZoS zZPL?01CTN7Y`^?Di1MDHugBX!o`#sYm?j5Jl8)j5cfwP(d{RY!hwU80g&lcq_jaVxlgIkfI%`S8hmJtY>TKA z*7;hjenVmYE!poa#c9q8D+h(QHXN4LY1PRrzgVUECAa2vN_FA`CUhn6DtP7**tx>L zb1$h5X*YnJkO#;mhIIu1gS3!BTP8+IH{3y2!kX?z=qCso1`d%z-Y6GvpZf3kyW(L`QWIAfO9g zA^5#!+uk(-&YWyi1^0EHV@1MRW1pUtN8ZFBY!qhC-+@YiN!`UQ{gh@$F?9j7WCI#9U5+<}Uc!tDp7j%Iq?qJK!s zcenLk;j68PcnVZf(JA7U-xs!v8N{Rco^vJH2rRQW`n?XR1hEoZ+r7M>@tv0kqz9P9 zkT=T*TRoo{U+EJpad1|aMfdLOKzw7@8gJ+FydrEqO>J3Qc+LMtV(q2)G?%34ti!Ub zQ*v9`u;)U3Z!dBAvbdOsuV{@u#&2IBzj7N6x;aJEfqKysxVS;6&w$G9?B~?ge4dLr z;wf|Kh4QCLDX9JDqC;{)(#oI0WBTQFGT?X1R1e^y-t`fPc$0wx1~_s1%5h!$fc zO)LMBP6vXhEg^{7+SW(1_G|Cl6j)+(JZ^h$&`_!$*hF3Nn*iK@LblmKN?GH)ye>Zzp)HFH6lP*Moy+@ zi3;jO*L4+Y2sEww_Grqp!UK$`yN~lva2uaW*650Mu!jCDq zG*w**^7apn|2}-J82OiIQM4&Th;xz1&m9G-wNe*_6thyEH~p3i+a~ArX(cr5@OV>a z+En%;1v(tZ%Q;!esJeyz#rvku4Zz@VfP;Q;Ii`?wOk4v+U;n&tV#UW@S#e3svMPO> zBa+SO=f2U(yIWezc)9UKTj;kHQ%!iMaLQp|UA-8M8P)VY6t~_*tn95dU3xl^J{eFN!h+{+4+NT;F)hRlU^1mwDyP;5}dsz(IM1)yCCAw^Q4YXG;}lHa}&YbR-rDlB9cGUr3>H+kXKW z<|xZ7kE0J+CcbVNUc)Kdb6Fm$xOEpF!S(y*B$Z*T*W5)5VRBOILMV!3O3$FPmrt(+ z|9E=tu6!o=%@4cNiVp{!eu(gQnag2Dd4b&f3^j2aKvE}Rq#!APgF5WYda0ZPXajwgwJoLapmC~?zRkoJ*WzbCD9+~oG+?xVF?RQ95Wgi3?gCdzq;Pn_*cE?PS)bm3nolQ5Cq>9?gm_?)gHR}kwy%~Bx2q^dvO=6!GD zvrArqWn=+eRBg2n3SP4k%e_0AC9B^k9`|lt1s~m0Y6I>W+$H-69>^((=cY=PS(z z^9|yME25g?H1Eq+Lo=iRA#!bHbW}CQ{Nj}YMLNFP*A=!DlubvIwK+SAFDH*JB4lU) zLUNu2sZZcoV~k=-?Sc{!TVvmJ2$L_456%?M0$uA9UFK8w^7Ap#JV-Pe=u24uHVn+*AeB-CBoosNU`~BzJ$SLl_YnHfWRhE^ zZVT@4{4;=_%a>rzH7B$;B2T2gjH;{SZB~agC!RdLXppu)tl}DQtw@EKpF(V;3fs?k z<;!Hvi(acGH`GOG?r_J)NTE`>jFUnCmH7OR_WXYppUqgaqw~?H_q9Yt3JVHWdP)pi z%F6I*&A~mNkS=gtg{jaf_fo2>Zo>|1_I~sfF8((EEUHJI@pgMB##z3L#%fp0E+!c3>{XYQ=e8nyvP=aZw{9GO5J)99~>N)OA%w2+|bYv zZ=M1NX^+5G@?C>tmTTy8+CV;66~EjXb>y+C6Ukrl82!AUqsn&?br%!1>QuE2desmC z2!3Q8M^pcu%Nv!LB6t_84B)0A%lJo16KTtA3MfGR99%j4C`%i3xbTug1<_rwW9RDK zlqTCAHVw&yb+IE0SIUIF`2)8tFvKp^tG z(?47xL(&#|9yNAw5K)^nm_5kOj)V@V$B!TX0Y#s$fZWV{q7EmxHR+xec5_}dv@Ipk z#%II$Z2a9It1j(fo(7HHYKLas%V0D0kuLQeuy%O?QfEU@!tZ{Ul^)i ziDl5>!9vul`vHuat_&y>Ed3u3DTVHzvhGe+4z^%a{C=0Hyuf&Ewjig-RT3-%0WZqO zdc@+VOybtCgK&V*(2ROT1;&~#n>&}~XY(`R`L?9j_C~fB z2&PvGY`EU4zd{yY9;tDexh_p8lOaLx5G28Kd&&dXNU*97IK7hJa-YU-9ijLm> z5aSWN*pQh&WL*r-!F~ZfsW;QuE9~aupTQ!9)m38-JxNyPkwJ4=DjguO zA=4zAZRQ)f;Mwz7Xl{+OqEeM`rs|6!a@&rvWAy!dyeQo;HMydvr)AM@N=Pe7Q-cyE zU~=M%)n2(eQ0!$n2go%5t45Hz75Um{NiJj;qr&k)NI00tHF9f%!)J``E}KTSiUX?g z%$TV7r!^n)v2v|MK@zME4I$pXW@00iKQfrLRd_6&%g;fFs@&?zqw`D@Pi*@01Ky;% zRhtnOG9CtDy3^}X&rH3U#7+hGZ7(WYyBCY^-x|z+Z;-=K1)KwRH>K8bwu1z!pJ!l#C(7KsyFxa_ z6_eyn_WfF{+20QCHI^uPpgdT`63W zk-X9AtoOz~8ff`qGR3M*O${|hJHDvfF#0KjA=FbtO42p7?jWiu9H#I~ip%%?6mDVR zok8C+YbYSAy*!VU^f)|L3|^z7FfDnzNYpL!Y8;1uw)cyJ_?D>qz+9}t=IDG~tIg`D zy#8KL=&NV>aZ$)4b*>A`vUK0qkAygnzH7L*9#PvhvN|%PF)tTDQI8)A6>zRj=8#hx z8$x6`L#hhgruy>fmgRSMDyRH1U3WA}>~XTpvhD%!WVQan{E`Y5T_F3nk3wC`Z+LVh zrlxgr#745>KW{fBiDFZ{Q=NYY9x(hdy6nH!;zdE$j+|yymww2J(*LJf)`F9N9n>3? zbrF-xeelJ$;|CsR#DlC&sS0J*>@d5zw8&k+r(g3>aw)28W&d(u^LlGTQ8MCB{~h{o z9$*F-GS+&2bTv8j(ArH4A>dJ=^Hyw4rW5_45jcM8lVi8sX0cK3M7)P@bEB>t&(S^n zkcuUb)q_s64Sp=w)tbGY-|hXZ#eBYcBMwg3Gy5Gx?}~Y6;2Px{)8=DEobAmwv*~a_ zYI=e4Z6+eRr_&^$(>VF4^R!G<%yMn-#a#^$y9rU{&Jp&XrXGb*e-%Zy>>YYaB`2Iz zk}n{A)YVQX+ji~G2w#u?f1|K-`M1@u7tbjwr&Y{+8M_F&`%O!BbouoXMWNsA@luP? z+G6!)bkwIA6DFti^_%~=0BkQ2Tf?d9gFX2-77I@H92^z~d|`him^tEZ2chIHF&Lym zzjlAZX58s>J}1w9ggXCD@b|$R%ZL!f(-FGQVa2?{$X%h35W%h7lWvXFsj)ODeJLe2 z^2>t)c6u@f)f3S9X;`C4u2HH*39weOpYR@gEC(cIE(Zxv5N3Id0E!mO5Z?)DV#Xi= zh4Yh0{im{d&Sb)hRD4VCca0+?i&|1Ba|mA#s`|e^{aN=#S=ZsdU`xZ;)g}Hps)frc zWRrZqb0Pb;>L&3LwZKgjI$&*{ro#-ZM)Xre7%e631m;ID2wS?|1rEvb1 z0t557XS4yIkVc*5=@V}!JlN=ZQoB8)Z#daAVM~FJed1i$2mF)X@$YSD_uwFEZVEVP zYvvMoq@f}e%@$Y--yVR4sE(aNdw62lb9na?1+Eyg=k=%o3B@A2$qy4xG4#uC`YhiM zJYCwRomQ2P>k(eYOZ0bqaS9PeAq=lhqWU#;U&sw3{A=NysiPzkJA@`Ahgm00Dv_FY2Gx96qK3r~WTXFFcD7p1>l)SO&h;S_DP z!pgiOC2s@)f@28vFE+fjOS{UfA(?L4%rj1-G4y@P`WC~aLfmAJnlB#ZY72*1x8;L)eVXkIdIX;q(>TrtdDGrmXEzKOl^ z3vUn0G6>y6I0*e+N_D}XMeS7jh75#Km@V8vpAK9fS?5`hzUveO5$>8_baUvpzSfSZ z7|1--Pj0*6PwD@?`P$_0@1L`@Q#3-MPqOsKX7M?)?{#!M((N5xKRVdgurReSt4pLp zl{2(o9kF%M#&PS!=Hv(AZmMXE`YTD-iSjN4XBYqZ7MytbSXy^fV&oWp_;&C3i19N8 z3$iHiPO-FLVJCE@4kWkIn)n6tPOxi42~6Z^?B3U(dqP7^pMX=>!^yLhNp~FBB}z4u zYWo9{Vrg0#U!%)Oeyd2>MJh2`ZxKW;IC-EZY4I>*Pp8|Pg@a%Bso&=q)hbRn1)pTO z%Howrm9=#SC&a1fxu?$xFj>+1Chj8WkiXH70(wppzt`+{VgDC#2UfT zF_86_Uq5;$Dijd6F7T7n*LpXwBe>iJJv(M`#}0Q8egC31a6LP9*j#`%2EDCs~wMY^p2?xEdP3E78w%JUw6_TeC!_o2NUeS~J znHGs2ub9%~X*y4ncx#psKDpu6YLHi?`X-*DMi%9Z&?V>-P@8cz@0LkRR7UrHm#{So z$f=u|IHHRXTzK)?HJ3{nEU)fSKk|}CME3%lS*fVxbMG)k6r&rn>>pfZDMvuou``F& zz)1UkSfwRMWH{yJ1$y}Jpk;oA8m66x_BXQhRKoXqQ}K>es%AY=&O*?L5I0@=dN1VO z@wSjb8h#a~#@Q^J`e}xUuL(+2F1Y#SvXmhs<=(nxRIjDA?Bhq5Q{o=`e!7aAdI^nH z{O_<7_#BP3z!1qlA&}xp>nwnBpua|$#uUUJE=av7KPUXD{FwdMS~-^8?_>bws{!mJP#H4lAcpr= zgFb^_=<^WC!O~=lq3NjLP~P>wBTxXrK>sBI)t%vswEEGQ?r4#4m#-D)O~Z_Z72F1C zuVV}_E|}w@k2zE%OdLX;wIy%P8~+Ga zFAJQ_s5_heswjS$7s0BCh0s@V@D%>%8TjY&PXg9^KVV&Tj8<-{nDK88a^vMuuXjLt&jy_13e<&dzIYdU0XTs7oFker zjx(r>h!e14NZAxJJ<}Md(e#@o52q^~OB2p|Vq5;3pB@w;`xS4Y6W3+4bERe|_CaKa zBZwE)xD4|uXnM+GY)Sl++0U>9!n;jDbV{U$RS;$QDsw4iEb>2KL*h~Z*bzV=mC4wJ zV(JTi1aSE$HrD~DNp}^N&I8sG0+21N9-}&x+xOLCddFa~xu&ZnD-ql@e^5*Mg=OJBU7EN`}}P0{<(jJPoUs5DbLt{jZiU; z#ceg*RL0(2OcdJqzq0iXm@eQf%eO(fs?+v&exru|*yp5MP)&A0N z`DX?6R|TW&Dg~bP!U2r-sVA3=xO*4CwW`2824V}(u<1S)VcC@waM}_}9`|n;_nFTUO(c5ZMpA2j#=vGhBwYF-6@=OKC z+vz+dNmpG{!`k8)G)fa`@}$qPflXvuW6BUik4&cfJH?x-ClImhf4kz8U#@NQ;#AKw z@p?xc3!*qc-83l!Z$wZ1CKsU1JVmY#{sL;Qg1%Gj!S2(cv2fM5Nel@ugsE0V%7A!P zOcF61KyK=y%(k7uL2E!?M^~iz3!}T$R~aN$4crZpyV-+wRA!u_9<-`UwYa@^>T z*y$uSzD1f{*=6}a>kH#e&`3qmv>FT73!9eXgz++4%4()WC&!W}mZQh3AadZu>Mal*VP>15s1MB!+@KIXQX1Pj?s zV20Zk{B28>pvui<@|p1?YxMv2@)vs4OD#!5hHmPOkAcyQ1W~-Upgt|_QfKntlZ*4C zDQ%Go#4yIy92|KBWA3ysUD@J(!xiDmf|4C(+cJjCz!_AW={l_Hqx-14e|!xlp|nbM z*u{ev$=OFKE%&8m??=(IcfOEZBWn-sEA281!WA}%?2Dv-9PcCX-szykH_eS-8b&YC zXDq=iViQ*f1{wVSZ7&tZSD?R^DU<7y)}>55P-t6~|5vQn(1M^qnkeI4TE3f{OzZXBb81r)f6O^(9 z*@l(oe_#K<6A|!#Zv*iEK0`PtEqv3Td7n?uD%5VLt|e_rrcHwrI|P%05>D5M+}5(* zr#BrS*5HPHw<>l$qu^U^ZE#B+e(XB$HmFQD>&8fLwVfsPU^C;w(OIJC)rxXTi~U2WCaTN^lFOpFmO6v*>UBookQ&x=uGXfEKeP`%@|@fCc6^jR?x#vH z&$ekA+O+Ad)4*5RVQ~gYa^d{l@_saUO$9@K`&0hfDKaV${@HaIi3s;4?ZG5 zws+sZtvTTOpk_F>8Ge=tXm!+1*>5Wj&JTx#H)d%h!5|qY<0{@KKiVudh3v%4Y;S)l z|Lj{otfdq^l96%;u+Z)cQ0)}DIZlq5hFfN)RBJ@Z zj{)tiC*$q9C;sg|Mb`$a(tfV-iu5)i3?>pBq*r^59@~;3tKqk03RfaB;Wz6BC$GQf zh5gOfnK8|pk*pOoY~t{3AlSYq&mU;Aa&XLp z_wDDK*CwTjf55!1`mPyUj@v`p+brb^W>ht0fz`q6X(o{xgRF>+16%$nMcCcPRre63Z93)t@$KGm7U3Z{cQZorQ<45RZ!)EcbAQ$X{GQ)ty8_IuXR|XT zLBz}}Q|SSXGpxms)DN5)Db}jZ6TUF9JQ=J-D4ue}&pz-0e>KUTs@5;he6fY>t{d>plq8Jlp%v?W`3${!I0Z+HBTfv5i(* zMeWL>0ox?s3CrGJ*-w5yH>zGAxA)D5wdqS!Kbh!z~fX2xf zv;S04UwiafKY<8FWw-?++uJ(nBc4D={9@4xC!FC)^Gnfvi>8hB&?|FDZ}o_KiKv4}_d zx<+0S4>4=#nqS_<3?z}*(Gg=;S%1bHXLk4YbstKF_22lOOFL;9I5|pvSjhp@vs+Ag z1LPgTXqzp#Z0%2(tvRz062+C21pKF7(sct@jNNxGF=UVD#fvCivNt`J1 zL~(-^tAcvcsF!TyWD01|ndVOTC zAqvK}qAt$8x({)c!BLS~FIHOGIm#`OcFDIvBt1|c3oCrVU1(74@GSuiDF?{al>kU@Ei?KE9g zgOq*bvW@t`BVUnc#@|@q z?5NNeOn{Tkfpc;OAmaj(F6wIrH)#y8QdIdJ`bv%@!tIpfrdKf_gX%GKbT29|a%Orb z#k4(cF2?2)ts1J)Ha;xIR;{5@=CVl0>fi>_e3tiojl#~-kgVKQE$2{9M)m;V4YFUf z!dVrzVeNq`PZ`axu?SLJY7a*VCer@uEk_v@Kxu%qi|!h5SzZCMjb<~IblWquik+m1 zv{~R}-uIYpMK=UTr>hMOQxdT0X{v)kH#?3y*;sOe!D<2hLQ?scR#gVPuleDm!rE2) z!!3&fd$eLkugnF(`7EC%n|i?5p;X=Ifui-}T38>a2)>+IGsY?Er@U=)bCYAAO&lL_ zIio2>js6W3oRRB?p3?j?Dqt%vnpIPwQGPh6Zkc$05Jx7p9CP<0B$Q$q8wZ`KNVGo9 zm&c80?vOecJ2o`7`0UMs0e;BKsCAEAMB0vPK~%ytB)1h)1UklW*G5Kl4Ct*Gzp^o@eV;_Yxu^i(kfJ~i7JNHB!WFAt?#C}1yj3hp z29rj3`LFu`!wU#v(J{ZUk;qI*E&Uh*`Xx?$ZAW3w>XIdh8%tL;3l#5(h5F9D5G-YnLRtm0KSt zO>%&1pGlQ&@R5mUYRQ_HBUrv}STN_tBY+6x14rCic7(KK3F+(FGx){ALKdS<(B!M| zuS>n`918Vde?yNHqxNVR+N#U>T;Z8*PSGzK)6>8NK%PQbT5v(cvU02gSYKe};Eq}x9Y$>enY!Euml z6?NH8{MSpCN=@^x(!yo-bONjb{kazv2O|Eqwi4J%b?|>U^&`nbZS}%9v$Qbpfs%mM!Z zn!8=?GUV5RJ|0!ZC?ut;7s4ZE2K(TgTb6bu=E~_9J*laraL{R0L@;hm#$5*vsJ%In4xqCj+WlR>ps{QnkFbXQRs;w-xmV-ms3%soQ z`?50nGxl82gPP=m`Q@8tk()vKj0`PA&^;CVw`{$W_xO73x$1_rJmHb`r^w*=6n>|^fEXu*LcOpIk;@sW$*`ZAFrN85fELPP%q^? z4Lhz4+y_N&K~azwE*(;E#P{oP@vQaudR}_gDa9M#kbZeft6+~Dh`=s5_KDFxItwx~ zE53G~6H))`^J0DkUsVHQHVyK2zqj3e?tV7Y@>A?m3wqN2bkwe~A4(M65GXXs)B)I7 zS|~}^K0ih4t2#ZQA`vrZ z6Q@o_sXRs5r4<#cy}Zfp2rTS@s(H`it6WApU{K?^@S>o zl=P4?FEi$-9uN|BhB+P@x{;E`adMbt_}Z<|?^-E-@Y_Q%Axe7&x$b`2O9WLlw@R;V zVz_0{N1e?m{Rh|RPJoV#Zbuk*M6=@M=8JgFWEVSnaR?{yhM^|TzjM6Z98ND4?oEO3 zskJWWP`8-6t&t$aF-gaD)lJH@L-E*rkU^cty~8ZP&x*0$W7Z%66TBkU8oOQo^v$Xv z(=w7WRDJrOYp24>ae%hM^273CW*?ENL4UaAfh=Q^t_LL`~3YsaF_{B3^Gkl1u zpP~pvxV#P6z~o(mvQ!ihC5PaI2xGcHDQA%{Uw+VVGEp`E>^mDrsE%?;JJ3(P(}+@p zm<50kOiTGo#6yPoayYzvDheJ68opi8$`D<~o7jw|Bpywsk+>-da(F4{mDBac<)|TQ z*3H$=o$9!cb?zlw;h{3Crvc*QM(3%Y1kY3l{-^?}-zhzE$8&T}Ie*N_=wGy2*>|Xw zu^29VQs(kE5j9RR@!fD!H8hmjJGL8F4PPww*&J#B84cz7L>z||j%Ez^SA6vdXh-2x^7-T^c+{S|HVt1!e z?2_wPB%hv#tjs;>lHruCSLy~hqGvL!toZ_J1ujfSQ&a_^4i^C&?(qR+-{J9dEv>`B zb+uWW(rneRF%29!)wHeRutBA{eO>lJ{gm==-?khv z{Wt>$kSI5i4N($)8_Gwk`tavhjWSoUoYh3|?!+cL=Z& zo2%ZGKG;_93|)_TG&CRgPDW?n*^r(=zfFA*%m0L~COFX({(>E3se28`SGUC-&8swq zdkAopaEWGRhkVIE${x%7m`EbGNG1h zpM!`fOIOb^GqK$%lpqSTVp6zs24cqTkt*WKPH$?h+YEUVf!b_PF8+c|R?^c%$Za3o zE*o34c&KhPrr=;U{Pq2fn}`tx{P%}`M3->pf-s!F``-eeN~>OSbpgrz_H6R-49U_w z3X-Y}7e71{HFjPAX4^XD%LiEG4p>;}GW;=%P2iZEk3?j(J@}msU*8Wi?4o}+lYSG5 zVWOhGH`{z!L6jb&pXQH{N`pxFm$F3pZV3h5R{Go>1NhTvJ~{~i#9)iMt&G~6Fyjei z6o9C(-W3#X6ijTBN5eO;#~jcAna3~Or#zDj-d7YV4b68Sd29N?0M1YTdvtNneG!{t zO(_>IjVK=XdI1`A>(`UU49EC|`A4f=FRuG(eIn<5xx2AMn{yq5KxWfvnlx)D$CbJ& zsVnd@&6&iprEum-sow&f6jJYR-?Jdg9bSg;OT=I4H7hFKElX>5)@9^D%~=MX$$xq} zP}hssutIr0sv-CZpi2c#)*sug_|Lw;S~JRDPZ$*KGC@@*5>1@`I!&LHAEZ<4)r$%I zyVCKBRY)qrKNYsG=y9Wkw|lVXf4EuOK+HbVPV{@a8hd)>9?|s&@4m^z^Y=T33MxN+ zi?;{qLi&vrMyjL#y7OM%4E#VfiJzy`mUseT?3>Yi5xW`(o^zGxD}t4AQ;?lYGgmsD z&fuJnw*R;`$?d`=yTY=+E-}axA=>{v5_Zf4*$xMYuT!Ok#s?^t8DhlEjS5k^+#%Is%#Pn-YssbZNysuEIMO$>2A~Iho$^ zTJbFVB-TE*+i}D*JAD1j3oscBx>RxOKy2en-9qCY_nR40T7p#2SyV4{c91v=Z-g#G!hI9{h%_783?U5|yl5sB0UuXumY)(D*S z4wtaX3E(uW^E#r7@zF(^wpgfTWTsDCJ~oEdH+P~x%4Uqy@e{5{i7e2^zex_>72D31 zh*4oWsmxcM{CcDCKy_tz0pwyaz72_gRaLXv|?cOM3i5q~7+?)66YeoFY9LXk<5;=I!;B5$nP_L3z*-lpO9|pbeBtsf zI5LtLAN~jPyZYVC`Knp)Y=^WhXZ&T70K<==fzI9$KS-VXAdHxf$t&f-6o~go=;YF; zQkZ+>=E)p!sT5#dy!SEjCw6U=1c@mpe4)Wrmkf90(Y3cox4)tPA^Q=Xp(c6%$@tMF1>`=}}A(|T}bA0rFn7BCS)G2Gk);A5@gQM#@ zXBlt__dT-PCBH=;p2klAL0JMki8?nR9KC$#Bdu&AhQ!zvbG0#0{zzaam=ljtkK#f zEfIJCglF$`#HP#*f>KV!Z^M5l9ICtAUABMMiKPtW+{dWOB!rsvVrWBnTM zd5)sTX$PG}(KkP@Qe6G(brrvF)lpU!eG_gBY)Czipe2_&YO;9rpFsB*z)9J!W&Bwu zjWs-6g@XJAPL3^LX=x1DVt;OG-#8z64(m7bup?u`FMn>r^jB*ZgB|q0{ha5k*0Vb+ zSZ?Jf9dpvM1qgd%Ec-Y#0w$VJvyW=JALJ?--3cft;Rw;3O4DCZLE%zuNw;J2jDAP80P!vwKYHU_Jvi-H9$hZuc7>1T zn3!g&MQ@gXNL3p2|7lUv;S|McqKSxXV*j^28=0uxwp>)shq#M*T`r`1JJq|OZkRJB zRTn=fViUb@m99H>{PS0t{EFZkyU7l@l#@Fcl~87W7Le_VXPa~FRc5pFFVOW+T~AYg zx%v#R<}cFAh7nw)bVol(mTj*nl`mDtiN=Iybnnq#@#vfM0e4ZqHDwRTBax{~#t|KV z*PF6EAy0T9eIUIYJWBE{Er=Bg0=dG8kl2Y-#mSaNXui~aIFF&3n3G-Lg(gm}VCRfi zNN<;M0{lNUGc>;^GBCMBch)WcToF@&Xhi3L)Y&)iR$rSXnjn>RKvLf?+xq-g)|0?M zdYME|3Hpi2w1A~3B(Gy1&k}p3;}Y$^+BsO>{P!lpsik^3!ZivzBtW_M36xcz;@~zt}W`HpV{`3y^ZZfSrn(;PQ_bx=G=)>^dt4o0X>e z;7EKmL5b9|iqYAcd-y9gEYUxq^)>b+gm_We+r~v%aQBnBMAu-IZWYgSG(JAP^Pk(j z@>U_Rq0iwOr5tL?}E$UOKAcSb8wmWwTxi+`xPn{*$Xvd91C-5Z^zEoA=; z01&s5>8$Rx8$^;Ah;svdb9gNe5Z|tr_U4wH!11ZUkFEr(d+yiKq#Dw4F70l_hCuE+U|)m#ed$>Uai!Sc}Q`b~^ElH>xKcZTgdM%Y`9pzqn>fR1}Qj&aLwUMIuS7NQ?$yqK9fgd-_ z8_I@!u+Il7)35^ioX~FiMK(R{Wr}eThsVQOj@fS4e<<=kYzLUnY?2$nK z?lW;4SJf)w@Ed=RdF-zMOqdE?0FsDhj&ZMd_T|@)2gOU(e9oK{%XKEVw^t|=hdfh# zF)0npXM#G6HDqd~h8l6tG*5LP&{qSK7x_4<{VA305cL)L zD46y0sSn9lvnni=Khg!Yt6jhJbCce3)gr&^nV}AQ0#z7%)U%3g69a5n^_KUYLM@_5 zfFveI<+E5Aa%=`10enJ}C*Bn_U@zL8Y!2|0XWhJPy7UV)d zBHgjmrXlgI102=F=h*hc06FBXs|BhbMrq{~xK+C$6-DO$o#?%mR+Ixz#rI!L?y(#0 z((VFmsSMobYWc^NKb^LlM|lg_YU0Om{Ps~p8qFwgFNysxzW|51)`dc*krvU#H#{Sr zRyv(?t`a`NW_;@J!y}7$!r7N4OJVu}Is|AQZW~&aMM>Nmw`uW6Z@M-ixAQsLnQI1Y zHeL_X-VA0;F5WiXO7;o+GGxSzVKKH#1pQSuk}}xiV8N4VC*16TSPj!gNPQC&1JXJS zBzvu%UJU+&0wP>1+Gd-(k%FBmHJBt{VB7o7+!G!fIA}^PU@rpsI<}6_8z`v3@M_q) z{l)%N`8H~$r{?iK4@FHhZ&sWvTk1&aAnYBQiYinv`nWuOV6#rmoUMWpBrV2mHcfq9 zS<+XsUbJj0h3X~N-i-9l<)M4zE@)v6_Mb5ITzJ{d1=Ynl2j`e(^fFOu6sd2pi@>e3QrEqtz|0 zB=NRJ^7~33SNJfs`iQ7dh9~v#0GYe z9vje#F6wMPvs9~`YyG|!?TGh@ozskrB5V2uL9Zw_2#RYqpb~V`g$|a@cbqRgU6iYN zwe+Ox+vrW|#LKe{H~x)x{GAR9r3;kH>emEjD%5zu+ibt3UH1EW1fD=0A@BHhD=jup z?4nBXMvHCY;yj%%(`CO>DmFcV*58&?eZQBsrFiJyz_ z=|JzPCaOYWSoHT>O7n*X_gcxE-1cxqt;BXBxt|zUt9qCI%u`j{IwtMkM<#BTJwhn} zul<9>M*>G2NA8cWT3CL1_1E*C=b*lycOpNs!pbkT2c!4iX61h-vNj_xi5DvVoY~Rk zJ^#`%UI~)6zp4KN=%gdOai>uLUEm%Hk=!-T^=CM-&T)PhmZr)}7t*q}Hx7mP!kz(3 zpEq{&@20ozO>{Nz9UhmDGHH)Qjj1L;vlSX|jD-h|>^`?Rb#%er@m>=CvUF(Iixrf! z1_68dgNqFl_pCx-CwdF}qIG znOyYS&kE%k(%WUG{F12{dhH)sOS$9o1Pls&^|Vk&-A zg1%Uw6j5W4%J{*Z)k0i0LpDxe)RTpI% zN`zlv9BVZEs-px5i#V#y>uRIG;e8m^Lgzcs8$F<=G^*0=SL( zjm6e}h)&>Vv+X;IK%!5oa#)KeTr-b|$eBxc1l9?cy~-RI*CfoxD;=F~$-AM$1m?{! z5C~#C;a<6UIt3nf!7fW=D%lt5GgbW4EXA$AMoAqGzlDk^Sl0oJ@hiVI;(ajjP(gNf zi%eDL$R$d4+y*rt4_8mmx^G;jnK}fq=T%;ZaS9L^_BQ_;&K?d=!^P5PS#^7#j7oWU z7jZxM@P#b-4_M&!C+mdd4@%{TVt#(I``ffbX<1Z!{oWcW@&el{O&L(BH7}CPe+d#G z&#yUzlHhMM5=D^T7RX(rO8LPlEn-}7Yi5iH(>W!0gdx6}- z3K7SbAnzfNCVffHtf{#R+CWm9lmaUut zx(9s%g?MO~cz;5Vl?#Tbz3bX2eIyVJx}90FOb46*UxHOdu2X;0R@txBTYj>lse4A* zE*7>PjfW%?LmGHRA6_+zIPFcPS`_P9{|PC7N&Tn;mA{P_Cs>BX^l#^YICJ_11|Qvc z{#&z!=KiZNQ*Y3&_fZ~)#(i}4`vrA!MltpP`FF>63QKY^ZDQ7h1-m#L6(Nsc_;SAWKoYx7;f?6ul0u~&{_C7 zIdg8q)eEAAXC53Y@gJ3$%>RMZ?Efi8LkDfV0{waQYK)1>iJASJk+BB!w1|cEKLEYL B)L{Ss From 1d1237e1a4a58ef9ab1e6e3c26ba590bc54b2693 Mon Sep 17 00:00:00 2001 From: wenxianping <931128603@qq.com> Date: Thu, 11 Jan 2018 16:01:37 +0800 Subject: [PATCH 17/18] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=8F=90=E4=BA=A4?= =?UTF-8?q?=E8=AE=A2=E5=8D=95=E9=AA=8C=E8=AF=81=E7=A0=81=E6=A0=A1=E9=AA=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- init/select_ticket_info.py | 49 ++++++++++++++++++++++++-------------- 1 file changed, 31 insertions(+), 18 deletions(-) diff --git a/init/select_ticket_info.py b/init/select_ticket_info.py index 765cbb2..2f718ad 100644 --- a/init/select_ticket_info.py +++ b/init/select_ticket_info.py @@ -466,32 +466,45 @@ class select: try: for i in range(3): if is_node_code: - print("需要验证码,正在使用自动识别验证码功能") + print("正在使用自动识别验证码功能") + randurl = 'https://kyfw.12306.cn/otn/passcodeNew/checkRandCodeAnsyn' codeimg = 'https://kyfw.12306.cn/otn/passcodeNew/getPassCodeNew?module=passenger&rand=sjrand&%s' % random.random() result = myurllib2.get(codeimg) img_path = './tkcode' open(img_path, 'wb').write(result) - data['randCode'] = DamatuApi(_get_yaml()["damatu"]["uesr"], _get_yaml()["damatu"]["pwd"], + randCode = DamatuApi(_get_yaml()["damatu"]["uesr"], _get_yaml()["damatu"]["pwd"], img_path).main() + randData = { + "randCode": randCode, + "rand": "randp", + "_json_att": None, + "REPEAT_SUBMIT_TOKEN": self.get_token() + } + fresult = json.loads(myurllib2.Post(randurl, randData), encoding='utf8') # 校验验证码是否正确 + checkcode = fresult['data']['msg'] + if checkcode == 'FALSE': + print ("验证码有误,第{}次尝试重试".format(i)) + else: + print("验证码通过,正在提交订单") + data['randCode'] = randCode else: print("不需要验证码") - checkQueueOrderResult = json.loads(myurllib2.Post(checkQueueOrderUrl, data)) - 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'] is True: - print("提交订单成功!") - break - else: - if 'errMsg' in c_data and c_data['errMsg']: - print("提交订单失败,{0},重新识别中".format(c_data['errMsg'])) - else: - print(c_data) - print('订票失败!很抱歉,请重试提交预订功能!') - elif "messages" in checkQueueOrderResult and checkQueueOrderResult["messages"]: - print("提交订单失败,错误信息: " + checkQueueOrderResult["messages"]) + checkQueueOrderResult = json.loads(myurllib2.Post(checkQueueOrderUrl, data)) + 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'] is True: + print("提交订单成功!") + self.queryOrderWaitTime() else: - print("提交订单中,请耐心等待:" + str(checkQueueOrderResult["validateMessages"])) - self.queryOrderWaitTime() + if 'errMsg' in c_data and c_data['errMsg']: + print("提交订单失败,{0}".format(c_data['errMsg'])) + else: + print(c_data) + print('订票失败!很抱歉,请重试提交预订功能!') + elif "messages" in checkQueueOrderResult and checkQueueOrderResult["messages"]: + print("提交订单失败,错误信息: " + checkQueueOrderResult["messages"]) + else: + print("提交订单中,请耐心等待:" + str(checkQueueOrderResult["validateMessages"])) except ValueError: print("接口 {} 无响应".format(checkQueueOrderUrl)) From 27d3c8f216700acd2e8df1116bbdf3a27a7cc737 Mon Sep 17 00:00:00 2001 From: "79277490@qq.com" Date: Thu, 11 Jan 2018 16:17:16 +0800 Subject: [PATCH 18/18] =?UTF-8?q?=E6=9B=B4=E6=94=B9=E9=98=9F=E5=88=97?= =?UTF-8?q?=E5=A4=A7=E5=B0=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- init/select_ticket_info.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/init/select_ticket_info.py b/init/select_ticket_info.py index 2926ba7..0f5ae70 100644 --- a/init/select_ticket_info.py +++ b/init/select_ticket_info.py @@ -33,7 +33,7 @@ class select: self.user_info = "" self.secretStr = "" self.ticket_black_list = dict() - self.submitQueue=Queue.Queue(2) + self.submitQueue=Queue.Queue(15) def get_ticket_info(self): """