账号检测原来把 WgapiLoginAPI 写死在执行器里,收不到邮箱验证码时只能干等; 登录任务早就可选 iframe(邮箱验证走 iframe 接口)。默认仍 wgapi,旧行为不变。
60 lines
1.7 KiB
Python
60 lines
1.7 KiB
Python
"""斗鱼登录模块"""
|
|
|
|
from loguru import logger
|
|
|
|
from .activity_client import DouyuActivityClient, DouyuActivityError
|
|
from .email_verifier import EmailVerifier
|
|
from .login import CredentialError, DouyuLogin
|
|
from .login_api import LoginAPIStrategy
|
|
from .login_api_iframe import IframeLoginAPI
|
|
from .login_api_wgapi import WgapiLoginAPI
|
|
from .recharge_api import (
|
|
FishFinRechargeClient,
|
|
FishFinRechargeConfig,
|
|
FishFinRechargeConfigError,
|
|
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",
|
|
"DouyuLogin",
|
|
"EmailVerifier",
|
|
"FishFinRechargeClient",
|
|
"FishFinRechargeConfig",
|
|
"FishFinRechargeConfigError",
|
|
"FishFinRechargeError",
|
|
"IframeLoginAPI",
|
|
"LoginAPIStrategy",
|
|
"WgapiLoginAPI",
|
|
"create_login_api_strategy",
|
|
]
|