def order_did_success(self): OrderLog.print_ticket_did_ordered(self.order_id) OrderLog.notification( OrderLog.MESSAGE_ORDER_SUCCESS_NOTIFICATION_TITLE, OrderLog.MESSAGE_ORDER_SUCCESS_NOTIFICATION_CONTENT) self.send_notification()
def query_order_wait_time(self): """ 排队查询 random 1546849953542 tourFlag dc _json_att REPEAT_SUBMIT_TOKEN 0977caf26f25d1da43e3213eb35ff87c :return: """ self.current_queue_wait = self.max_queue_wait self.queue_num = 0 while self.current_queue_wait: self.current_queue_wait -= self.wait_queue_interval self.queue_num += 1 # TODO 取消超时订单,待优化 data = { # 'random': str(random.random())[2:], 'tourFlag': 'dc', '_json_att': '', 'REPEAT_SUBMIT_TOKEN': self.user_ins.global_repeat_submit_token, } response = self.session.get( API_QUERY_ORDER_WAIT_TIME.format(urllib.parse.urlencode(data))) result = response.json() if result.get('status') and 'data' in result: """ "data": { "queryOrderWaitTimeStatus": true, "count": 0, "waitTime": -1, "requestId": 6487958947291482523, "waitCount": 0, "tourFlag": "dc", "orderId": "E222646122" } """ result_data = result['data'] order_id = result_data.get('orderId') if order_id: # 成功 return order_id elif result_data.get('waitTime') != -100: OrderLog.add_quick_log( OrderLog.MESSAGE_QUERY_ORDER_WAIT_TIME_WAITING.format( result_data.get('waitCount', 0), result_data.get('waitTime'))).flush() elif result_data.get( 'msg' ): # 失败 对不起,由于您取消次数过多,今日将不能继续受理您的订票请求。1月8日您可继续使用订票功能。 # TODO 需要增加判断 直接结束 OrderLog.add_quick_log( OrderLog.MESSAGE_QUERY_ORDER_WAIT_TIME_FAIL.format( result_data.get('msg', '-'))).flush() stay_second(self.retry_time) return False elif result.get('messages') or result.get('validateMessages'): OrderLog.add_quick_log( OrderLog.MESSAGE_QUERY_ORDER_WAIT_TIME_FAIL.format( result.get('messages', result.get('validateMessages')))).flush() else: pass OrderLog.add_quick_log( OrderLog.MESSAGE_QUERY_ORDER_WAIT_TIME_INFO.format( self.queue_num)).flush() stay_second(self.wait_queue_interval) return False
def confirm_single_for_queue(self): """ 确认排队 passengerTicketStr oldPassengerStr randCode purpose_codes 00 key_check_isChange FEE6C6634A3EAA93E1E6CFC39A99E555A92E438436F18AFF78837CDB leftTicketStr CmDJZYrwUoJ1jFNonIgPzPFdMBvSSE8xfdUwvb2lq8CCWn%2Bzk1vM3roJaHk%3D train_location QY choose_seats seatDetailType 000 whatsSelect 1 roomType 00 dwAll N _json_att REPEAT_SUBMIT_TOKEN 0977caf26f25d1da43e3213eb35ff87c :return: """ data = { # 'passengerTicketStr': self.passenger_ticket_str, 'oldPassengerStr': self.old_passenger_str, 'randCode': '', 'purpose_codes': self.user_ins.ticket_info_for_passenger_form['purpose_codes'], 'key_check_isChange': self.user_ins.ticket_info_for_passenger_form['key_check_isChange'], 'leftTicketStr': self.user_ins.ticket_info_for_passenger_form['leftTicketStr'], 'train_location': self.user_ins.ticket_info_for_passenger_form['train_location'], 'choose_seats': '', 'seatDetailType': '000', 'whatsSelect': '1', 'roomType': '00', 'dwAll': 'N', '_json_att': '', 'REPEAT_SUBMIT_TOKEN': self.user_ins.global_repeat_submit_token, } if self.is_need_auth_code: # 目前好像是都不需要了,有问题再处理 pass response = self.session.post(API_CONFIRM_SINGLE_FOR_QUEUE, data) result = response.json() if 'data' in result: """ "data": { "submitStatus": true } """ if result.get('data.submitStatus'): # 成功 OrderLog.add_quick_log( OrderLog.MESSAGE_CONFIRM_SINGLE_FOR_QUEUE_SUCCESS).flush() return True else: # 加入小黑屋 TODO OrderLog.add_quick_log( OrderLog.MESSAGE_CONFIRM_SINGLE_FOR_QUEUE_ERROR.format( result.get('data.errMsg', '-'))).flush() else: OrderLog.add_quick_log( OrderLog.MESSAGE_CONFIRM_SINGLE_FOR_QUEUE_FAIL.format( result.get('messages', '-'))).flush() return False
def get_queue_count(self): """ 获取队列人数 train_date Mon Jan 01 2019 00:00:00 GMT+0800 (China Standard Time) train_no 630000Z12208 stationTrainCode Z122 seatType 4 fromStationTelecode GZQ toStationTelecode RXW leftTicket CmDJZYrwUoJ1jFNonIgPzPFdMBvSSE8xfdUwvb2lq8CCWn%2Bzk1vM3roJaHk%3D purpose_codes 00 train_location QY _json_att REPEAT_SUBMIT_TOKEN 0977caf26f25d1da43e3213eb35ff87c :return: """ data = { # 'train_date': '{} 00:00:00 GMT+0800 (China Standard Time)'.format( datetime.datetime.today().strftime("%a %h %d %Y")), 'train_no': self.user_ins.ticket_info_for_passenger_form['queryLeftTicketRequestDTO']['train_no'], 'stationTrainCode': self.user_ins.ticket_info_for_passenger_form['queryLeftTicketRequestDTO'][ 'station_train_code'], 'seatType': self.query_ins.current_order_seat, 'fromStationTelecode': self.user_ins.ticket_info_for_passenger_form['queryLeftTicketRequestDTO'][ 'from_station'], 'toStationTelecode': self.user_ins.ticket_info_for_passenger_form['queryLeftTicketRequestDTO'][ 'to_station'], 'leftTicket': self.user_ins.ticket_info_for_passenger_form['leftTicketStr'], 'purpose_codes': self.user_ins.ticket_info_for_passenger_form['purpose_codes'], 'train_location': self.user_ins.ticket_info_for_passenger_form['train_location'], '_json_att': '', 'REPEAT_SUBMIT_TOKEN': self.user_ins.global_repeat_submit_token, } response = self.session.post(API_GET_QUEUE_COUNT, data) result = response.json() if result.get('status', False): # 成功 """ "data": { "count": "66", "ticket": "0,73", "op_2": "false", "countT": "0", "op_1": "true" } """ # if result.get('isRelogin') == 'Y': # 重新登录 TODO ticket = result.get('data.ticket').split(',') # 余票列表 # 这里可以判断 是真实是 硬座还是无座,避免自动分配到无座 ticket_number = ticket[0] # 余票 if ticket_number != '充足' or int(ticket_number) <= 0: if self.query_ins.current_seat == SeatType.NO_SEAT: # 允许无座 ticket_number = ticket[1] if result.get('data.op_2') == 'true': OrderLog.add_quick_log( OrderLog.MESSAGE_GET_QUEUE_LESS_TICKET).flush() return False current_position = int(result.get('data.countT', 0)) OrderLog.add_quick_log( OrderLog.MESSAGE_GET_QUEUE_COUNT_SUCCESS.format( current_position, ticket_number)).flush() return True else: # 加入小黑屋 OrderLog.add_quick_log( OrderLog.MESSAGE_GET_QUEUE_COUNT_FAIL.format( result.get('messages', result.get('validateMessages', '-')))).flush() return False
def request_init_slide(self, session, html): """ 处理滑块,拿到 session_id, sig """ OrderLog.add_quick_log('正在识别滑动验证码...').flush() return asyncio.get_event_loop_policy().new_event_loop().run_until_complete( self.__request_init_slide(session, html))
def order_did_success(self): OrderLog.print_ticket_did_ordered(self.order_id) OrderLog.notification(OrderLog.MESSAGE_ORDER_SUCCESS_NOTIFICATION_TITLE, OrderLog.MESSAGE_ORDER_SUCCESS_NOTIFICATION_CONTENT.format(self.user_ins.user_name)) self.send_notification() return True