def query(self): # 乘客信息最多十五个 retry = 3 while retry: json_response = send_requests(LOGIN_SESSION, PASSENGER_URL_MAPPING, data={"pageIndex": 1, "pageSize": 10}) status, msg = submit_response_checker(json_response, ["status", "data.flag"], True) if not status: self.passengers = [] retry -= 1 Log.v("获取乘客信息失败, 重试中") continue else: self.passengers.extend(json_response["data"]["datas"]) p2_json_response = send_requests(LOGIN_SESSION, PASSENGER_URL_MAPPING, data={"pageIndex": 2, "pageSize": 10}) status, msg = submit_response_checker(p2_json_response, ["status", "data.flag"], True) if not status: self.passengers = [] retry -= 1 Log.v("获取乘客信息失败, 重试中") continue else: self.passengers.extend(p2_json_response["data"]["datas"]) break if not self.passengers: return False Log.v("获取乘客信息成功") return True
def _submit_order_request(self): """ :return: """ form_data = { 'secretStr': self.decode_secret_str(self.train.secretStr.value), 'train_date': self.format_date(self.train.train_date.value), # 车票时间 'back_train_date': time.strftime("%Y-%m-%d", time.localtime()), # query date:2017-12-31 'tour_flag': 'dc', 'purpose_codes': find_by_name("ticket", Config.basic_config.ticket_type).sys_code, 'query_from_station_name': self.train.from_station.value.name, 'query_to_station_name': self.train.to_station.value.name, 'undefined': '', } Log.v("请求预提交订单") json_response = send_requests(LOGIN_SESSION, self.URLS['submitOrderRequest'], data=form_data) return submit_response_checker(json_response, ["status"], True, "请求预提交订单成功")
def _get_queue_count(self): form_data = { 'train_date': datetime.datetime.strptime( self.ticket_passenger_info['queryLeftTicketRequestDTO']['train_date'], '%Y%m%d').strftime( '%b %a %d %Y 00:00:00 GMT+0800') + ' (中国标准时间)', 'train_no': self.ticket_passenger_info['queryLeftTicketRequestDTO']['train_no'], 'stationTrainCode': self.train.stationTrainCode.value, 'seatType': self.seat_type.sys_code, 'fromStationTelecode': self.train.from_station_code.value, 'toStationTelecode': self.train.to_station_code.value, 'leftTicket': self.ticket_passenger_info['leftTicketStr'], 'purpose_codes': self.ticket_passenger_info['purpose_codes'], 'train_location': self.ticket_passenger_info['train_location'], '_json_att': '', 'REPEAT_SUBMIT_TOKEN': self.token } Log.v("正在获取排队信息以及余票信息中...") json_response = send_requests(LOGIN_SESSION, self.URLS['getQueueCount'], data=form_data) status, msg = submit_response_checker(json_response, ["status"], True, "获取余票信息成功") if status: self.left_tickets = json_response['data']['ticket'] Log.v("票数剩余{0}张, 排队人数为{1}人".format( self.left_tickets, json_response['data']['count'] )) else: BlackTrains.add_train(self.train) return status, msg
def _get_passenger_data(self): if PassengerData.passenger: self.passenger_data = PassengerData.find_people_by_names( Config.basic_config.ticket_people_list) # get token from html file. while True: if self.token and self.ticket_passenger_info: break else: self._get_submit_token() return True, "使用缓存的乘客信息导入成功" # 获取乘客信息并保存 while not self.passenger_data: form_data = {'_json_att': '', 'REPEAT_SUBMIT_TOKEN': self.token} json_response = send_requests(LOGIN_SESSION, self.URLS['getPassengerDTOs'], data=form_data) status, msg = submit_response_checker(json_response, ["status"], True) if status: # write data to passenger data. PassengerData.raw_data = json_response['data'][ 'normal_passengers'] PassengerData.get_final_data() self.passenger_data = PassengerData.find_people_by_names( Config.basic_config.ticket_people_list) while True: if self.token and self.ticket_passenger_info: break else: self._get_submit_token() return True, "OK" else: return False, "获取乘客信息失败"
def _get_queue_count_async(self): form_data = { 'train_date': datetime.datetime.strptime( self.train.train_date.value, '%Y%m%d').strftime('%b %a %d %Y 00:00:00 GMT+0800') + ' (中国标准时间)', 'train_no': self.train.sys_train_no.value, 'stationTrainCode': self.train.stationTrainCode.value, 'seatType': self.seat_type.sys_code, 'fromStationTelecode': self.train.from_station_code.value, 'toStationTelecode': self.train.to_station_code.value, 'leftTicket': self.ticket_passenger_info['leftTicketStr'], 'purpose_codes': find_by_name("ticket", Config.basic_config.ticket_type).sys_code, '_json_att': '' } json_response = send_requests(LOGIN_SESSION, self.URLS['getQueueCountAsync'], data=form_data) status, msg = submit_response_checker(json_response, ["status"], True) if not status: BlackTrains.add_train(self.train) return status, msg
def _auto_submit_order_request(self): """ # response example. for debug. {'validateMessagesShowId': '_validatorMessage', 'status': True, 'httpstatus': 200, 'data': {'result': 'QX#F7F13745AA1C7631B9C6B204C3677E3E1B654BE1111F558326BFED9D#hcc983%2Bc27menDVKU5ja2C2Q1%2FbToZXgLI1l8950QBZxtWwE#1', 'ifShowPassCode': 'N', 'canChooseBeds': 'N', 'canChooseSeats': 'Y', 'choose_Seats': 'M9', 'isCanChooseMid': 'N', 'ifShowPassCodeTime': '2985', 'submitStatus': True, 'smokeStr': ''}, 'messages': [], 'validateMessages': {}} :return: """ data = OrderedDict() data["secretStr"] = self.decode_secret_str(self.train.secretStr.value) data["train_date"] = self.format_date(self.train.train_date.value) data["tour_flag"] = "dc" data["purpose_codes"] = find_by_name( "ticket", Config.basic_config.ticket_type).sys_code data["query_from_station_name"] = self.train.from_station.value.name data["query_to_station_name"] = self.train.to_station.value.name data["cancel_flag"] = 2 data["bed_level_order_num"] = "000000000000000000000000000000" data["passengerTicketStr"] = build_passenger_ticket_string( self.seat_type, self.passenger_data) data["oldPassengerStr"] = build_oldpassenger_ticket_string( self.passenger_data) json_response = send_requests(LOGIN_SESSION, self.URLS['autoSubmitOrderRequest'], data=data) status, msg = submit_response_checker(json_response, ["status", "data.submitStatus"], True) if status: self.ticket_passenger_info = dict( zip(["train_location", "key_check_isChange", "leftTicketStr"], [ unquote(v) for v in json_response["data"]["result"].split("#") ])) return status, msg
def _confirm_single_for_queue_asys(self): form_data = OrderedDict() form_data['passengerTicketStr'] = build_passenger_ticket_string( self.seat_type, self.passenger_data) form_data['oldPassengerStr'] = build_oldpassenger_ticket_string( self.passenger_data) form_data['randCode'] = '' form_data['purpose_codes'] = find_by_name( "ticket", Config.basic_config.ticket_type).sys_code form_data['key_check_isChange'] = self.ticket_passenger_info[ 'key_check_isChange'] form_data['leftTicketStr'] = self.ticket_passenger_info[ 'leftTicketStr'] form_data['train_location'] = self.ticket_passenger_info[ 'train_location'] form_data['choose_seats'] = '' form_data['seatDetailType'] = '' form_data['_json_att'] = '' json_response = send_requests(LOGIN_SESSION, self.URLS['confirmSingleForQueueAsys'], data=form_data) status, msg = submit_response_checker(json_response, ["status", "data.submitStatus"], True) return status, msg
def checker(): data = { '_json_att': '' } json_response = send_requests(LOGIN_SESSION, USER_CHECK_URL_MAPPING, data=data) status, msg = submit_response_checker(json_response, ["status", "data.flag"], True, "用户在线状态检测: 在线检测通过") return status, msg
def _check_order_status_queue(self): params = { 'orderSequence_no': self.order_id, '_json_att': '' } json_response = send_requests(LOGIN_SESSION, self.URLS['resultOrderForQueue'], params=params) status, msg = submit_response_checker(json_response, ["status", "data.submitStatus"], True) return status, msg
def query_no_complete_order(): data = {"_json_att": ''} json_response = send_requests(LOGIN_SESSION, ORDER_NO_COMPLETE_MAPPING, data=data) status, msg = submit_response_checker(json_response, ["status"], True) if status: try: return [NotCompleteOrderTicketsDetail(v) for v in json_response["data"]["orderDBList"][0]["tickets"]] except KeyError: return [] return []
def _check_order_status_queue(self): params = { 'orderSequence_no': self.order_id, '_json_att': '', 'REPEAT_SUBMIT_TOKEN': self.token, } Log.v("检查已提交的订单的状态中...") json_response = send_requests(LOGIN_SESSION, self.URLS['resultOrderForQueue'], params=params) status, msg = submit_response_checker(json_response, ["status", "data.submitStatus"], True, "订单已经成功提交") return status, msg
def _query_order_wait_time(self): params = { 'random': '%10d' % (time.time() * 1000), 'tourFlag': 'dc', '_json_att': '' } json_response = send_requests(LOGIN_SESSION, self.URLS['queryOrderWaitTime'], params=params) status, msg = submit_response_checker(json_response, ["status"], True) if status: self.wait_time = json_response['data']['waitTime'] self.order_id = json_response['data']['orderId'] return status, msg
def _check_order_info(self): form_data = { 'cancel_flag': self.ticket_passenger_info['orderRequestDTO']['cancel_flag'] or '2', 'bed_level_order_num': self.ticket_passenger_info['orderRequestDTO']['bed_level_order_num'] \ or '000000000000000000000000000000', 'passengerTicketStr': build_passenger_ticket_string(self.seat_type, self.passenger_data), 'oldPassengerStr': build_oldpassenger_ticket_string(self.passenger_data), 'tour_flag': self.ticket_passenger_info['tour_flag'] or 'dc', 'randCode': '', 'whatsSelect': '1', '_json_att': '', 'REPEAT_SUBMIT_TOKEN': self.token, } Log.v("正在提交检查订单状态请求") json_response = send_requests(LOGIN_SESSION, self.URLS['checkOrderInfo'], data=form_data) status, msg = submit_response_checker(json_response, ["status", "data.submitStatus"], True, "校验订单成功") return status, msg
def _query_order_wait_time(self): params = { 'random': '%10d' % (time.time() * 1000), 'tourFlag': self.ticket_passenger_info['tour_flag'] or 'dc', '_json_att': '', 'REPEAT_SUBMIT_TOKEN': self.token } Log.v("获取订单排队信息...") json_response = send_requests(LOGIN_SESSION, self.URLS['queryOrderWaitTime'], params=params) status, msg = submit_response_checker(json_response, ["status"], True, "排队请求成功") if status: self.wait_time = json_response['data']['waitTime'] self.order_id = json_response['data']['orderId'] people_count = json_response["data"]["waitCount"] msg += " 排队等待时间预计还剩 {0} ms, 排队人数还剩 {1} 人".format( self.wait_time, people_count) if not self.order_id: msg += "\t 订单暂未生成" if "msg" in json_response["data"]: msg += "\t {0}".format(json_response["data"]["msg"]) return status, msg
def _get_passenger_data(self): if PassengerData.passenger: self.passenger_data = PassengerData.find_people_by_names( Config.basic_config.ticket_people_list) return True, "使用缓存的乘客信息导入成功" # 获取乘客信息并保存 while not self.passenger_data: json_response = send_requests(LOGIN_SESSION, self.URLS['getPassengerDTOs']) status, msg = submit_response_checker(json_response, ["status"], True) if status: # write data to passenger data. PassengerData.raw_data = json_response['data'][ 'normal_passengers'] PassengerData.get_final_data() self.passenger_data = PassengerData.find_people_by_names( Config.basic_config.ticket_people_list) return True, "OK" else: return False, "获取乘客信息失败"
def _confirm_single_or_go_for_queue(self): form_data = { 'passengerTicketStr': build_passenger_ticket_string(self.seat_type, self.passenger_data), 'oldPassengerStr': build_oldpassenger_ticket_string(self.passenger_data), 'randCode': '', 'purpose_codes': self.ticket_passenger_info['purpose_codes'], 'key_check_isChange': self.ticket_passenger_info['key_check_isChange'], 'leftTicketStr': self.ticket_passenger_info['leftTicketStr'], 'train_location': self.ticket_passenger_info['train_location'], 'choose_seats': '', # 暂时未加选座 'seatDetailType': '000', 'whatsSelect': '1', 'roomType': '00', 'dwAll': 'N', '_json_att': '', 'REPEAT_SUBMIT_TOKEN': self.token, } Log.v("正在为你请求排队提交订单") json_response = send_requests(LOGIN_SESSION, self.URLS['confirmForQueue'], data=form_data) status, msg = submit_response_checker(json_response, ["status", "data.submitStatus"], True, "请求排队成功") return status, msg