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] =?UTF-8?q?1=E3=80=81=E4=BF=AE=E6=94=B9=E4=B9=98=E8=BD=A6?= =?UTF-8?q?=E4=BA=BA=E5=A6=82=E6=9E=9C=E6=9C=AA=E8=AE=BE=E7=BD=AE=E5=A5=BD?= =?UTF-8?q?=EF=BC=8C=E8=BF=94=E5=9B=9E=E9=BB=98=E8=AE=A4=E5=80=BC=E6=9C=89?= =?UTF-8?q?=E8=AF=AF=202=E3=80=81=E4=BC=98=E5=8C=96=E7=99=BB=E5=BD=95?= =?UTF-8?q?=E5=9B=9E=E8=B0=83=EF=BC=8C=E8=AE=BE=E7=BD=AE=E4=B8=BA=E4=BA=94?= =?UTF-8?q?=E5=88=86=E9=92=9F=E4=B8=80=E6=AC=A1=203=E3=80=81=E4=BF=AE?= =?UTF-8?q?=E6=94=B9type=E4=B8=BAnull=E7=9A=84=E9=97=AE=E9=A2=98=204?= =?UTF-8?q?=E3=80=81=E5=A2=9E=E5=8A=A0=E8=AF=B7=E6=B1=82=E8=B6=85=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)_