From 5967e4d4592a03056e17d9c2ac0165c41a1a3a34 Mon Sep 17 00:00:00 2001 From: lj091715 <1091062319@qq.com> Date: Tue, 19 May 2026 13:53:11 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=20tp/scripts/beauty.py?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tp/scripts/beauty.py | 37 +++++-------------------------------- 1 file changed, 5 insertions(+), 32 deletions(-) diff --git a/tp/scripts/beauty.py b/tp/scripts/beauty.py index 96f401b..7da5520 100644 --- a/tp/scripts/beauty.py +++ b/tp/scripts/beauty.py @@ -30,7 +30,7 @@ def get_key() -> str: class NoRedirectHandler(urllib.request.HTTPRedirectHandler): - """不跟随重定向,让 open() 直接返回 302 响应""" + """不跟随重定向,用于捕获 302 的 Location 头""" def http_error_302(self, req, fp, code, msg, headers): return fp http_error_301 = http_error_302 @@ -41,8 +41,6 @@ class NoRedirectHandler(urllib.request.HTTPRedirectHandler): def fetch_single_image(api: dict) -> str | None: """从单个接口获取图片地址(通过302重定向的Location头)""" key = get_key() - - # 方式1:通过 NoRedirectHandler 捕获 302 的 Location try: opener = urllib.request.build_opener(NoRedirectHandler()) req = urllib.request.Request(api["url"], headers={"key": key}) @@ -50,23 +48,13 @@ def fetch_single_image(api: dict) -> str | None: location = resp.headers.get("Location") if location: return location.strip() - # 方式2:如果没Location头(可能被跟随了重定向),尝试读响应body中的URL - body = resp.read().decode("utf-8", errors="replace") - sys.stdout.write(f"[debug] {api['name']}: 无Location, body={body[:100]}\n") except urllib.error.HTTPError as e: - # 某些Python版本 NoRedirectHandler 仍会抛异常 if e.code in (301, 302, 303, 307): location = e.headers.get("Location") if location: return location.strip() - sys.stdout.write(f"[debug] {api['name']}: HTTP {e.code}\n") - except urllib.error.URLError as e: - sys.stdout.write(f"[debug] {api['name']}: 网络错误 {e.reason}\n") - except TimeoutError: - sys.stdout.write(f"[debug] {api['name']}: 请求超时\n") - except OSError as e: - sys.stdout.write(f"[debug] {api['name']}: 系统错误 {e}\n") - + except (urllib.error.URLError, TimeoutError, OSError): + pass return None @@ -84,7 +72,6 @@ def send_images(image_urls: list[str]) -> bool: robot_port = os.environ.get("ROBOT_WECHAT_CLIENT_PORT", "").strip() to_wxid = os.environ.get("ROBOT_FROM_WX_ID", "").strip() if not robot_port or not to_wxid: - sys.stdout.write(f"[debug] 环境变量缺失: PORT={robot_port!r} WXID={to_wxid!r}\n") return False api_url = ( @@ -109,29 +96,15 @@ def send_images(image_urls: list[str]) -> bool: if 200 <= response.status < 300: return True payload = json.load(response) - except urllib.error.URLError as e: - sys.stdout.write(f"[debug] 发图失败: 无法连接机器人 {e.reason}\n") - return False - except TimeoutError: - sys.stdout.write("[debug] 发图失败: 超时\n") - return False - except json.JSONDecodeError: - sys.stdout.write("[debug] 发图失败: 返回不是JSON\n") - return False - except OSError: + except (urllib.error.URLError, TimeoutError, json.JSONDecodeError, OSError): return False code = payload.get("code") - ok = code == 200 or code == 0 - if not ok: - sys.stdout.write(f"[debug] 发图失败: code={code}\n") - return ok + return code == 200 or code == 0 def main() -> int: urls = fetch_all_images() - if urls: - sys.stdout.write(f"[debug] 成功获取 {len(urls)} 张图片\n") if len(urls) >= 2 and send_images(urls): return 0 sys.stdout.write(FALLBACK_TEXT)