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 b0c0ac6..0d4f7c5 100644 Binary files a/tkcode and b/tkcode differ diff --git a/tmp/__init__.py b/tmp/__init__.py new file mode 100644 index 0000000..e69de29