예제 #1
0
 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
예제 #2
0
 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
예제 #3
0
파일: job.py 프로젝트: bbhhhh/py12306
 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)
예제 #4
0
    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)
예제 #5
0
    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')
예제 #6
0
파일: job.py 프로젝트: WuxinKS/hemaqp
    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