feat(account-check): 登录接口可选 wgapi / iframe

账号检测原来把 WgapiLoginAPI 写死在执行器里,收不到邮箱验证码时只能干等;
登录任务早就可选 iframe(邮箱验证走 iframe 接口)。默认仍 wgapi,旧行为不变。
This commit is contained in:
yml2213
2026-10-06 20:19:26 +08:00
parent 39388c56b5
commit 5da12df16b
8 changed files with 279 additions and 17 deletions
+30
View File
@@ -1,5 +1,7 @@
"""斗鱼登录模块"""
from loguru import logger
from .activity_client import DouyuActivityClient, DouyuActivityError
from .email_verifier import EmailVerifier
from .login import CredentialError, DouyuLogin
@@ -13,7 +15,34 @@ from .recharge_api import (
FishFinRechargeError,
)
#: 登录接口策略名与实现类的映射;登录任务与账号检测共用同一套取值。
LOGIN_API_STRATEGIES: dict[str, type[LoginAPIStrategy]] = {
"wgapi": WgapiLoginAPI,
"iframe": IframeLoginAPI,
}
DEFAULT_LOGIN_API_STRATEGY = "wgapi"
def create_login_api_strategy(name: str) -> LoginAPIStrategy:
"""按名称创建登录接口策略实例。
只认 ``wgapi`` / ``iframe``;空值或未知值一律回退默认的 ``wgapi``
(未知值会记一条 warning —— 静默换成另一套接口会让人查不到原因)。
"""
key = str(name or "").strip().lower()
if key in LOGIN_API_STRATEGIES:
return LOGIN_API_STRATEGIES[key]()
if key:
logger.warning(
f"未知的登录接口策略 {name!r},回退 {DEFAULT_LOGIN_API_STRATEGY}"
)
return LOGIN_API_STRATEGIES[DEFAULT_LOGIN_API_STRATEGY]()
__all__ = [
"DEFAULT_LOGIN_API_STRATEGY",
"LOGIN_API_STRATEGIES",
"CredentialError",
"DouyuActivityClient",
"DouyuActivityError",
@@ -26,4 +55,5 @@ __all__ = [
"IframeLoginAPI",
"LoginAPIStrategy",
"WgapiLoginAPI",
"create_login_api_strategy",
]