From d7c5c7215c5db070492a25098288e2cb7620ec2f Mon Sep 17 00:00:00 2001 From: wenxianping <931128603@qq.com> Date: Sun, 21 Jan 2018 09:12:15 +0800 Subject: [PATCH 01/12] =?UTF-8?q?=E5=AE=9E=E7=8E=B0=20=E6=96=B0=E7=89=88?= =?UTF-8?q?=E7=99=BB=E5=BD=95=E9=80=BB=E8=BE=91=20=E4=BC=98=E5=8C=96=20?= =?UTF-8?q?=E8=AE=A2=E7=A5=A8=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 6 ++++++ config/ticketConf.py | 1 - config/urlConf.py | 1 - init/login.py | 4 +++- init/select_ticket_info.py | 9 ++------- tkcode | Bin 11760 -> 11661 bytes 6 files changed, 11 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index 2c4ac8e..ed17b64 100644 --- a/README.md +++ b/README.md @@ -170,4 +170,10 @@ - 更新请求第三方库 - 优化若干代码,小伙伴尽情的放肆起来 +- 2018.1.21跟新 + - 修复若干bug + - 合并dev + - 恢复之前因为12306改版引起的订票功能 + + diff --git a/config/ticketConf.py b/config/ticketConf.py index f67221d..ea70f22 100644 --- a/config/ticketConf.py +++ b/config/ticketConf.py @@ -1,6 +1,5 @@ # -*- coding: utf8 -*- __author__ = 'MR.wen' - import os import yaml diff --git a/config/urlConf.py b/config/urlConf.py index d2e7651..59c6afd 100644 --- a/config/urlConf.py +++ b/config/urlConf.py @@ -85,5 +85,4 @@ urls = { "req_url": "https://kyfw.12306.cn/otn/queryOrder/initNoComplete", "req_type": "post" } - } \ No newline at end of file diff --git a/init/login.py b/init/login.py index 6fbb34d..c67e265 100644 --- a/init/login.py +++ b/init/login.py @@ -149,7 +149,7 @@ class GoLogin: if messages.find("密码输入错误") is not -1: raise UserPasswordException("{0}".format(messages)) else: - print ("登录失败: {0}".format("".join(tresult))) + print ("登录失败: {0}".format(messages)) print ("尝试重新登陆") return False else: @@ -180,6 +180,8 @@ class GoLogin: :return: """ user, passwd = _get_yaml()["set"]["12306count"][0]["uesr"], _get_yaml()["set"]["12306count"][1]["pwd"] + if not user or not passwd: + raise UserPasswordException("温馨提示: 用户名或者密码为空,请仔细检查!") login_num = 0 while True: self.cookietp() diff --git a/init/select_ticket_info.py b/init/select_ticket_info.py index 8754487..3f73178 100644 --- a/init/select_ticket_info.py +++ b/init/select_ticket_info.py @@ -1,17 +1,14 @@ # -*- coding=utf-8 -*- import json import datetime -import random import re import socket import urllib import sys import time from collections import OrderedDict - from config import urlConf from init import login - from config.emailConf import sendEmail from config.ticketConf import _get_yaml from damatuCode.damatuWeb import DamatuApi @@ -141,7 +138,7 @@ class select: 获取提交车票请求token :return: token """ - initdc_url = self.confUrl["initdc_url"]["req+url"] + initdc_url = self.confUrl["initdc_url"]["req_url"] initdc_result = self.httpClint.send(initdc_url) token_name = re.compile(r"var globalRepeatSubmitToken = '(\S+)'") ticketInfoForPassengerForm_name = re.compile(r'var ticketInfoForPassengerForm=(\{.+\})?') @@ -187,7 +184,7 @@ class select: select_url = self.confUrl["select_url"]["req_url"].format( self.station_date if station_date is None else station_date, from_station, to_station) station_ticket = self.httpClint.send(select_url) - return station_ticket + return json.loads(station_ticket) def submitOrderRequestImplement(self, from_station, to_station,): """ @@ -652,8 +649,6 @@ class select: print(e.message) - - if __name__ == '__main__': login() # a = select('上海', '北京') diff --git a/tkcode b/tkcode index d7eb6d9af360f49606fa45327ec329586336e529..e71efdc8a9813a4a512fb974c981f66cdabe8e5e 100644 GIT binary patch delta 10536 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 x_RA#GVJoOkZ~Utg{P_0?_ Date: Sun, 21 Jan 2018 13:47:38 +0800 Subject: [PATCH 02/12] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E5=A4=9A=E6=97=A5?= =?UTF-8?q?=E6=9C=9F=E6=9F=A5=E8=AF=A2=EF=BC=8C=E8=AF=B7=E4=B8=A5=E6=A0=BC?= =?UTF-8?q?=E6=8C=89=E7=85=A7yaml=E6=A0=BC=E5=BC=8F=E6=B7=BB=E5=8A=A0=20?= =?UTF-8?q?=E5=8D=B3=E5=8F=AF=20=E5=A2=9E=E5=8A=A0=E5=A6=82=E6=9E=9C?= =?UTF-8?q?=E6=8E=92=E9=98=9F=E6=97=B6=E9=97=B4=E8=B6=85=E8=BF=87=E4=B8=80?= =?UTF-8?q?=E5=88=86=E9=92=9F=EF=BC=8C=E8=87=AA=E5=8A=A8=E5=8F=96=E6=B6=88?= =?UTF-8?q?=E8=AE=A2=E5=8D=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 10 ++- config/urlConf.py | 6 ++ init/login.py | 2 +- init/select_ticket_info.py | 132 ++++++++++++++++++++++--------------- myUrllib/httpUtils.py | 20 +++++- tkcode | Bin 11661 -> 12830 bytes 6 files changed, 113 insertions(+), 57 deletions(-) diff --git a/README.md b/README.md index ed17b64..c6d5190 100644 --- a/README.md +++ b/README.md @@ -13,7 +13,10 @@ - 配置yaml文件的时候,需注意空格和遵循yaml语法格式,项目的yaml配置ex: - ticket_config.yaml 配置说明 ``` - #station_date:出发日期,格式ex:2018-01-06 + #station_date:出发日期改为多日期查询,格式ex: + - "2018-02-03" + - "2018-02-04" + - "2018-02-05" #station_trains:过滤车次,格式ex: # - "G1353" # - "G1329" @@ -174,6 +177,11 @@ - 修复若干bug - 合并dev - 恢复之前因为12306改版引起的订票功能 + - 增加派对失败自动取消订单功能 + - 优化接口请求规范 + - 增加多日期查询,请严格按照yaml格式添加 即可 + - 注意:如果多日期查询的话,可能查询时间会比较长 + - 增加如果排队时间超过一分钟,自动取消订单 diff --git a/config/urlConf.py b/config/urlConf.py index 59c6afd..3f4bbf1 100644 --- a/config/urlConf.py +++ b/config/urlConf.py @@ -84,5 +84,11 @@ urls = { "initNoCompleteUrl": { "req_url": "https://kyfw.12306.cn/otn/queryOrder/initNoComplete", "req_type": "post" + }, + "cancelNoCompleteMyOrder": { + "req_url": "https://kyfw.12306.cn/otn/queryOrder/cancelNoCompleteMyOrder", + "req_type": "post" } + + } \ No newline at end of file diff --git a/init/login.py b/init/login.py index c67e265..ce3e94c 100644 --- a/init/login.py +++ b/init/login.py @@ -181,7 +181,7 @@ class GoLogin: """ user, passwd = _get_yaml()["set"]["12306count"][0]["uesr"], _get_yaml()["set"]["12306count"][1]["pwd"] if not user or not passwd: - raise UserPasswordException("温馨提示: 用户名或者密码为空,请仔细检查!") + raise UserPasswordException("温馨提示: 用户名或者密码为空,请仔细检查") login_num = 0 while True: self.cookietp() diff --git a/init/select_ticket_info.py b/init/select_ticket_info.py index 3f73178..85a8da0 100644 --- a/init/select_ticket_info.py +++ b/init/select_ticket_info.py @@ -26,7 +26,7 @@ sys.setdefaultencoding('utf-8') class select: def __init__(self): - self.from_station, self.to_station, self.station_date, self._station_seat, self.is_more_ticket, self.ticke_peoples, self.select_refresh_interval, self.station_trains, self.expect_refresh_interval, self.ticket_black_list_time = self.get_ticket_info() + self.from_station, self.to_station, self.station_dates, self._station_seat, self.is_more_ticket, self.ticke_peoples, self.select_refresh_interval, self.station_trains, self.expect_refresh_interval, self.ticket_black_list_time = self.get_ticket_info() self.order_request_params = {} # 订单提交时的参数 self.ticketInfoForPassengerForm = {} # 初始化当前页面参数 self.current_seats = {} # 席别信息 @@ -47,7 +47,7 @@ class select: ticket_info_config = _get_yaml() from_station = ticket_info_config["set"]["from_station"].encode("utf8") to_station = ticket_info_config["set"]["to_station"].encode("utf8") - station_date = ticket_info_config["set"]["station_date"].encode("utf8") + station_dates = ticket_info_config["set"]["station_dates"] set_type = ticket_info_config["set"]["set_type"] is_more_ticket = ticket_info_config["set"]["is_more_ticket"] ticke_peoples = ticket_info_config["set"]["ticke_peoples"] @@ -60,7 +60,7 @@ class select: ( from_station, to_station, - station_date, + station_dates, ",".join(set_type), is_more_ticket, ",".join(ticke_peoples), @@ -70,7 +70,7 @@ class select: ticket_black_list_time, ) print "*"*20 - return from_station, to_station, station_date, set_type, is_more_ticket, ticke_peoples, select_refresh_interval, station_trains, expect_refresh_interval, ticket_black_list_time + return from_station, to_station, station_dates, set_type, is_more_ticket, ticke_peoples, select_refresh_interval, station_trains, expect_refresh_interval, ticket_black_list_time def get_order_request_params(self): return self.order_request_params @@ -182,7 +182,7 @@ class select: def submitOrderRequestFunc(self, from_station, to_station, station_date=None): select_url = self.confUrl["select_url"]["req_url"].format( - self.station_date if station_date is None else station_date, from_station, to_station) + station_date, from_station, to_station) station_ticket = self.httpClint.send(select_url) return json.loads(station_ticket) @@ -201,44 +201,45 @@ class select: } 参照station_seat()方法 :return: """ - station_ticket = self.submitOrderRequestFunc(from_station, to_station) - value = station_ticket['data'] - if not value: - print ('{0}-{1} 车次坐席查询为空...'.format(self.from_station, self.to_station)) - else: - if value['result']: - for i in value['result']: - ticket_info = i.split('|') - if ticket_info[11] == "Y" and ticket_info[1].encode("utf8") == "预订": # 筛选未在开始时间内的车次 - for j in range(len(self._station_seat)): - is_ticket_pass = ticket_info[self.station_seat(self._station_seat[j].encode("utf8"))] - # print self._station_seat[j] - if is_ticket_pass != '' and is_ticket_pass != '无' and ticket_info[3] in self.station_trains and is_ticket_pass != '*': # 过滤有效目标车次 - # 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"))]) - 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 ('正在尝试提交订票...') - # self.submitOrderRequestFunc(from_station, to_station, self.time()) - self.submit_station() - self.getPassengerTicketStr(self._station_seat[j].encode("utf8")) - self.getRepeatSubmitToken() - if not self.user_info: # 修改每次都调用用户接口导致用户接口不能用 - 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) + station_tickets = [self.submitOrderRequestFunc(from_station, to_station, station_date) for station_date in self.station_dates] + for station_ticket in station_tickets: + value = station_ticket['data'] + if not value: + print ('{0}-{1} 车次坐席查询为空...'.format(self.from_station, self.to_station)) else: - print "车次配置信息有误,或者返回数据异常,请检查 {}".format(station_ticket) + if value['result']: + for i in value['result']: + ticket_info = i.split('|') + if ticket_info[11] == "Y" and ticket_info[1].encode("utf8") == "预订": # 筛选未在开始时间内的车次 + for j in range(len(self._station_seat)): + is_ticket_pass = ticket_info[self.station_seat(self._station_seat[j].encode("utf8"))] + # print self._station_seat[j] + if is_ticket_pass != '' and is_ticket_pass != '无' and ticket_info[3] in self.station_trains and is_ticket_pass != '*': # 过滤有效目标车次 + # 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"))]) + 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 ('正在尝试提交订票...') + # self.submitOrderRequestFunc(from_station, to_station, self.time()) + self.submit_station() + self.getPassengerTicketStr(self._station_seat[j].encode("utf8")) + self.getRepeatSubmitToken() + if not self.user_info: # 修改每次都调用用户接口导致用户接口不能用 + 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) + else: + print "车次配置信息有误,或者返回数据异常,请检查 {}".format(station_ticket) def check_user(self): """ @@ -513,6 +514,9 @@ class select: num += 1 if num > 30: print("超出排队时间,自动放弃,正在重新刷票") + order_id = self.queryMyOrderNoComplete() # 排队失败,自动取消排队订单 + if order_id: + self.cancelNoCompleteMyOrder(order_id) break try: data = {"random": _random, "tourFlag": "dc"} @@ -523,8 +527,8 @@ class select: if queryOrderWaitTimeResult: if "status" in queryOrderWaitTimeResult and queryOrderWaitTimeResult["status"]: if "orderId" in queryOrderWaitTimeResult["data"] and queryOrderWaitTimeResult["data"]["orderId"] is not None: - sendEmail("恭喜您订票成功,订单号为:{0}, 请立即打开浏览器登录12306,访问‘未完成订单’,在30分钟内完成支付!".format(queryOrderWaitTimeResult["data"]["orderId"])) - raise ticketIsExitsException("恭喜您订票成功,订单号为:{0}, 请立即打开浏览器登录12306,访问‘未完成订单’,在30分钟内完成支付!".format(queryOrderWaitTimeResult["data"]["orderId"])) + sendEmail("恭喜您订票成功,订单号为:{0}, 请立即打开浏览器登录12306,访问‘未完成订单’,在30分钟内完成支付!".format(queryOrderWaitTimeResult["data"]["orderId"])) + raise ticketIsExitsException("恭喜您订票成功,订单号为:{0}, 请立即打开浏览器登录12306,访问‘未完成订单’,在30分钟内完成支付!".format(queryOrderWaitTimeResult["data"]["orderId"])) elif "msg" in queryOrderWaitTimeResult["data"] and queryOrderWaitTimeResult["data"]["msg"]: print queryOrderWaitTimeResult["data"]["msg"] break @@ -538,11 +542,7 @@ class select: print("第{}次排队中,请耐心等待".format(num)) else: print("排队中") - time.sleep(1) - order_id = self.queryMyOrderNoComplete() # 尝试查看订单列表,如果有订单,则判断成功,不过一般可能性不大 - if order_id: - sendEmail("恭喜您订票成功,订单号为:{0}, 请立即打开浏览器登录12306,访问‘未完成订单’,在30分钟内完成支付!".format(order_id)) - raise ticketIsExitsException("恭喜您订票成功,订单号为:{0}, 请立即打开浏览器登录12306,访问‘未完成订单’,在30分钟内完成支付!".format(order_id)) + time.sleep(2) else: print(ticketNumOutException("订单提交失败!,正在重新刷票")) @@ -554,7 +554,7 @@ class select: """ self.initNoComplete() queryMyOrderNoCompleteUrl = self.confUrl["queryMyOrderNoCompleteUrl"]["req_url"] - data = {"_json_att": None} + data = {"_json_att": ""} try: queryMyOrderNoCompleteResult = self.httpClint.send(queryMyOrderNoCompleteUrl, data) except ValueError: @@ -581,10 +581,31 @@ class select: 获取订单前需要进入订单列表页,获取订单列表页session :return: """ + self.httpClint.set_cookies(acw_tc="AQAAAEnFJnekLwwAtGHjZZCr79B6dpXk", current_captcha_type="Z") initNoCompleteUrl = self.confUrl["initNoCompleteUrl"]["req_url"] - data = {"_json_att": None} + data = {"_json_att": ""} self.httpClint.send(initNoCompleteUrl, data) + def cancelNoCompleteMyOrder(self, sequence_no): + """ + 取消订单 + :param sequence_no: 订单编号 + :return: + """ + cancelNoCompleteMyOrderUrl = self.confUrl["cancelNoCompleteMyOrder"]["req_url"] + cancelNoCompleteMyOrderData = { + "sequence_no": sequence_no, + "cancel_flag": "cancel_order", + "_json_att": "" + } + cancelNoCompleteMyOrderResult = self.httpClint.send(cancelNoCompleteMyOrderUrl, cancelNoCompleteMyOrderData) + if "data" in cancelNoCompleteMyOrderResult and "existError" in cancelNoCompleteMyOrderResult["data"] and cancelNoCompleteMyOrderResult["data"]["existError"] == "N": + print("排队超时,已为您自动取消订单,订单编号: {0}".format(sequence_no)) + time.sleep(2) + return True + else: + print("排队超时,取消订单失败, 订单号{0}".format(sequence_no)) + # def call_submit_ticket(self, function_name=None): # """ # 订票失败回调方法,默认执行submitOrderRequest() @@ -598,7 +619,10 @@ class select: # self.submitOrderRequest() def call_login(self): - """登录回调方法""" + """ + 登录回调方法 + :return: + """ login = GoLogin(self.httpClint, self.confUrl) login.go_login() @@ -611,7 +635,7 @@ class select: try: num += 1 if "user_time" in self.is_check_user and (datetime.datetime.now() - self.is_check_user["user_time"]).seconds/60 > 10: - # 十分钟调用一次检查用户是否登录 + # 十分钟检查一次用户是否登录 self.check_user() time.sleep(self.select_refresh_interval) if time.strftime('%H:%M:%S', time.localtime(time.time())) > "23:00:00": @@ -620,7 +644,7 @@ class select: self.call_login() start_time = datetime.datetime.now() self.submitOrderRequestImplement(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, ",".join(self.station_dates), ",".join(self.station_trains), (datetime.datetime.now()-start_time).microseconds/1000) except PassengerUserException as e: print e.message break diff --git a/myUrllib/httpUtils.py b/myUrllib/httpUtils.py index 45a9c13..0330e48 100644 --- a/myUrllib/httpUtils.py +++ b/myUrllib/httpUtils.py @@ -57,6 +57,10 @@ class HTTPClient(object): self._s.headers.update(headers) return self + def resetHeaders(self): + self._s.headers.clear() + self._s.headers.update(self._set_header()) + def getHeadersHost(self): return self._s.headers["Host"] @@ -73,16 +77,30 @@ class HTTPClient(object): def send(self, url, data=None, **kwargs): """send request to url.If response 200,return response, else return None.""" - method = "post"if data else "get" + if data: + method = "post" + self.setHeaders({"Content-Length": "{0}".format(len(data))}) + else: + method = "get" + self.resetHeaders() response = self._s.request(method=method, url=url, data=data, **kwargs) + # print "url: {0} 返回码: {1}, 返回码type: {2}".format(url, response.status_code, type(response.status_code)) + # print "response.content" + response.content try: + if not response.content: + response = self._s.request(method=method, + url=url, + data=data, + **kwargs) if response.content: return json.loads(response.content) if method == "post" else response.content else: return "" + except requests.exceptions.ConnectionError as e: + print e.message except ValueError as e: if e.message == "No JSON object could be decoded": print("12306接口无响应,正在重试") diff --git a/tkcode b/tkcode index e71efdc8a9813a4a512fb974c981f66cdabe8e5e..d731d5b587b66174677742fd64f38ca35dad94e1 100644 GIT binary patch delta 11666 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 delta 10584 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 From b37aadfc9360a7aaaac5a0b9abe571a17ce2c4ad Mon Sep 17 00:00:00 2001 From: wenxianping <931128603@qq.com> Date: Sun, 21 Jan 2018 20:35:56 +0800 Subject: [PATCH 03/12] yaml fix --- config/ticket_config.yaml | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/config/ticket_config.yaml b/config/ticket_config.yaml index 1da5d17..cbaf541 100644 --- a/config/ticket_config.yaml +++ b/config/ticket_config.yaml @@ -39,9 +39,12 @@ set: - station_date: "2018-02-12" + station_dates: + - "2018-01-27" +# - "2018-02-04" +# - "2018-02-05" station_trains: - - "G1377" + - "G1303" # - "K4300" # - "K5226" # - "K7772" @@ -51,19 +54,19 @@ set: # - "G1373" # - "G1363" # - "G4933" - from_station: "昆山" - to_station: "长沙" + from_station: "上海" + to_station: "广州" set_type: - "二等座" is_more_ticket: True ticke_peoples: - - "宋倩倩" + - "文贤平" # - "彭淑杰" 12306count: # - uesr: "" # - pwd: "apple1995" - - uesr: "" - - pwd: "songyu1995" + - uesr: "@qq.com" + - pwd: "QWERTY" select_refresh_interval: 0.1 expect_refresh_interval: 0.3 From b36595aeadb807ed2abdeb8113c5bfb6a417dcc2 Mon Sep 17 00:00:00 2001 From: wenxianping <931128603@qq.com> Date: Mon, 22 Jan 2018 22:01:57 +0800 Subject: [PATCH 04/12] =?UTF-8?q?1=E3=80=81=E4=BF=AE=E6=94=B9=E7=99=BB?= =?UTF-8?q?=E5=BD=95=E6=8E=A5=E5=8F=A3=E9=80=BB=E8=BE=91=EF=BC=8C=E6=9A=82?= =?UTF-8?q?=E5=AE=9A=E5=8A=9E=E6=B3=95=202=E3=80=81=E4=BF=AE=E6=94=B9?= =?UTF-8?q?=E9=82=AE=E7=AE=B1554=20bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config/emailConf.py | 2 +- init/login.py | 17 +++++++++++------ tkcode | Bin 12830 -> 10904 bytes 3 files changed, 12 insertions(+), 7 deletions(-) diff --git a/config/emailConf.py b/config/emailConf.py index 97025b6..442ed01 100644 --- a/config/emailConf.py +++ b/config/emailConf.py @@ -23,7 +23,7 @@ def sendEmail(msg): host = email_conf["email_conf"]["host"] s = "{0}".format(msg) - msg = MIMEText(s, 'text', 'utf-8') # 中文需参数‘utf-8’,单字节字符不需要 + msg = MIMEText(s, 'plain', 'utf-8') # 中文需参数‘utf-8’,单字节字符不需要 msg['Subject'] = Header(subject, 'utf-8') msg['From'] = sender msg['To'] = receiver diff --git a/init/login.py b/init/login.py index ce3e94c..473cd19 100644 --- a/init/login.py +++ b/init/login.py @@ -166,11 +166,16 @@ class GoLogin: uamauthclientUrl = self.urlConf["uamauthclient"]["req_url"] data = {"tk": uamtk} uamauthclientResult = self.httpClint.send(uamauthclientUrl, data) - if "result_code" in uamauthclientResult and uamauthclientResult["result_code"] == 0: - print("欢迎 {} 登录".format(uamauthclientResult["username"])) - return True + if uamauthclientResult: + if "result_code" in uamauthclientResult and uamauthclientResult["result_code"] == 0: + print("欢迎 {} 登录".format(uamauthclientResult["username"])) + return True + else: + return False else: - return False + self.httpClint.send(uamauthclientUrl, data) + url = self.urlConf["getUserInfo"]["req_url"] + self.httpClint.send(url) def go_login(self): """ @@ -192,8 +197,8 @@ class GoLogin: if self.codeCheck(): uamtk = self.baseLogin(user, passwd) if uamtk: - if self.getUserName(uamtk): - break + self.getUserName(uamtk) + break def logout(self): url = 'https://kyfw.12306.cn/otn/login/loginOut' diff --git a/tkcode b/tkcode index d731d5b587b66174677742fd64f38ca35dad94e1..bc670e4ac6a23fa2d4bf58a467b76f520caa94b6 100644 GIT binary patch delta 9788 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 DwHa@1 delta 11721 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
K6K}MXJ7y?5U}07$O)izpWDP{MbWYxSJo=o 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 From d2148925250a9e259c1eb9312342f9366a859735 Mon Sep 17 00:00:00 2001 From: wenxianping <931128603@qq.com> Date: Tue, 23 Jan 2018 12:59:47 +0800 Subject: [PATCH 05/12] =?UTF-8?q?1=E3=80=81=E4=BF=AE=E6=94=B9=E4=B9=98?= =?UTF-8?q?=E8=BD=A6=E4=BA=BA=E5=A6=82=E6=9E=9C=E6=9C=AA=E8=AE=BE=E7=BD=AE?= =?UTF-8?q?=E5=A5=BD=EF=BC=8C=E8=BF=94=E5=9B=9E=E9=BB=98=E8=AE=A4=E5=80=BC?= =?UTF-8?q?=E6=9C=89=E8=AF=AF=202=E3=80=81=E4=BC=98=E5=8C=96=E7=99=BB?= =?UTF-8?q?=E5=BD=95=E5=9B=9E=E8=B0=83=EF=BC=8C=E8=AE=BE=E7=BD=AE=E4=B8=BA?= =?UTF-8?q?=E4=BA=94=E5=88=86=E9=92=9F=E4=B8=80=E6=AC=A1=203=E3=80=81?= =?UTF-8?q?=E4=BF=AE=E6=94=B9type=E4=B8=BAnull=E7=9A=84=E9=97=AE=E9=A2=98?= =?UTF-8?q?=204=E3=80=81=E5=A2=9E=E5=8A=A0=E8=AF=B7=E6=B1=82=E8=B6=85?= =?UTF-8?q?=E6=97=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- init/select_ticket_info.py | 31 ++++++++++++++++++------------- myUrllib/httpUtils.py | 20 ++++++++++++-------- tkcode | Bin 10904 -> 12822 bytes 3 files changed, 30 insertions(+), 21 deletions(-) diff --git a/init/select_ticket_info.py b/init/select_ticket_info.py index 85a8da0..655f4e5 100644 --- a/init/select_ticket_info.py +++ b/init/select_ticket_info.py @@ -170,7 +170,7 @@ class select: 'normal_passengers']: normal_passengers = jsonData['data']['normal_passengers'] _normal_passenger = [normal_passengers[i] for i in range(len(normal_passengers))if normal_passengers[i]["passenger_name"] in self.ticke_peoples] - return _normal_passenger if _normal_passenger else normal_passengers[0] # 如果配置乘车人没有在账号,则默认返回第一个用户 + return _normal_passenger if _normal_passenger else [normal_passengers[0]] # 如果配置乘车人没有在账号,则默认返回第一个用户 else: if 'data' in jsonData and 'exMsg' in jsonData['data'] and jsonData['data']['exMsg']: print(jsonData['data']['exMsg']) @@ -246,20 +246,21 @@ class select: 检查用户是否达到订票条件 :return: """ - check_user_url = self.confUrl["check_user_url"]["req_url"] - data = dict(_json_att=None) - check_user = self.httpClint.send(check_user_url, data) - check_user_flag = check_user['data']['flag'] - if check_user_flag is True: - return True + # check_user_url = self.confUrl["check_user_url"]["req_url"] + # data = dict(_json_att=None) + # check_user = self.httpClint.send(check_user_url, data) + # check_user_flag = check_user['data']['flag'] + is_login = self.call_login(auth=True) + if "result_code" in is_login and is_login["result_code"] == 0: + self.is_check_user["user_time"] = datetime.datetime.now() else: - if check_user['messages']: - print ('用户检查失败:%s,可能未登录,可能session已经失效' % check_user['messages'][0]) + if "result_message" in is_login and is_login["result_message"]: + print ('用户检查失败:%s,可能未登录,可能session已经失效' % is_login["result_message"]) print ('正在尝试重新登录') self.call_login() self.is_check_user["user_time"] = datetime.datetime.now() else: - print ('用户检查失败: %s,可能未登录,可能session已经失效' % check_user) + print ('用户检查失败: %s,可能未登录,可能session已经失效' % is_login) print ('正在尝试重新登录') self.call_login() self.is_check_user["user_time"] = datetime.datetime.now() @@ -618,23 +619,27 @@ class select: # else: # self.submitOrderRequest() - def call_login(self): + def call_login(self, auth=False): """ 登录回调方法 :return: """ login = GoLogin(self.httpClint, self.confUrl) - login.go_login() + if auth: + return login.auth() + else: + login.go_login() def main(self): self.call_login() from_station, to_station = self.station_table(self.from_station, self.to_station) # if self.leftTicketLog(from_station, to_station): + self.check_user() num = 1 while 1: try: num += 1 - if "user_time" in self.is_check_user and (datetime.datetime.now() - self.is_check_user["user_time"]).seconds/60 > 10: + if "user_time" in self.is_check_user and (datetime.datetime.now() - self.is_check_user["user_time"]).seconds/60 > 5: # 十分钟检查一次用户是否登录 self.check_user() time.sleep(self.select_refresh_interval) diff --git a/myUrllib/httpUtils.py b/myUrllib/httpUtils.py index 0330e48..0149160 100644 --- a/myUrllib/httpUtils.py +++ b/myUrllib/httpUtils.py @@ -77,6 +77,7 @@ class HTTPClient(object): def send(self, url, data=None, **kwargs): """send request to url.If response 200,return response, else return None.""" + error_data = {"code": 99999, "data": ""} if data: method = "post" self.setHeaders({"Content-Length": "{0}".format(len(data))}) @@ -84,31 +85,34 @@ class HTTPClient(object): method = "get" self.resetHeaders() response = self._s.request(method=method, + timeout=10, url=url, data=data, **kwargs) - # print "url: {0} 返回码: {1}, 返回码type: {2}".format(url, response.status_code, type(response.status_code)) - # print "response.content" + response.content try: if not response.content: response = self._s.request(method=method, + timeout=10, url=url, data=data, **kwargs) if response.content: return json.loads(response.content) if method == "post" else response.content else: - return "" + return error_data + except requests.exceptions.Timeout as e: + print e.message + return error_data except requests.exceptions.ConnectionError as e: print e.message + return error_data except ValueError as e: if e.message == "No JSON object could be decoded": print("12306接口无响应,正在重试") + return error_data else: print(e.message) - except KeyError as e: - print(e.message) - except TypeError as e: - print(e.message) + return error_data except socket.error as e: - print(e.message) \ No newline at end of file + print(e.message) + return error_data \ No newline at end of file diff --git a/tkcode b/tkcode index bc670e4ac6a23fa2d4bf58a467b76f520caa94b6..b0cac8e3959c757e9e7c5a6b50a390d084fbf61c 100644 GIT binary patch delta 11750 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 delta 9816 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 XRZj_0DDaago`#d+Hvouv9Gw3Jwp4)_ From 34456df15140dc7602a16b30d3e45df8ec2777e9 Mon Sep 17 00:00:00 2001 From: wenxianping <931128603@qq.com> Date: Tue, 23 Jan 2018 17:48:09 +0800 Subject: [PATCH 06/12] =?UTF-8?q?=E5=85=88=E5=8F=91=E4=B8=80beta=E7=89=88?= =?UTF-8?q?=E6=9C=AC=20=E8=A7=A3=E5=86=B3=E8=BF=94=E5=9B=9E=E4=B8=BA?= =?UTF-8?q?=E7=A9=BA=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- myUrllib/httpUtils.py | 53 ++++++++++++++++++------------------------ tkcode | Bin 12822 -> 12933 bytes 2 files changed, 22 insertions(+), 31 deletions(-) diff --git a/myUrllib/httpUtils.py b/myUrllib/httpUtils.py index 0149160..259950f 100644 --- a/myUrllib/httpUtils.py +++ b/myUrllib/httpUtils.py @@ -2,6 +2,7 @@ import datetime import json import socket +from time import sleep import requests @@ -77,6 +78,7 @@ class HTTPClient(object): def send(self, url, data=None, **kwargs): """send request to url.If response 200,return response, else return None.""" + allow_redirects = False error_data = {"code": 99999, "data": ""} if data: method = "post" @@ -84,35 +86,24 @@ class HTTPClient(object): else: method = "get" self.resetHeaders() - response = self._s.request(method=method, - timeout=10, - url=url, - data=data, - **kwargs) - try: - if not response.content: - response = self._s.request(method=method, - timeout=10, - url=url, - data=data, - **kwargs) - if response.content: - return json.loads(response.content) if method == "post" else response.content + for i in range(10): + response = self._s.request(method=method, + timeout=10, + url=url, + data=data, + allow_redirects=allow_redirects, + **kwargs) + if response.status_code == 200: + try: + if response.content: + return json.loads(response.content) if method == "post" else response.content + else: + return error_data + except (requests.exceptions.Timeout, requests.exceptions.ReadTimeout, requests.exceptions.ConnectionError) as e: + print e.message + return error_data + except socket.error as e: + print(e.message) + return error_data else: - return error_data - except requests.exceptions.Timeout as e: - print e.message - return error_data - except requests.exceptions.ConnectionError as e: - print e.message - return error_data - except ValueError as e: - if e.message == "No JSON object could be decoded": - print("12306接口无响应,正在重试") - return error_data - else: - print(e.message) - return error_data - except socket.error as e: - print(e.message) - return error_data \ No newline at end of file + sleep(0.1) diff --git a/tkcode b/tkcode index b0cac8e3959c757e9e7c5a6b50a390d084fbf61c..c668f83d9757952ecd9541f9b1fe15842e82709c 100644 GIT binary patch delta 11861 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�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 b3lWGyo1KxIQNWO$go}u;4RrI9knn#2-jjdP delta 11750 zcmb_?Wl&t*((Vvs5<(yl2rda4EVxU6z~JsqfZ!e+vXPJw!ptBqkl^kxA-KD1aCaC6 zcNy$*e%y1uTi;i8>sH+#yQ-`9>a|z*UaQyBPj{Ggyw&e7Sild2Pil92l{cwi^a76z z&B;cayvsWR<(PLni{%aU{solv3#{n#r{iVS)wZRUx&s*#uuVpoDzV3bvEFyjXAs>< zWa6ZfS3G5_g*8VOko2AV-eoSerdz2bA zF*BS2N#U6=10XZmk=td9Qp{$KFLCO}sR{m@FBfG>-egyf8LlUyv~?L^VTRz#snkm` ziK10;-Pz44l?khwTBG_}=0~#n5y50~pwgArt_k`p-p&w(8(F5ffU4`#{dn7`LB3Ts zpYyZINQ)oO=aFvnZjn|R!6Wvx#7@gK)gg|w!656nR)Sv zY>!?ij&h;iubMdtsT)dfo3W;nZPCgURb`&$s=uRuL-)I5u^X!m42o62En*2|Ov zLu1*z_laM&{&dt^tI^>JwM6i{VtpAAVcqJ}M4fQddr)w@R zqyRoR^G^eJ3PDXNQ*Z0wK@Y)2ys3?`${+sz*RN-xk&}_-EUlc`IGis4a&ZN!)6#?g z%=CXw>d}5)2aC<`#7;rXmS$OOidi!DfQZ~ugFN%9M ztKz{IrP4KS{*Sr;#d3wBA|BM>SYoobVe-zU;v%)&tkGkRk`kxoBtp3)rGf3|+}%#~ z%_0c5l{cjU+*x)x8A?fVRWJIoLo|6$u!VMdyJS60V=RY{9#$;h$L=bvVYj1_3x-+hg4*8FClv66HfcgwZ9W*U-(u%heji* zg4B)(On>er?%tpzk+Wulz-6J>zoj$_f*tfR$L7zk#e0=iXE%YH=9iYz^<$ha`v~1W z0iag?gOWeTqOlzroqG#aN_VC9@5?}I%T1@|2GR8xX`PTizX%3Hz~rcIp#u}O|Ir(U za;&U9>j*=g&26o+kpNoeuW$FKlpDLEUF+|9dJ`15L*A#j2BLMXo5MVx7G>LF zq4}hx$Ba3E9R)YHGqPEU>=?G1lk9s?njOG@4_eLtFLGhzSABgWRMihB2b!L#R8^%H z<1xMr=!wK{|MSm&lAj;&Z~On_2~c9he^&thwf)lnUo`&zDggh}qW=3QSRUE43Wr{) zY$S7`v@PxOgzdNjaaL~K-ce}lSi{UE?m?RhcNJv02XwS)mm}DTY&=pzwGoWJ{wZ4z zojYQx_%*=Sukv~GlO16C<6amYB}(U5YXKvdMXYKPh=~_sCE}Y^ z5)Hd~unVB4Ypis7^yrxj=#!s=Gj_Tl9&xAmR(^pb8+-XXVO~&8S!?yD&L7Btwb(gK z$^OFv>j^~EJ*fM3NX?QBfWD+2R?2KBG%?cz-$@I~pm+hOj>u5KCeWjJLVLE*+!dsJ zhGy$dGn$Y-Dlq+Y4@%v;Jy<(yma|j;_4yLF2l?`C?wg#o8Fj z`bb}f8nO+Q1m1&!-`?@9tOC?Fc9OGGH}{~i{(BJglNg(c^6j5p{}PgwEVD_TtZT#T zd(b1=8+*B_N@wmOGhkWfVHmAWVEY_rceREo1^=F<@ZD6?J*Xw&9z+4Xkt&8IHr|8G zuC9Qi0w1rse+rrWD@m4BR;eB3A?IBgaP-5AT*>gtOkkZip8$BrX?9~D_+wwfV+)rh zvy7b;8h(XwUNoWD{!{8a{b_|3brsytRqQNt3m1A1dPUZ}!0+hEuhYDCCwZYF;A;(Y zZPcmrdKjofq-Jvb8Q%`dh7o5c`H~MKOMZckbLe>0f9<6QMd>C3Oq@-$JK-W;f;`&M zxSPNKipITG7YHX|__NkbMg^-KCQkZ2T3^=V)4xhRkz2r#`^)vb>ipM9X+WjZa7zmw zLElr$GIo3}&_dC28f|BBoh=$V&a4OJZQ>D_55jlF5ONDqM9#ZKiCJnim20OCX8csz z2vf-mbHt3a0hNL`rb?_9P*Z*qdCuRtc%CD$qRQ}!fyb?w!eDWN{4j}+r>U;aF5M436$j^|p(K>N; zO#2KVh^}V&_L=*|H0i4#@@~VEqsm)&gWcmdPYUb~7g5Jj>ufKAD}R9Gn~Lo z$;rp$f@*rWy7y*qtn&2;?z*6UMQl9}>FTA}^ksyQP_VDp2$YBl4#8I~v3I`?yt2 z6!V~15Ro>Lo?85B-P|(SyO^z-l)KzlccVnTsJKr<0m*=mgz@;(@c5qo9?FqFQJ4k_ zMk5Sqe&iSy%?|Ap{5bVBh>PR?O%>3nrq+%!4LuT-JcQ1zA!es&FWRSKd`LB8_C=?& z<#n|Btsisuf?bj1U0~;1H7yh^#iwg1r0u1G(<|uOIFWS!I0jWHd_ecKP)McL!Scyi z-3BC8PE`kxcqX4-O&z9^(TP`;@D>Q#J_ ztTKV|g$vA1l|URPZr zmNyRRhhwyR{@kfN_aHQ;9)QPmn**zrb)VluFJ_$cnSe&$bBX?)yaZ~198&PbAzTx3 zTzc}4Wt;S&Jue|!jJ@cs>Qny59Tj2j#BMuFhq*@fTnn;a92Ke=2{aV9*g2!&)r;5c zz%{?tQPmIclFNX03vSpkIo4t1;V#M7$ulrh$yU3dAYxksU{Bit40n0ngm`&N7))6F z5efdf$y8Y3zJ6wD0cZ{L)*e>qHje&ma$?F9P1z{8>s2KmEA@*h`m2=vn;g$eGd&!99OMtA7SJ>FJ$V+#k2&nV$;pr1~IyFFlV)#FQSPW<#+j zEKO^0IYHYkUKZo9lx|ls3@vu=M?&Iy)h@_8pAvt61#?0Z!+ETDE=K8Et$H!XGjVYd zfcMoZ!s4Tu!z zkH>EcThdH11DaD=|G&hj*4ssKtW)2cfZd<5|s&6MJn4BHde-lzlU*5 z*+uR_GudC|^^N#gd24vzfQ8Rm?mV~eK~!QV%eTUGajOJ{atv16FZ%vT+b~tiU>v8I z0Lt0%NoXyL9_6?<9Qtkr*6IDeu}&ouV>Tb_(V*0Ty5j&F$=}d=UeqV!&ZZE4Cjl{O zw(Ps zrkwuVRxWhTSAT`PCi}>p?K?EWJG_dUI95BBI@vY5RYy{Tr=z{`8(;Xw!+1aBFO-9k zry|v{SZVpDgF2K7^Dji>>QkQGY;wX&5$LE`HFvvMs-n9Br3^Oawi@joh5fni%LH~K z`zetx-mZhMxDDnT8vbR>9shepZw9pQ!!L5j2E`T!jrX(qaFgc@tcZ^Xq<``!au3*5nTM?I~ zEG}&ty_o7E4al)VM5aN){CQqA`E2AxYSvcX zDdOX0*x{wU9TNh`&Yhc}%>6DWw(Cs;MVZQy#q?$?y#Gp0T(v=N4xtuWr@@zBPjwhT zD0CUp>U`-ctPq?kXO9bHNy=A}$=6@746r#k%$6W1!#p9`r@=i+mSC*97Tcg7Uxk{= z$CWqAV~L<)u7UWUE7#BxKc_@=ZYD2yuF``yqqM2Bs)d2;bgOIc61A_1)_dJ>q8&?; z3L*tDcx+6cy2qFsvt;mTNx^tb;-9~%0jRE0iqC(q|6bn`_?k8XxSsqzWT$z0zANOj zGo6WkzM)qX>n=%*65pt%R91cO26KwTs9XNQdmS%MU@_=QN|e*0o4UBYY6a$;93oyT z{X2#lKV1io9r_07HeN=Ti1+)~+=!sZlx+ADFvSE#Ux#eHYWq3+2KVbuyAul55S`Xl zsZt!~ZW4GMY)aWSu?4M-HnrB%)m^9z*2DD+;ocTT>v3}?d5~1)5xq2Su(IMgFhLw6 zLC>FBg{FGM#wKnnLXc!XY;dWk-DDx2uuvqDWnqxq;4!zg1;oooh-VI5R-#Hr5viucEjeJ{&8m{P5S zilu;W{}|aZUa>F39>4m=5PR`W@!*cfz{t#pj_olgt*trw@McV4+M2?Z5Arm`xYn*zfox`;8R+^|@A(=LW z`Os0szPD80P?n*90pY=AXJR(!R^C4?9i|TCF`T5Pyc@1OdKsOEn!VBczA@iXm#`Ln5aK+V9&~)|K@8xg*;Qo{-_G z%K4ws$1YZADOanNq3Up&GnvDR+1KLbv*o`fAs=}QQ>Ogky?LL8G9I#mD;{CD5exDH zCXWevc-BGs7$eD|QC!{P3dN0*%JD-_oYwv+65;Fo^-IT9NYg(yc(fdmb*!oH-DUmj zdw3KMrsuG`uMj_i{}(>qzCdq|?R(auVJC;`4LWyHa`J9kgkc|4HDy_;HXxlwHhMwX z%Buc32ACQq63CWRe}q#@lQ{Wjz`JV;C|(Y8#E%e7KJ?gwZKfybG)(O3sa3nj_Y zKgQ+auJER>8S?0ImveBjtv=>i_ZCqjSh7Q#eRHz(jZk6zWhijn&5VgD&LwnnG-#h& zo+kmS1EHVG5i~*0N?)SI^|Z>%{>0BfW}=D}YkJARNV;VzJXl)d=u=$T@DCKRA}9#caZRKCzdwssNv zn>djsUhMXhQURd_jMOP_|B)&HzNisz1s`?V8R*Z;29nIi>xJT%&J1IF-L6G?gzj8U z>5;Y!nm*5zq^{e;!n4b2;=KoP1b*94uDv8IT!d`Q`)uo(sqO9pdxojHq$be47pu<( z#|fMns%vVhTjF{+ri7>nhrvsezgB^8Ub{uwy7>LkNn4YE-0%+hz)?L!rQH_@~Kj%bcL**ioTX}Ft#gt*mpFR7?u24}3J@pLXLW~i5I1ZnN7p_{q>R2c~Ov6CSVw;%XImSe?FRWn7E{k{*kT{jxc7G^1ONsPrxmCdF~~87v)uA zXK9IrLwvj)W3LSolGQJ17pq{%-x9;x|V>Ci^X>JHg{7hLofj4ZKE1K%w5SX3Ej~#Q% zB_3fqFj=e{Gpk;;xp>nriG+09cr<@`_^Omx2j4M9fAuB)(ygD8*^{j*!}{&`st=TT z8xf*d%;ULUcX7W-Y2%)FQ>`a?&HU&j{*XXCFl5#pV=SA|GC9Tb?jB^PQA?sg@8EXw zh;1l-M_XvA2$)9$h2NTQ9yMBaP`o|g3o*RS>X~DS^%`8jAnSsZct9VrmX-JLv9&g{f$1+BtA zfWw%tn-i`Mv@06x9#CELt2B#5y z4_Zl>D=y`@2UQ99{{7>8E#MX%d5d0y?;fOGCA!^%T<<}5bH>y5t_s&$3c{bnS}u`B zEzf{J*FgDM$#cW$QBNl&y)xf9jYgF}jxE;CHR3_%r6YGkzW1PCMfadL_n_OVstS0B z*^HN(bAZ(5e(b=)IlC7oZ2(&LB#hG5M$&%r+fT!J)A=1*^FY;`&&WZ7&ET{ovM#oT zCZ-vVgRd3_oLN;c(F*T)9qDu@i=ln6X(ccOIW+5=TpgEd;)*7VH2bhKm3(kPbpP|Q=b$VUA`U~vduYqx?l!) zkqyU7gjv$vc@FkUgy&Omd{nst+d<1x8`nDh*#Zbh7cJ=*v#gLw#@?s+V3e9m2n9eX z-M@+WsqpG1ckOV=cqB{c6z~(-(0yC5CV+4#Fzv)koR=?d1$>DL*On-KZe-0SD%fn# zo>!gB4ZF~?nqOgBMuwgojWzli24Ic~{0@{o_TzKoiN2~OQB?~fw^+X{)Rx^s*woX; zM$BlX@%NlZD|z(n7e5W_ixX|~fC9adXAB-_9fpuKH6mKZw(0>ZP401+Psy32{}@LqDL4$y&eOf5F}2>$q)AOBJ(TXkZiPyn*71{SqAys zuVNu(vK~pR*E`L2r2!Jr`_h)%0rec^>JGLPU*u<6(Anp97CUVne|?8A*EcG8}v#pi}w zp?$Z>Iwipg#k`b)rRQ93zk^cv!qZlv}ho_ZfAsO-ry7f8lnrD&aNRBd`!+KxB~@IQhB2`mo3w zt$3tg?2r+TukXPo4Qu0o9{fdxU;@L7n2=?}`U1RcZL*Bi%pWvnFJU$vr=1jcCC^SA zToGGeAgmSKf-LbQ6j7mQa7Iu*>uXu(+Lh(BI)Cv4hJ03N;vnFtcddBy=DGwaBq`0? zdJm$f$3i!{i%f(AwN)QT8KTn=mZ#LW~;%I!T#WIstnuoUnS*6H{s zD#cvEeYs_@XmROjbu1&9| z*!h{43L$`#JLv$FlS5ZqzVXYF;7>oGpQiyyM>X}!UfRfxWP}7y(2A>_K;1twv}gZu z@dkaWXX5l(Kb*P*J-@JE?=fu`7U>mbkjv=|q9cFG)mAEXI!rHY>Q8`YmNOB;ZdbU= zO3g4%%D#LOwSa~-e^Wd}U~LaN6o%=EBCVw;xB=+KI+e@QT0Qu3KX+S@x85H+jTr;` z{J#d``9GN$VWSSVaAO>;kc!q~HVe-}=-Bz2Rm8PBEzxpUl}; z#Y<29-I;!hx0A3wzEVUc$AH&N(a_H4X*`YL-4--NdFAfPNuK1nxUM_8Zt%K6=v)VO*r+`M2EDrLj%A>w?k&JMRsXTv=a1_qhWe^m@*x)KR1@I_8 zZ+D~QnX9n0NluT!pLZhLs0tn@@=WV|-i|$yva#;qMpW_L^_9*SE=O$jbsS->ku|#I zNORwHip6r@yq;*2Vh0D1UW|0aBaAS0?v!rYyh{5S+u4n&h|F<9XO7celaG3KUaW>y z_(KGkE|d^uw;g>s=UM7M*|8JJ9e~#Sj^SbawhNE%(x*S7nfpD$-9O(g(3=m5Q-nO=~NbL8sB?nV852X>{#7n|LlYAdrtM_zEF+y;797ufer^?c=5 zzLJHR%D@$0 z9`rtBX%g$m=qs;2(P)qki=2^~j>Rfpe#n@dXf?+cB zW<`T{K45bxcNN#xD{}QDb)!ZSCP>@X@M_MS&S@@)`|fk|P<4)qlCImT8&U4~2fxpi zN6e7%3jZRqitBFQSaYJxFhJ9fNQQ`eN+Mkklk6jiHA;SXeC_lUWdOSeab3B$PlZOr zSw|Cpi4LL*hKZaFerm&|qzN?qQ*cBRdw8Hax^LyM^DRQDB0vU{Fm5ii0drU@c=|&l z|L4jRiM^jzPKfAax5VvJ0?O@K<-bpy8SAP7a9|(IFyVCzkg*&~O(1p=sY*+nS!*cX z6cIAIDcW!AY~l1*g`(%%IAQe7cBcnTDmr|DwQ{4*cuq_+OMxYZegaZJ^HanaiN~-6!{ZE z*CVCg?M7MWE!^cRmI|=V-WVTvFz71EzY}Y(3|e0YpdMw@Kb4;AP(AXFOqtn9_JH42 zuPj@Z3n~`nVV7;G_rKD_b@xwoTIqlGVc36qLDt4o;KQOjgZdLZ;>fl1b&ol*#ecma$E@I&qx zrV@@*jOj;UGEHwvXm-u?s@Gy&uP?jZ4BCVZ+A9|72>4Nx{Hb%z8GiN`r4-@GNM%zJ z_-g&B;yuXwC_7WF{&ED9l{`m3%a=N&FtSV>bWz};Z_45512LozVgLAW@dQz*%#b`j zQQ$;EeezaeWk8{+%F6`TbCJ)Ac?rSvk!S3Fen+rI^c0u@!5*VPU*5A`UM`@(Tq{2K zN|lX(KA`2ua*ygD62j|-}Fk?JBL?zWdAy0gOrJ~ww}v4pi+Y4 zvs-t7E&d1=&2Yq-h2K^{4pT?6MZ&V6?c(k}Evr?IZ?O(Ta`Z6sE>!&jh1cd_U5Jok zasw%q8goBFSR9838~4lCs6P*=VROKHWPS5 z{RzmaYuAQs*f>oQVYgDW^R%C-dLmbeO@6?I@c4*MxV1$c^W{V1kS~30F^Mn-eu3_n zlp(DaKZP+(X5P7+!QmvNG`*zlcb%ICoL;sYW!1kI@|MBT+q2Y&Xxl&JrXT6;`?diY z0aXQIW&{`ow=hV2$m;n{U&S)i3*#wV{oJS(W|n+AMc(;IqsfRFlbTIms>C47FnNxs z;X5AQK~y16hi9i9#d_s}x=|~GhTs9=x8}jf;7ix;L)uOghfhU@KP#<#6FODiU&T|n z*J4Q3L|KO3unpf{n3}rF$#?k(z84{lLec1IvMboX}ez?QWda2x|B_w4GIqHXWsJ|%(+5s2`iw}4v z+DPGn?G*w}F$^bSSJJLXD&XjoZ}*^gBqhcK9*f`FzC6U4v=s3=Ejwa2n%DE_@q*30 zr(`X-ypf-J!Qz7-1PsWD!LqEF!t)rr!aLgz8AtA9h*v4F*S1yF`K@~gF_rzs3y7KA z7&-k`a`ow}sh!ld(I$E>;0KJ!Vc?;C3z_vY!Y?*1)(zsGkNb}1m zy`|q=M_Zy!J6X9m>`h=-vO@gperwwoqqVcE+%xnTzr}mE?c(cz^^rvgUiSmV_i>w4 z;&w+O@csJ^IvjT{eJ|?r1AXt=O#O~A#iW0t$T*)qSABf3#)n!vA}WoEZM@SJgBNy3 zSHX3(qAx$jKg6C%=kG;xJAUq_MppE$+GpUA$;c(wK!?5PmByZ4lF&6A?ZdBs)YQt9 zCHd&llN;`4gh&Sfz}PNLQDnWt+a@^4G@`Va*pcc z{w?vBR%rMLH%oVy@?(Z$$C_gyprK+f3$f+hE@2wpr3lbnx!4^ZjPw+~tNfhtV;?uM zk+`@*QY^_?rR-EgmPgg0YaRNM3gaF``*iAdvJ}iCs9FhZHL=47Mpwy(4<7c(Lm=U= zl!#O8ik=><^mWQTA$A5Iyjm7qo4Y|zo|UE#Y1fgG3A1p$yD+^6X{5Ca6{0@+GHCba zxoCFci^SkSR_#sV^Gie$G*QgBhjl%XLaaU#&4$s;;AFy7)`ritHBAezmD8IILfHgq z_wdpti-9z}4{tgB3v{LfFE?W8k2v6?FyJ)@O{Bl6jAO1s4vZg6?kp_clv|`$)R3`O zZXgrf%MERx15-*Ai?`U1RFANi^t~it$bZb)f%94Nhck~v^1o0F+H0bR}din#MHOe*fkDi30{+b$zpz zqkF`eI9vS0thHW0 z1YE<%4*3PTK8iN`h(6+yee;EN!wkOP!;2mxd>py{EC$}eb!$J{yQx%T1HO8OO8*BO=E8KS)f=~i0%xG8_87#)cusR$?BlE$4V zC9OS>S&Tk$#CZCJd9*pYY zkFA7|h}M0k7H8vRi?#G68EpH~zV8fS7CRcImNfI*pIhnrZNpOCLyU)6oqkFVY*thp ze5sNT7?j>LSSp~#wpQXu+2erq{Ynw)8Zk^R$*p&yg1@QdiAUl_8hn>jOqC?Czhi2E zgiOjij^7;&Y}IbdpCQ!7#2B;foN1o2RAaQ0%mcheZe7vO@-raDxTtpPPqxEp1<1+n zq0F+ll}21i0@Rz2Fq4zo=?i`UAvjNKXsB?vjGoGOHC@M=qCVof2X$f=ntQ?TL2?{k zBq_zH-`le$gI{)jmeRBM42eIcNk6&NwBPQkV9LJv1=dZW)@`M&SxMdZ{=U%7Dbjm#j#MLUjQlDP} z1v}M;3f@i}rOCw<3f3mMQqjlh;tHtLP=qn2#t#=6F}c?%LV`^2OpAMvF1S)fU5+aY zrKOi1@YF9xLzeh)iN6i?sS?$fuxIt~4BE+}?o5NsAdMvIei{e4h({aXQFCv-tEeIz zGmZ$aEw6`SN;2P8$EFJqJHS@`xwW3kEw!=mftsY~tT3+va2=z3e_oYcYLBbGWV=nc zZ61Y}1J!7q2$n|#<@caUw04J;=HGWzQ{iGHc@6_7Ax;P~%OTmJeeM(d+eQM+L?pZ| zNAiT!^dW_UtKAJXQbgnkb41#F%MMQ8zNU53op)sR9(3;MHMIh5;BB)RH?&m``Rgm{ZMo#u>0P1e z$$*Ah6fpZg)5hfz=T^;(2z7frNEwK-O~={GauSIEsWhD?*^R4Xdi||Rkp&4l;U`Uz zck^wtJffw)4MdE_?%sp;KF5g@V;GcRJ`z0i|4{xmfGx+K=gC`kN2DuvorATFgxV+PZWSlMJ!$Xag Date: Tue, 23 Jan 2018 17:58:17 +0800 Subject: [PATCH 07/12] fix --- myUrllib/httpUtils.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/myUrllib/httpUtils.py b/myUrllib/httpUtils.py index 259950f..356b0b4 100644 --- a/myUrllib/httpUtils.py +++ b/myUrllib/httpUtils.py @@ -79,7 +79,7 @@ class HTTPClient(object): def send(self, url, data=None, **kwargs): """send request to url.If response 200,return response, else return None.""" allow_redirects = False - error_data = {"code": 99999, "data": ""} + error_data = {"code": 99999, "message": "重试次数达到上限"} if data: method = "post" self.setHeaders({"Content-Length": "{0}".format(len(data))}) @@ -107,3 +107,4 @@ class HTTPClient(object): return error_data else: sleep(0.1) + return error_data From 829ec1163e50fb60a1121c910be34ce717394616 Mon Sep 17 00:00:00 2001 From: wenxianping <931128603@qq.com> Date: Tue, 23 Jan 2018 21:29:06 +0800 Subject: [PATCH 08/12] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E8=AF=B7=E6=B1=82?= =?UTF-8?q?=E8=B6=85=E6=97=B6=E9=97=AE=E9=A2=98=20=E4=BF=AE=E6=94=B9?= =?UTF-8?q?=E6=A3=80=E6=9F=A5=E7=99=BB=E5=BD=95=E5=BF=83=E8=B7=B3=E6=96=B9?= =?UTF-8?q?=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- init/select_ticket_info.py | 20 +++++++++---------- myUrllib/httpUtils.py | 38 ++++++++++++++++++------------------- tkcode | Bin 12933 -> 11842 bytes 3 files changed, 27 insertions(+), 31 deletions(-) diff --git a/init/select_ticket_info.py b/init/select_ticket_info.py index 655f4e5..396ab3f 100644 --- a/init/select_ticket_info.py +++ b/init/select_ticket_info.py @@ -246,21 +246,20 @@ class select: 检查用户是否达到订票条件 :return: """ - # check_user_url = self.confUrl["check_user_url"]["req_url"] - # data = dict(_json_att=None) - # check_user = self.httpClint.send(check_user_url, data) - # check_user_flag = check_user['data']['flag'] - is_login = self.call_login(auth=True) - if "result_code" in is_login and is_login["result_code"] == 0: + check_user_url = self.confUrl["check_user_url"]["req_url"] + data = {"_json_att": ""} + check_user = self.httpClint.send(check_user_url, data) + check_user_flag = check_user['data']['flag'] + if check_user_flag is True: self.is_check_user["user_time"] = datetime.datetime.now() else: - if "result_message" in is_login and is_login["result_message"]: - print ('用户检查失败:%s,可能未登录,可能session已经失效' % is_login["result_message"]) + if check_user['messages']: + print ('用户检查失败:%s,可能未登录,可能session已经失效' % check_user['messages'][0]) print ('正在尝试重新登录') self.call_login() self.is_check_user["user_time"] = datetime.datetime.now() else: - print ('用户检查失败: %s,可能未登录,可能session已经失效' % is_login) + print ('用户检查失败: %s,可能未登录,可能session已经失效' % check_user) print ('正在尝试重新登录') self.call_login() self.is_check_user["user_time"] = datetime.datetime.now() @@ -633,14 +632,13 @@ class select: def main(self): self.call_login() from_station, to_station = self.station_table(self.from_station, self.to_station) - # if self.leftTicketLog(from_station, to_station): self.check_user() num = 1 while 1: try: num += 1 if "user_time" in self.is_check_user and (datetime.datetime.now() - self.is_check_user["user_time"]).seconds/60 > 5: - # 十分钟检查一次用户是否登录 + # 5分钟检查一次用户是否登录 self.check_user() time.sleep(self.select_refresh_interval) if time.strftime('%H:%M:%S', time.localtime(time.time())) > "23:00:00": diff --git a/myUrllib/httpUtils.py b/myUrllib/httpUtils.py index 356b0b4..befe7e8 100644 --- a/myUrllib/httpUtils.py +++ b/myUrllib/httpUtils.py @@ -87,24 +87,22 @@ class HTTPClient(object): method = "get" self.resetHeaders() for i in range(10): - response = self._s.request(method=method, - timeout=10, - url=url, - data=data, - allow_redirects=allow_redirects, - **kwargs) - if response.status_code == 200: - try: - if response.content: - return json.loads(response.content) if method == "post" else response.content - else: - return error_data - except (requests.exceptions.Timeout, requests.exceptions.ReadTimeout, requests.exceptions.ConnectionError) as e: - print e.message - return error_data - except socket.error as e: - print(e.message) - return error_data - else: - sleep(0.1) + try: + response = self._s.request(method=method, + timeout=10, + url=url, + data=data, + allow_redirects=allow_redirects, + **kwargs) + if response.status_code == 200: + if response.content: + return json.loads(response.content) if method == "post" else response.content + else: + return error_data + else: + sleep(0.1) + except (requests.exceptions.Timeout, requests.exceptions.ReadTimeout, requests.exceptions.ConnectionError): + pass + except socket.error: + pass return error_data diff --git a/tkcode b/tkcode index c668f83d9757952ecd9541f9b1fe15842e82709c..d703deebedc53b50d43de9dd76bc18bd2167def1 100644 GIT binary patch delta 10080 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 XK6>rV^eBS(H5&_QD+oPHK=8i+kQLrb delta 11093 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 OE+W2m(A{qWg8v3_KJG;T From 0b3d04ace4aa0702d5dd66060478f75cfcc13438 Mon Sep 17 00:00:00 2001 From: wenxianping <931128603@qq.com> Date: Wed, 24 Jan 2018 10:06:25 +0800 Subject: [PATCH 09/12] =?UTF-8?q?1=E3=80=81=E5=A2=9E=E5=8A=A0=E8=8B=A5?= =?UTF-8?q?=E5=BF=AB=E6=89=93=E7=A0=81=202=E3=80=81=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E6=8F=90=E7=A4=BA=E8=AF=AD=203=E3=80=81=E4=BF=AE=E6=94=B9?= =?UTF-8?q?=E8=8B=A5=E5=B9=B2bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 6 ++++ config/ticket_config.yaml | 13 +++++---- damatuCode/damatuWeb.py | 13 ++++----- damatuCode/ruokuai.py | 55 +++++++++++++++++++++++++++++++++++++ init/login.py | 45 ++++++++++++++++++++++-------- init/select_ticket_info.py | 17 ++++++------ tkcode | Bin 11842 -> 14673 bytes 7 files changed, 115 insertions(+), 34 deletions(-) create mode 100644 damatuCode/ruokuai.py diff --git a/README.md b/README.md index c6d5190..691990e 100644 --- a/README.md +++ b/README.md @@ -183,5 +183,11 @@ - 注意:如果多日期查询的话,可能查询时间会比较长 - 增加如果排队时间超过一分钟,自动取消订单 +- 2018.1.23更新 + - 增加若快平台打码,yaml新增字段aotu_code_type,1=打码兔,2=若快 若快注册地址:http://www.ruokuai.com/client/index?6726 + - 修改is_aotu_code字段为全部是否自动打码字段,也就是说字段为rue,则全部自动打码,为False全部手动打码,包括提交订单,注意centOs不可设置手动打码 + - 修复bug + - 优化抢票功能 + diff --git a/config/ticket_config.yaml b/config/ticket_config.yaml index cbaf541..a2fc223 100644 --- a/config/ticket_config.yaml +++ b/config/ticket_config.yaml @@ -22,6 +22,7 @@ #ticke_peoples: 乘客 #damatu:打码兔账号,用于自动登录 #is_aotu_code是否自动打码,如果选择Ture,则调用打码兔打码,默认不使用打码兔 +#aotu_code_type 1为打码兔,2为若快 #is_email: 是否需要邮件通知 ex: True or False 切记,邮箱加完一定到config目录下测试emailConf功能是否正常 #邮箱配置 列举163 @@ -41,10 +42,11 @@ set: station_dates: - "2018-01-27" -# - "2018-02-04" -# - "2018-02-05" +# - "2018-01-28" +# - "2018-02-10" +# - "2018-02-09" station_trains: - - "G1303" + - "G2365" # - "K4300" # - "K5226" # - "K7772" @@ -55,7 +57,7 @@ set: # - "G1363" # - "G4933" from_station: "上海" - to_station: "广州" + to_station: "邵阳" set_type: - "二等座" is_more_ticket: True @@ -72,11 +74,12 @@ select_refresh_interval: 0.1 expect_refresh_interval: 0.3 ticket_black_list_time: 3 is_aotu_code: False +aotu_code_type: 2 #enable_proxy: False damatu: uesr: "" - pwd: "wen1995" + pwd: "qazWSX1995" email_conf: is_email: False diff --git a/damatuCode/damatuWeb.py b/damatuCode/damatuWeb.py index 5069799..e166b90 100644 --- a/damatuCode/damatuWeb.py +++ b/damatuCode/damatuWeb.py @@ -22,7 +22,7 @@ class DamatuApi(): KEY = 'ca9507e17e8d5ddf7c57cd18d8d33010' HOST = 'http://api.dama2.com:7766/app/' - def __init__(self, username, password, file_path): + def __init__(self, username, password, file_path=None): self.username = username self.password = password self.file_path = file_path @@ -108,13 +108,10 @@ class DamatuApi(): return jres['ret'] def main(self): - balance = self.getBalance() - if int(balance) > 40: - result = self.decode(287) - img_code = result.replace('|', ',') if not isinstance(result, int) else "" - return img_code - else: - raise balanceException('余额不足,当前余额为: {}'.format(balance)) + result = self.decode(287) + img_code = result.replace('|', ',') if not isinstance(result, int) else "" + print("验证码识别坐标为{0}".format(img_code)) + return img_code # # 调用类型实例: # # 1.实例化类型 参数是打码兔用户账号和密码 diff --git a/damatuCode/ruokuai.py b/damatuCode/ruokuai.py new file mode 100644 index 0000000..c1e4be7 --- /dev/null +++ b/damatuCode/ruokuai.py @@ -0,0 +1,55 @@ +# coding:utf-8 +import requests +from hashlib import md5 + + +class RClient(object): + + def __init__(self, username, password): + self.username = username + self.password = md5(password).hexdigest() + self.soft_id = '96061' + self.soft_key = '6facb9da7bb645ad9c4a229464b2cf89' + self.base_params = { + 'username': self.username, + 'password': self.password, + 'softid': self.soft_id, + 'softkey': self.soft_key, + } + self.headers = { + 'Connection': 'Keep-Alive', + 'Expect': '100-continue', + 'User-Agent': 'ben', + } + + def rk_create(self, im, im_type, timeout=60): + """ + im: 图片字节 + im_type: 题目类型 + """ + params = { + 'typeid': im_type, + 'timeout': timeout, + } + params.update(self.base_params) + files = {'image': ('a.jpg', im)} + r = requests.post('http://api.ruokuai.com/create.json', data=params, files=files, headers=self.headers) + return r.json() + + def rk_report_error(self, im_id): + """ + im_id:报错题目的ID + """ + params = { + 'id': im_id, + } + params.update(self.base_params) + r = requests.post('http://api.ruokuai.com/reporterror.json', data=params, headers=self.headers) + return r.json() + + +if __name__ == '__main__': + rc = RClient('931128603', 'qazWSX1995',) + im = open('tkcode', 'rb').read() + print rc.rk_create(im, 6113) + diff --git a/init/login.py b/init/login.py index 473cd19..38d5aba 100644 --- a/init/login.py +++ b/init/login.py @@ -9,15 +9,19 @@ from time import sleep from config.ticketConf import _get_yaml from PIL import Image from damatuCode.damatuWeb import DamatuApi +from damatuCode.ruokuai import RClient from myException.UserPasswordException import UserPasswordException +from myException.balanceException import balanceException from myUrllib import myurllib2 class GoLogin: - def __init__(self, httpClint, urlConf): + def __init__(self, httpClint, urlConf, is_aotu_code, aotu_code_type): self.httpClint = httpClint self.randCode = "" self.urlConf = urlConf + self.is_aotu_code = is_aotu_code + self.aotu_code_type = aotu_code_type def cookietp(self): print("正在获取cookie") @@ -28,7 +32,7 @@ class GoLogin: # for index, c in enumerate(myurllib2.cookiejar): # stoidinput(c) - def readImg(self): + def readImg(self, code_url): """ 增加手动打码,只是登录接口,完全不用担心提交订单效率 思路 @@ -38,28 +42,39 @@ class GoLogin: :return: """ print ("下载验证码...") - codeimgUrl = self.urlConf["getCodeImg"]["req_url"] + codeimgUrl = code_url img_path = './tkcode' result = self.httpClint.send(codeimgUrl) try: open(img_path, 'wb').write(result) - if _get_yaml()["is_aotu_code"]: - self.randCode = DamatuApi(_get_yaml()["damatu"]["uesr"], _get_yaml()["damatu"]["pwd"], img_path).main() + if self.is_aotu_code: + if self.aotu_code_type == 1: + return DamatuApi(_get_yaml()["damatu"]["uesr"], _get_yaml()["damatu"]["pwd"], img_path).main() + elif self.aotu_code_type == 2: + rc = RClient(_get_yaml()["damatu"]["uesr"], _get_yaml()["damatu"]["pwd"]) + im = open('./tkcode', 'rb').read() + Result = rc.rk_create(im, 6113) + if "Result" in Result: + return self.codexy(Ofset=",".join(list(Result["Result"])), is_raw_input=False) + else: + if "Error" in Result and Result["Error"]: + print Result["Error"] + return "" else: img = Image.open('./tkcode') img.show() - self.codexy() + return self.codexy() except OSError as e: print (e) - pass + return "" - def codexy(self): + def codexy(self, Ofset=None, is_raw_input=True): """ 获取验证码 :return: str """ - - Ofset = raw_input("请输入验证码: ") + if is_raw_input: + Ofset = raw_input("请输入验证码: ") select = Ofset.split(',') post = [] offsetsX = 0 # 选择的答案的left值,通过浏览器点击8个小图的中点得到的,这样基本没问题 @@ -93,7 +108,9 @@ class GoLogin: pass post.append(offsetsX) post.append(offsetsY) - self.randCode = str(post).replace(']', '').replace('[', '').replace("'", '').replace(' ', '') + randCode = str(post).replace(']', '').replace('[', '').replace("'", '').replace(' ', '') + print("验证码识别坐标为{0}".format(randCode)) + return randCode def auth(self): """认证""" @@ -184,6 +201,10 @@ class GoLogin: :param passwd: 密码 :return: """ + if self.is_aotu_code and self.aotu_code_type == 1: + balance = DamatuApi(_get_yaml()["damatu"]["uesr"], _get_yaml()["damatu"]["pwd"]).getBalance() + if int(balance) < 40: + raise balanceException('余额不足,当前余额为: {}'.format(balance)) user, passwd = _get_yaml()["set"]["12306count"][0]["uesr"], _get_yaml()["set"]["12306count"][1]["pwd"] if not user or not passwd: raise UserPasswordException("温馨提示: 用户名或者密码为空,请仔细检查") @@ -191,7 +212,7 @@ class GoLogin: while True: self.cookietp() self.httpClint.set_cookies(_jc_save_wfdc_flag="dc", _jc_save_fromStation="%u4E0A%u6D77%u8679%u6865%2CAOH", _jc_save_toStation="%u5170%u5DDE%u897F%2CLAJ", _jc_save_fromDate="2018-02-14", _jc_save_toDate="2018-01-16", RAIL_DEVICEID="EN_3_EGSe2GWGHXJeCkFQ52kHvNCrNlkz9n1GOqqQ1wR0i98WsD8Gj-a3YHZ-XYKeESWgCiJyyucgSwkFOzVHhHqfpidLPcm2vK9n83uzOPuShO3Pl4lCydAtQu4BdFqz-RVmiduNFixrcrN_Ny43135JiEtqLaI") - self.readImg() + self.randCode = self.readImg(self.urlConf["getCodeImg"]["req_url"]) login_num += 1 self.auth() if self.codeCheck(): diff --git a/init/select_ticket_info.py b/init/select_ticket_info.py index 396ab3f..f0e2241 100644 --- a/init/select_ticket_info.py +++ b/init/select_ticket_info.py @@ -27,6 +27,8 @@ sys.setdefaultencoding('utf-8') class select: def __init__(self): self.from_station, self.to_station, self.station_dates, self._station_seat, self.is_more_ticket, self.ticke_peoples, self.select_refresh_interval, self.station_trains, self.expect_refresh_interval, self.ticket_black_list_time = self.get_ticket_info() + self.is_aotu_code = _get_yaml()["is_aotu_code"] + self.aotu_code_type = _get_yaml()["aotu_code_type"] self.order_request_params = {} # 订单提交时的参数 self.ticketInfoForPassengerForm = {} # 初始化当前页面参数 self.current_seats = {} # 席别信息 @@ -38,6 +40,7 @@ class select: self.is_check_user = dict() self.httpClint = HTTPClient() self.confUrl = urlConf.urls + self.login = GoLogin(self.httpClint, self.confUrl, self.is_aotu_code, self.aotu_code_type) def get_ticket_info(self): """ @@ -462,11 +465,7 @@ class select: print("正在使用自动识别验证码功能") checkRandCodeAnsyn = self.confUrl["checkRandCodeAnsyn"]["req_url"] codeImgByOrder = self.confUrl["codeImgByOrder"]["req_url"] - result = self.httpClint.send(codeImgByOrder) - img_path = './tkcode' - open(img_path, 'wb').write(result) - randCode = DamatuApi(_get_yaml()["damatu"]["uesr"], _get_yaml()["damatu"]["pwd"], - img_path).main() + randCode = self.login.readImg(codeImgByOrder) randData = { "randCode": randCode, "rand": "randp", @@ -623,16 +622,16 @@ class select: 登录回调方法 :return: """ - login = GoLogin(self.httpClint, self.confUrl) if auth: - return login.auth() + return self.login.auth() else: - login.go_login() + self.login.go_login() def main(self): self.call_login() from_station, to_station = self.station_table(self.from_station, self.to_station) self.check_user() + time.sleep(0.1) num = 1 while 1: try: @@ -671,7 +670,7 @@ class select: except KeyError as e: print(e.message) except TypeError as e: - print(e.message) + print("12306接口无响应,正在重试 {0}".format(e.message)) except socket.error as e: print(e.message) diff --git a/tkcode b/tkcode index d703deebedc53b50d43de9dd76bc18bd2167def1..b0c0ac631857d5936679ee46332608979f37acff 100644 GIT binary patch delta 13457 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 delta 10572 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 From 133606f1701b85a55d971c220e24c94d1561edaa Mon Sep 17 00:00:00 2001 From: wenxianping <931128603@qq.com> Date: Wed, 24 Jan 2018 12:56:18 +0800 Subject: [PATCH 10/12] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=97=A5=E5=BF=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 1 + config/configCommon.py | 82 ++++++++++++++++++++++++++++++++++++++ config/logger.py | 61 ++++++++++++++++++++++++++++ config/ticket_config.yaml | 24 +++++------ init/login.py | 2 +- myUrllib/httpUtils.py | 19 ++++++--- tkcode | Bin 14673 -> 14242 bytes tmp/__init__.py | 0 8 files changed, 171 insertions(+), 18 deletions(-) create mode 100644 config/configCommon.py create mode 100644 config/logger.py create mode 100644 tmp/__init__.py diff --git a/.gitignore b/.gitignore index 7fd5c69..4530e7c 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ *.html *.pyc *.yaml +*.log diff --git a/config/configCommon.py b/config/configCommon.py new file mode 100644 index 0000000..2861638 --- /dev/null +++ b/config/configCommon.py @@ -0,0 +1,82 @@ +# -*- coding: utf-8 -*- + +import os +import time + +saleMinDelayDay = 0 +saleMaxDelayDay = 59 +saleStartTime = "06:00:00" +saleStopTime = "23:00:00" +rushRefreshMinTimeIntval = 2000 +rushRefreshMaxTimeIntval = 3600000 +rushRefreshTimeIntval = 100 + +RS_SUC = 0 +RS_TIMEOUT = 1 +RS_JSON_ERROR = 2 +RS_OTHER_ERROR = 3 + + +def getNowTimestamp(): + return time.time() + + +def getMinimumDate(): + return time.localtime(getNowTimestamp() + saleMinDelayDay * 24 * 3600)[:3] + + +def getMaximumDate(): + return time.localtime(getNowTimestamp() + saleMaxDelayDay * 24 * 3600)[:3] + + +def getMinimumTime(): + return [int(x) for x in saleStartTime.split(":")] + + +def getMaximumTime(): + return [int(x) for x in saleStopTime.split(":")] + + +def decMakeDir(func): + def handleFunc(*args, **kwargs): + dirname = func(*args, **kwargs) + if not os.path.exists(dirname): + os.makedirs(dirname) + elif not os.path.isdir(dirname): + pass + + return dirname + + return func + + +def getWorkDir(): + return os.path.dirname(os.path.dirname(os.path.abspath(__file__))) + + +@decMakeDir +def getTmpDir(): + return os.path.join(getWorkDir(), "tmp") + + +@decMakeDir +def getLogDir(): + return os.path.join(getTmpDir(), "log") + + +@decMakeDir +def getCacheDir(): + return os.path.join(getTmpDir(), "cache") + + +@decMakeDir +def getVCodeDir(): + return os.path.join(getTmpDir(), "vcode") + + +def getVCodeImageFile(imageName): + return os.path.join(getVCodeDir(), imageName + ".jpg") + + +def getCacheFile(cacheType): + return os.path.join(getCacheDir(), cacheType + ".cache") diff --git a/config/logger.py b/config/logger.py new file mode 100644 index 0000000..7687876 --- /dev/null +++ b/config/logger.py @@ -0,0 +1,61 @@ +#coding: utf-8 + +import os +import time +import logging + +from config import configCommon + +logger = None +loggerHandler = None +dateStr = '' #默认拥有日期后缀 +suffix = '' #除了日期外的后缀 + +def setSuffix(s): + global suffix + suffix = s + +def getTodayDateStr(): + return time.strftime("%Y-%m-%d", time.localtime(configCommon.getNowTimestamp())) + +def setDateStr(s): + global dateStr + dateStr = s + +def isAnotherDay(s): + global dateStr + return dateStr != s + +def getLogFile(): + global dateStr, suffix + rtn = os.path.join(configCommon.getLogDir(), dateStr) + if suffix: + rtn += "_" + suffix + return rtn + ".log" + +def log(msg, func = "info"): + global logger + if not logger: + logger = logging.getLogger() + logger.setLevel(logging.INFO) + + todayStr = getTodayDateStr() + if isAnotherDay(todayStr): + setDateStr(todayStr) + logger.removeHandler(loggerHandler) + + fh = logging.FileHandler(getLogFile()) + fm = logging.Formatter(u'[%(asctime)s][%(levelname)8s] --- %(message)s (%(filename)s:%(lineno)s)') + fh.setFormatter(fm) + + logger.addHandler(fh) + + levels = { + "debug": logger.debug, + "info": logger.info, + "warning": logger.warning, + "error": logger.error, + "critical": logger.critical + } + + levels[func](msg) \ No newline at end of file diff --git a/config/ticket_config.yaml b/config/ticket_config.yaml index a2fc223..370a4eb 100644 --- a/config/ticket_config.yaml +++ b/config/ticket_config.yaml @@ -41,10 +41,10 @@ set: station_dates: - - "2018-01-27" +# - "2018-01-27" # - "2018-01-28" -# - "2018-02-10" -# - "2018-02-09" + - "2018-02-10" + - "2018-02-09" station_trains: - "G2365" # - "K4300" @@ -67,25 +67,25 @@ set: 12306count: # - uesr: "" # - pwd: "apple1995" - - uesr: "@qq.com" + - uesr: "931128603@qq.com" - pwd: "QWERTY" -select_refresh_interval: 0.1 -expect_refresh_interval: 0.3 +select_refresh_interval: 0.5 +expect_refresh_interval: 0.1 ticket_black_list_time: 3 -is_aotu_code: False +is_aotu_code: True aotu_code_type: 2 #enable_proxy: False damatu: - uesr: "" + uesr: "931128603" pwd: "qazWSX1995" email_conf: - is_email: False - email: "@qq.com " - notice_email_list: "@qq.com" - username: "" + is_email: True + email: "931128603@qq.com " + notice_email_list: "61995120@qq.com" + username: "931128603" password: "xwopwxbkupbqbfgb" host: "smtp.qq.com" diff --git a/init/login.py b/init/login.py index 38d5aba..74b2170 100644 --- a/init/login.py +++ b/init/login.py @@ -44,7 +44,7 @@ class GoLogin: print ("下载验证码...") codeimgUrl = code_url img_path = './tkcode' - result = self.httpClint.send(codeimgUrl) + result = self.httpClint.send(codeimgUrl, is_logger=False) try: open(img_path, 'wb').write(result) if self.is_aotu_code: diff --git a/myUrllib/httpUtils.py b/myUrllib/httpUtils.py index befe7e8..b2d6070 100644 --- a/myUrllib/httpUtils.py +++ b/myUrllib/httpUtils.py @@ -5,7 +5,9 @@ import socket from time import sleep import requests +import sys +from config import logger class HTTPClient(object): @@ -76,7 +78,7 @@ class HTTPClient(object): self._s.headers.update({"Referer": referer}) return self - def send(self, url, data=None, **kwargs): + def send(self, url, data=None, is_logger=True, **kwargs): """send request to url.If response 200,return response, else return None.""" allow_redirects = False error_data = {"code": 99999, "message": "重试次数达到上限"} @@ -86,6 +88,8 @@ class HTTPClient(object): else: method = "get" self.resetHeaders() + logger.log( + u"url: {0}\n入参: {1}\n请求方式: {2}\n".format(url,data,method,)) for i in range(10): try: response = self._s.request(method=method, @@ -95,10 +99,15 @@ class HTTPClient(object): allow_redirects=allow_redirects, **kwargs) if response.status_code == 200: - if response.content: - return json.loads(response.content) if method == "post" else response.content - else: - return error_data + if response.content: + if is_logger: + logger.log( + u"出参:{0}".format(response.content)) + return json.loads(response.content) if method == "post" else response.content + else: + logger.log( + u"url: {} 返回参数为空".format(url)) + return error_data else: sleep(0.1) except (requests.exceptions.Timeout, requests.exceptions.ReadTimeout, requests.exceptions.ConnectionError): diff --git a/tkcode b/tkcode index b0c0ac631857d5936679ee46332608979f37acff..0d4f7c54a1b27897ffcc7543d1d707cc91686400 100644 GIT binary patch delta 12926 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 B`4a#D delta 13341 zcmZv?RahKRx2@d-mq37EK|>QDxYIZ!K^g)CcL^HYrLn>-P2&(eSa1mL1a}GU?(S}X zzJ30E_P#h5a_DWL^m~!m6aJb z%aMCJ5e-_-#tD`$be8wEBfR&GJFyHt)?-KLah5p=8b)Iio zcG55iAcL)m2zG_mCEA+E{5=iB2ApI4(E-^;zHC!F-X?Cn4vIvES49xCkMM_<>TP|1 za?H?q+*;c_W@=6PN1Gu3F<7cU)i59}+NDRm+etT}xR!ofeZu)ydjAsrJ!>Gl8UBw( zV;uG^bd&hFO zBD$NRWn#?u&+KF*t`ua{WFKB1C`#+U56B|2)hq}r@~qmSM= z$7cH|wI{n8~Hjf^c6u+&mZm6&QhO+d9RJ~iG z$2ffYfB(z>@&&vuW_kh*PAZ6fl{5fTrz3w}?kj3_bx9MU5#zW8EbRjt<9pFpm-j=`Af9j(zgZeVBd*g=hbd&A;N9*wYGr>)2wW z@j!iU{thpYo#s?6eor^}ca^Klxfwf{AjqNi8*&V+FW-3?WADnNq`C8&k5K1>9bY?s zh46Y5=F{8#amq@)j5LOad%4@PX8=Sb{ofu$q;l}~5zv=x8h5k~8?vz(<0r63zwsMIKe?M`D0C-O zwi4kYr?lMKvhticGEMms)z?lDQ8Zp=dGtT){g2BA!~a(40Uu6F_Fl&BT#u30+hQU$ zEvCqT7gnB#7A9itG3{eZFuDJKy#d4tmGr-!jw?+%FQd*tbM%+Ab^8i>sP3W3{HC1! z4)I{Pufw4}^w&*FmmLM)=uLoH!kThE_EN7LF@z$aby)hAH(s`oJZ**r<<#b^kX}vjsvs+-P@moeVR3AnW8-<1F>LKkx2m8e; zpAs*=8Ecizp_quiFePeZ1M&)4vlbWhM5^2uLmU+#J!H=yG41nXlD*H#uWM_l=%>F< z&_z8aGs`POQ5N7wk+8XJVH+^nj?YfAX0K`@i-MMt!@~6*b8i##TFQ(tw*_Aj%%{84TA&+$Zg7FdsBuOM0fxe=d1I9w~jb~7LL`Dhs zU@YXE{Je0Jds`}=C}r!{z)y3kbcC20e5|z}Y4*CcvA;^>SZD`ege>6>Q5XW~=Vfj;^Uok! z(+tQnC@dV42R~)WJTme&oE{A%TZjAZl9F_Laz^ns7<5WIokz9YgzkirejU? zVGxzGg(D#;`@-V--d2jJ>iHWB)+#-|;eDl=NX>D!O5#3am{$UeBkhO4h#3J8o6JTk z2s}yK6T-6gjRtlI1`&6ZZi4s~$Vo*z%V-dde`iV?S6s(8B8=6=`E1(#1yDRZE}udB zut?m4Xo_^r#7$XPJpM0PSM5TjAs;JCa zBuo2MO*JGAG_=SMzBBD!h-^rr^Fs*GrEk@T3H!{6r0P@u9$R8gaXHgwu>swkP791s zRrgyG>@CqWoZ05az%(-!A3Hw|!`9KuE{6a;sA@@0Ral!M-az5#8>gEd^;7*)R%0DQ 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 Date: Wed, 24 Jan 2018 12:57:43 +0800 Subject: [PATCH 11/12] fix --- tmp/log/__init__.py | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 tmp/log/__init__.py diff --git a/tmp/log/__init__.py b/tmp/log/__init__.py new file mode 100644 index 0000000..e69de29 From 01d54be85a733a9a5bcc91839929f347a5a3ce85 Mon Sep 17 00:00:00 2001 From: wenxianping <931128603@qq.com> Date: Wed, 24 Jan 2018 22:35:24 +0800 Subject: [PATCH 12/12] fix --- .gitignore | 1 + config/ticket_config.yaml | 11 ++++++++++- init/select_ticket_info.py | 4 ++-- myUrllib/httpUtils.py | 5 +++-- tkcode | Bin 14242 -> 13119 bytes 5 files changed, 16 insertions(+), 5 deletions(-) diff --git a/.gitignore b/.gitignore index 4530e7c..daeb342 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,4 @@ *.pyc *.yaml *.log +idea/ diff --git a/config/ticket_config.yaml b/config/ticket_config.yaml index 370a4eb..5f6aac1 100644 --- a/config/ticket_config.yaml +++ b/config/ticket_config.yaml @@ -43,10 +43,19 @@ set: station_dates: # - "2018-01-27" # - "2018-01-28" - - "2018-02-10" - "2018-02-09" + - "2018-02-10" +# - "2018-02-09" station_trains: + - "G4741" - "G2365" + - "G1371" + - "G1337" + - "G1377" + - "G1329" +# - "G1302" +# - "G1372" +# - "G1326" # - "K4300" # - "K5226" # - "K7772" diff --git a/init/select_ticket_info.py b/init/select_ticket_info.py index f0e2241..1ac496b 100644 --- a/init/select_ticket_info.py +++ b/init/select_ticket_info.py @@ -186,7 +186,7 @@ class select: def submitOrderRequestFunc(self, from_station, to_station, station_date=None): select_url = self.confUrl["select_url"]["req_url"].format( station_date, from_station, to_station) - station_ticket = self.httpClint.send(select_url) + station_ticket = self.httpClint.send(select_url, is_logger=False) return json.loads(station_ticket) def submitOrderRequestImplement(self, from_station, to_station,): @@ -538,7 +538,7 @@ class select: elif "messages" in queryOrderWaitTimeResult and queryOrderWaitTimeResult["messages"]: print("排队等待失败: " + queryOrderWaitTimeResult["messages"]) else: - print("第{}次排队中,请耐心等待".format(num)) + print("第{}次排队中,请耐心等待".format(num+1)) else: print("排队中") time.sleep(2) diff --git a/myUrllib/httpUtils.py b/myUrllib/httpUtils.py index b2d6070..c17b7b0 100644 --- a/myUrllib/httpUtils.py +++ b/myUrllib/httpUtils.py @@ -88,8 +88,9 @@ class HTTPClient(object): else: method = "get" self.resetHeaders() - logger.log( - u"url: {0}\n入参: {1}\n请求方式: {2}\n".format(url,data,method,)) + if is_logger: + logger.log( + u"url: {0}\n入参: {1}\n请求方式: {2}\n".format(url,data,method,)) for i in range(10): try: response = self._s.request(method=method, diff --git a/tkcode b/tkcode index 0d4f7c54a1b27897ffcc7543d1d707cc91686400..e3e73b3bc3ddf2563ba97e9f6a22ba920d9a51ce 100644 GIT binary patch delta 11948 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 U8UAB^2*g(q|10Qjj)dfY0ZO<(g#Z8m