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] =?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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