def handle_response(self, response): """ 错误判断 余票判断 小黑屋判断 座位判断 乘车人判断 :param result: :return: """ results = self.get_results(response) if not results: return False for result in results: self.ticket_info = ticket_info = result.split('|') if not self.is_trains_number_valid(): # 车次是否有效 continue QueryLog.add_log( QueryLog.MESSAGE_QUERY_LOG_OF_EVERY_TRAIN.format( self.get_info_of_train_number())) if not self.is_has_ticket(ticket_info): continue allow_seats = self.allow_seats if self.allow_seats else list( Config.SEAT_TYPES.values()) # 未设置 则所有可用 TODO 合法检测 self.handle_seats(allow_seats, ticket_info) if not self.is_alive: return
def start(self): """ 处理单个任务 根据日期循环查询, 展示处理时间 :param job: :return: """ while True and self.is_alive: app_available_check() QueryLog.print_job_start(self.job_name) for station in self.stations: self.refresh_station(station) for date in self.left_dates: self.left_date = date response = self.query_by_date(date) self.handle_response(response) QueryLog.add_query_time_log( time=response.elapsed.total_seconds(), is_cdn=self.is_cdn) if not self.is_alive: return self.safe_stay() if is_main_thread(): QueryLog.flush(sep='\t\t', publish=False) if not Config().QUERY_JOB_THREAD_ENABLED: QueryLog.add_quick_log('').flush(publish=False) break else: QueryLog.add_log('\n').flush(sep='\t\t', publish=False) if Const.IS_TEST: return
def query_by_date(self, date): """ 通过日期进行查询 :return: """ from py12306.helpers.cdn import Cdn QueryLog.add_log(('\n' if not is_main_thread() else '') + QueryLog.MESSAGE_QUERY_START_BY_DATE.format( date, self.left_station, self.arrive_station)) url = LEFT_TICKETS.get('url').format( left_date=date, left_station=self.left_station_code, arrive_station=self.arrive_station_code, type=self.query.api_type) print("ticket query url=%s" % url) if Config.is_cdn_enabled() and Cdn().is_ready: self.is_cdn = True print("12306 cdn is enabled.") return self.query.session.cdn_request(url, timeout=self.query_time_out, allow_redirects=False) self.is_cdn = False return self.query.session.get(url, timeout=self.query_time_out, allow_redirects=False)
def query_by_date(self, date): """ 通过日期进行查询 :return: """ QueryLog.add_log(('\n' if not is_main_thread() else '') + QueryLog.MESSAGE_QUERY_START_BY_DATE.format(date, self.left_station, self.arrive_station)) url = LEFT_TICKETS.get('url').format(left_date=date, left_station=self.left_station_code, arrive_station=self.arrive_station_code, type='leftTicket/queryZ') return self.query.session.get(url)
def start(self): """ 处理单个任务 根据日期循环查询 展示处理时间 :param job: :return: """ QueryLog.print_job_start() for date in self.left_dates: self.left_date = date response = self.query_by_date(date) self.handle_response(response) self.safe_stay() if is_main_thread(): QueryLog.flush(sep='\t\t') if is_main_thread(): QueryLog.add_quick_log('').flush() else: QueryLog.add_log('\n').flush(sep='\t\t')
def query_by_date(self, date): """ 通过日期进行查询 :return: """ from py12306.helpers.cdn import Cdn QueryLog.add_log(('\n' if not is_main_thread() else '') + QueryLog.MESSAGE_QUERY_START_BY_DATE.format( date, self.left_station, self.arrive_station)) url = LEFT_TICKETS.get('url').format( left_date=date, left_station=self.left_station_code, arrive_station=self.arrive_station_code, type='leftTicket/queryZ') if Config.is_cdn_enabled() and Cdn().is_ready: self.is_cdn = True return self.query.session.cdn_request(url, timeout=self.query_time_out, allow_redirects=False) self.is_cdn = False if Config.is_zf(): headers = ZFProxyUtil.getProxySign() proxy = ZFProxyUtil.getProxy() yp_by_data = self.query.session.get(url, headers=headers, proxies=proxy, verify=False, allow_redirects=False, timeout=self.query_time_out) else: yp_by_data = self.query.session.get(url, verify=False, allow_redirects=False, timeout=self.query_time_out) return yp_by_data