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空间活动数据")
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)
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])
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])
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)