Exemplo n.º 1
0
    def fetch_data(self, activity_page_url):
        data_prefix = "window.syncData = "
        data_suffix = ";\n</script>"

        def request_fn():
            return requests.post(
                activity_page_url,
                headers=self.headers,
                timeout=self.djc_helper.common_cfg.http_timeout)

        def check_fn(response: requests.Response):
            return data_prefix not in response.text

        retry_cfg = self.djc_helper.common_cfg.retry
        for _i in range(retry_cfg.max_retry_count):
            try:
                res = try_request(request_fn, self.djc_helper.common_cfg.retry)
                page_html = res.text

                prefix_idx = page_html.index(data_prefix) + len(data_prefix)
                suffix_idx = page_html.index(data_suffix, prefix_idx)

                return json.loads(page_html[prefix_idx:suffix_idx])
            except Exception as e:
                logger.debug("出错了", exc_info=e)
                time.sleep(retry_cfg.retry_wait_time)

        raise Exception("无法正常获取QQ空间活动数据")
Exemplo n.º 2
0
    def do_qzone_activity(
        self,
        actid,
        api,
        ctx,
        ruleid,
        query="",
        act_name="",
        gameid="",
        area="",
        partition="",
        roleid="",
        countid="",
        pretty=False,
        print_res=True,
    ):
        url = self.urls.qzone_activity.format(
            api=api,
            g_tk=self.g_tk,
            rand=random.random(),
        )
        if self.roleinfo is not None:
            area = area or self.roleinfo.serviceID
            partition = partition or self.roleinfo.serviceID
            roleid = roleid or self.roleinfo.roleCode

        raw_data = self.urls.qzone_activity_raw_data.format(
            actid=actid,
            ruleid=ruleid,
            area=area,
            partition=partition,
            roleid=roleid,
            query=query,
            act_name=act_name,
            gameid=gameid,
            uin=uin2qq(self.lr.uin),
            countid=countid,
        )

        def request_fn():
            return requests.post(
                url,
                raw_data,
                headers=self.headers,
                timeout=self.djc_helper.common_cfg.http_timeout)

        res = try_request(request_fn, self.djc_helper.common_cfg.retry)
        logger.debug(f"{raw_data}")
        return process_result(ctx, res, pretty, print_res)
Exemplo n.º 3
0
    def fetch_lottery_data(self):
        request_fn = lambda: requests.post(self.urls.ark_lottery_page,
                                           headers=self.headers,
                                           timeout=self.djc_helper.common_cfg.
                                           http_timeout)
        res = try_request(request_fn, self.djc_helper.common_cfg.retry)
        page_html = res.text

        data_prefix = "window.syncData = "
        data_suffix = ";\n</script>"

        prefix_idx = page_html.index(data_prefix) + len(data_prefix)
        suffix_idx = page_html.index(data_suffix, prefix_idx)

        self.lottery_data = json.loads(page_html[prefix_idx:suffix_idx])
Exemplo n.º 4
0
    def fetch_data(self, activity_page_url):
        data_prefix = "window.syncData = "
        data_suffix = ";\n</script>"

        def request_fn():
            return requests.post(
                activity_page_url,
                headers=self.headers,
                timeout=self.djc_helper.common_cfg.http_timeout)

        def check_fn(response: requests.Response):
            return data_prefix not in response.text

        res = try_request(request_fn, self.djc_helper.common_cfg.retry)
        page_html = res.text

        prefix_idx = page_html.index(data_prefix) + len(data_prefix)
        suffix_idx = page_html.index(data_suffix, prefix_idx)

        return json.loads(page_html[prefix_idx:suffix_idx])
Exemplo n.º 5
0
    def do_ark_lottery(self,
                       api,
                       ctx,
                       ruleid,
                       query="",
                       act_name="",
                       gameid="",
                       area="",
                       partition="",
                       roleid="",
                       pretty=False,
                       print_res=True):
        url = self.urls.ark_lottery.format(
            api=api,
            g_tk=self.g_tk,
            rand=random.random(),
        )
        if self.roleinfo is not None:
            area = area or self.roleinfo.serviceID
            partition = partition or self.roleinfo.serviceID
            roleid = roleid or self.roleinfo.roleCode

        raw_data = self.urls.ark_lottery_raw_data.format(
            actid=3886,
            ruleid=ruleid,
            area=area,
            partition=partition,
            roleid=roleid,
            query=query,
            act_name=act_name,
            gameid=gameid,
            uin=uin2qq(self.lr.uin),
        )

        request_fn = lambda: requests.post(url,
                                           raw_data,
                                           headers=self.headers,
                                           timeout=self.djc_helper.common_cfg.
                                           http_timeout)
        res = try_request(request_fn, self.djc_helper.common_cfg.retry)
        return process_result(ctx, res, pretty, print_res)