111 lines
3.3 KiB
Python
111 lines
3.3 KiB
Python
"""wgapi 版登录接口策略"""
|
|
|
|
import time
|
|
|
|
from .crypto import encrypt_nickname_or_phone, encrypt_password
|
|
from .login_api import LoginAPIStrategy
|
|
|
|
|
|
class WgapiLoginAPI(LoginAPIStrategy):
|
|
"""wgapi 版接口策略
|
|
|
|
使用新版 wgapi 接口,参数扁平化,用户名 RC4 加密后 base64 编码。
|
|
"""
|
|
|
|
@property
|
|
def name(self) -> str:
|
|
return "wgapi"
|
|
|
|
@property
|
|
def first_login_url(self) -> str:
|
|
return "https://passport.douyu.com/wgapi/member/passport/login"
|
|
|
|
@property
|
|
def login_url(self) -> str:
|
|
return "https://passport.douyu.com/wgapi/member/passport/login"
|
|
|
|
@property
|
|
def send_email_url(self) -> str:
|
|
return "https://passport.douyu.com/wgapi/member/passport/remotelogin/sendemail"
|
|
|
|
@property
|
|
def verify_url(self) -> str:
|
|
return "https://passport.douyu.com/wgapi/member/passport/remotelogin/verify"
|
|
|
|
def encrypt_username(self, username: str) -> str:
|
|
"""RC4 加密后 base64 编码"""
|
|
return encrypt_nickname_or_phone(username)
|
|
|
|
def build_first_login_data(
|
|
self, username: str, password: str, referer: str
|
|
) -> dict:
|
|
"""构建第一次登录参数"""
|
|
return {
|
|
"type": "1",
|
|
"nicknameOrPhoneEncrypt": self.encrypt_username(username),
|
|
"password": encrypt_password(password),
|
|
"biz_type": "1",
|
|
"room_id": "0",
|
|
"redirect_url": referer,
|
|
"t": str(int(time.time() * 1000)),
|
|
"client_id": "1",
|
|
"did": "",
|
|
"lang": "",
|
|
"isMultiAccount": "0",
|
|
}
|
|
|
|
def build_second_login_data(
|
|
self,
|
|
username: str,
|
|
password: str,
|
|
gt: str,
|
|
challenge: str,
|
|
validate: str,
|
|
seccode: str,
|
|
code_token: str,
|
|
referer: str,
|
|
) -> dict:
|
|
"""构建第二次登录参数(带极验验证)"""
|
|
return {
|
|
"type": "1",
|
|
"nicknameOrPhoneEncrypt": self.encrypt_username(username),
|
|
"password": encrypt_password(password),
|
|
"room_id": "0",
|
|
"code_type": "1",
|
|
"code_token": code_token,
|
|
"gt_version": "v3",
|
|
"geetest_challenge": challenge,
|
|
"geetest_validate": validate,
|
|
"geetest_seccode": seccode,
|
|
"code_data[geetest_challenge]": challenge,
|
|
"code_data[geetest_validate]": validate,
|
|
"code_data[geetest_seccode]": seccode,
|
|
"code_data[gt_version]": "v3",
|
|
"code_data[code]": "",
|
|
"redirect_url": referer,
|
|
"t": str(int(time.time() * 1000)),
|
|
"client_id": "1",
|
|
"did": "",
|
|
"lang": "",
|
|
"isMultiAccount": "0",
|
|
"biz_type": "1",
|
|
}
|
|
|
|
def build_send_email_data(self, code: str) -> dict:
|
|
"""构建发送邮箱验证参数"""
|
|
return {
|
|
"code": code,
|
|
"client_id": "1",
|
|
}
|
|
|
|
def build_verify_data(self, code: str, captcha: str) -> dict:
|
|
"""构建提交验证码参数"""
|
|
return {
|
|
"verify_type": "2",
|
|
"captcha": captcha,
|
|
"isMultiAccount": "0",
|
|
"code": code,
|
|
"client_id": "1",
|
|
"redirect_url": "//www.douyu.com/api/passport/login",
|
|
}
|