fix(Huya): WEB_ROOM_DATA_REGEX 正则错误匹配 html 转义 (#1606)

This commit is contained in:
XuanRan_Nyan authored and GitHub committed 2026-03-09 06:13:25 +00:00
1 parent 57a7741302
commit 28b0bd7105
2 files changed
+24 -4

No files matched your search

+22 -2
View File
@@ -1,4 +1,5 @@
import logging
import html
import re
import hashlib
import time
@@ -17,6 +18,7 @@ from typing import (
logger = logging.getLogger('biliup')
_DECODER = json.JSONDecoder()
def match1(text, *patterns):
if len(patterns) == 1:
@@ -48,11 +50,29 @@ def random_user_agent(device: str = 'desktop') -> str:
return f'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/{chrome_version}.0.0.0 Safari/537.36'
def deep_unescape(obj: Any) -> Any:
if isinstance(obj, dict):
return {k: deep_unescape(v) for k, v in obj.items()}
if isinstance(obj, list):
return [deep_unescape(i) for i in obj]
if isinstance(obj, str):
return html.unescape(obj)
return obj
def json_loads(text: Union[str, None]) -> Dict[str, Any]:
if not text:
raise ValueError("Invalid JSON: None")
raise ValueError("Invalid JSON: None or Empty")
try:
return json.loads(text)
data, _ = _DECODER.raw_decode(text)
except (json.JSONDecodeError, TypeError) as e:
logger.debug(f"Invalid JSON at position {getattr(e, 'pos', 'unknown')}, raw text: {text}")
else:
return data
try:
return json.loads(html.unescape(text))
except json.JSONDecodeError as e:
raise ValueError(f"Invalid JSON: {text}") from e
+2 -2
View File
@@ -29,7 +29,7 @@ HUYA_MOBILE_BASE_URL = "https://m.huya.com"
HUYA_MP_BASE_URL = "https://mp.huya.com"
HUYA_WUP_BASE_URL = "https://wup.huya.com"
HUYA_WUP_YST_URL = "https://snmhuya.yst.aisee.tv"
HUYA_WEB_ROOM_DATA_REGEX = r"var TT_ROOM_DATA = (.*?);"
HUYA_WEB_ROOM_DATA_REGEX = r"var\s+TT_ROOM_DATA\s*=\s*(.*);" # DOT 默认不匹配换行
rotl64 = lambda t: ((t & 0xFFFFFFFF) << 8 | (t & 0xFFFFFFFF) >> 24) & 0xFFFFFFFF | (t & ~0xFFFFFFFF)
@@ -516,7 +516,7 @@ class UAGenerator:
hyapp_version += f".{random.randint(3000, 5000)}"
ua = f"{hyapp_platform}&{hyapp_version}&{hyapp_channel}"
# Add android_api_level for android platforms
if platform in {PLATFORM.HUYA_ADR, PLATFORM.TV_HUYA_NFTV}:
android_api_level = random.randint(28, 36)