From 88dead62e28d8d5d00e9d7fc897eea6e1343a15a Mon Sep 17 00:00:00 2001 From: felinae98 <731499577@qq.com> Date: Wed, 3 Mar 2021 20:14:25 +0800 Subject: [PATCH 1/2] fix get weibo error --- .../nonebot_hk_reporter/platform/weibo.py | 21 ++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/src/plugins/nonebot_hk_reporter/platform/weibo.py b/src/plugins/nonebot_hk_reporter/platform/weibo.py index c83a488..f120fc8 100644 --- a/src/plugins/nonebot_hk_reporter/platform/weibo.py +++ b/src/plugins/nonebot_hk_reporter/platform/weibo.py @@ -102,15 +102,30 @@ class Weibo(Platform): return res async def parse(self, raw_post: RawPost) -> Post: + header = { + 'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9', + 'accept-language': 'zh-CN,zh;q=0.9', + 'authority': 'm.weibo.cn', + 'cache-control': 'max-age=0', + 'sec-fetch-dest': 'empty', + 'sec-fetch-mode': 'same-origin', + 'sec-fetch-site': 'same-origin', + 'upgrade-insecure-requests': '1', + 'user-agent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) ' + 'AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.72 ' + 'Mobile Safari/537.36'} if raw_post.get('_type') == 50: # cancel top return Post('weibo', text="撤置顶", url='', pics=[], target_name=raw_post['target'], override_use_pic=False) info = raw_post['mblog'] if info['isLongText'] or info['pic_num'] > 9: async with httpx.AsyncClient() as client: - res = await client.get('https://m.weibo.cn/detail/{}'.format(info['mid'])) - full_json_text = re.search(r'"status": ([\s\S]+),\s+"hotScheme"', res.text).group(1) - info = json.loads(full_json_text) + res = await client.get('https://m.weibo.cn/detail/{}'.format(info['mid']), headers=header) + try: + full_json_text = re.search(r'"status": ([\s\S]+),\s+"hotScheme"', res.text).group(1) + info = json.loads(full_json_text) + except: + logger.info('detail message error: https://m.weibo.cn/detail/{}'.format(info['mid'])) parsed_text = self._get_text(info['text']) pic_urls = [img['large']['url'] for img in info.get('pics', [])] detail_url = 'https://weibo.com/{}/{}'.format(info['user']['id'], info['bid']) From 33a969e78232bc873a9037aa144e6cec45d6ff29 Mon Sep 17 00:00:00 2001 From: felinae98 <731499577@qq.com> Date: Wed, 3 Mar 2021 20:36:48 +0800 Subject: [PATCH 2/2] add retry --- src/plugins/nonebot_hk_reporter/platform/platform.py | 10 +++++++++- src/plugins/nonebot_hk_reporter/platform/weibo.py | 2 ++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/src/plugins/nonebot_hk_reporter/platform/platform.py b/src/plugins/nonebot_hk_reporter/platform/platform.py index 8576dfe..e1b30e0 100644 --- a/src/plugins/nonebot_hk_reporter/platform/platform.py +++ b/src/plugins/nonebot_hk_reporter/platform/platform.py @@ -208,7 +208,15 @@ class PlatformNoTarget(PlatformProto): async def _parse_with_cache(self, post: RawPost) -> Post: post_id = self.get_id(post) if post_id not in self.cache: - self.cache[post_id] = await self.parse(post) + retry_times = 3 + while retry_times: + try: + self.cache[post_id] = await self.parse(post) + break + except Exception as err: + if not retry_times: + raise err + retry_times -= 1 return self.cache[post_id] async def filter_common(self, raw_post_list: list[RawPost]) -> list[RawPost]: diff --git a/src/plugins/nonebot_hk_reporter/platform/weibo.py b/src/plugins/nonebot_hk_reporter/platform/weibo.py index f120fc8..bed3d0e 100644 --- a/src/plugins/nonebot_hk_reporter/platform/weibo.py +++ b/src/plugins/nonebot_hk_reporter/platform/weibo.py @@ -89,6 +89,8 @@ class Weibo(Platform): await super().filter_common(target, raw_post_list) return [] else: + if not raw_post_list: + return [] new_post = self._get_top(raw_post_list) res = await super().filter_common(target, raw_post_list) if (self.top[target] is not None and new_post is None) or \