跳转至

登陆账号

登录你的账号

在有道小图灵社区中使用抓包工具获取你的Cookie,它被写在请求头中,十分容易获取。
使用IcodeAPI类构建一个有道小图灵账户。

class IcodeAPI():
    __cookie : str = ''
    userAgent : str = DEFAULT_USER_AGENT
    __info : dict = {}
    client : httpx.Client = None
    __loginStatus = False

    def __init__(
        self, 
        cookie : str = '', 
        userAgent : str = DEFAULT_USER_AGENT, 
        httpxClient : httpx.Client = httpx.Client(), 
        timeout : Union[int, float] = 10
    ):
        self.__cookie = cookie.encode('utf-8')
        self.userAgent = userAgent
        self.client = httpxClient
        self.client.timeout = timeout
        self.login()

__cookie : 账号的cookie,私有成员。
userAgent : 发送请求时使用的UA。
__info : 账号的信息,如果登录失败则为空字典,私有成员。
client : 所使用的httpx连接池。
__loginStatus : 账号登录状态,如果Cookie有效,为真;如果Cookie无效,为假。私有成员。

__init__方法的timeout参数用于设置httpx连接池的连接超时时间,单位为秒。
userAgent参数的默认值为一个icodeapi的全局常量。默认值为:'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36 Edg/115.0.1901.203'
登陆账号示例:

import icodeapi
# 创建一个账号
cookie = input('请输入你的cookie: ')
api = icodeapi.IcodeAPI(cookie = cookie)
# 打印登录信息
print(f'登录{"成功" if api.getLoginStatus() else "失败"},', '账号信息:\n', api.getInfo())
输出内容:
登陆成功, 账号信息:
{'encryptionUserId':'...', 'userId': '...', 'name': '...', 'image': '...', 'mobile': '...', 'permissions': [], 'hasCourse': 0, 'userIdentity': '...', 'courseType': '...'}
IcodeAPI类实际上使用login方法来使用__cookie成员进行登录,同时,login方法也可以用于在该类上重新登录一个账号,只需要填入一个新的Cookie。 login方法:
def login(self, newCookie : str = None) -> dict
login方法会使用self.__cookie进行登录,如果填入了newCookie参数,那么将会使用newCookieself.__cookie进行赋值。
如果检测到Cookie有效,那么会将self.__loginStatus设置为真,将self.__info设置为有道小图灵官方API返回的内容。如果Cookie无效,那么将self.__info设为空字典,并将self.__loginStatus设置为假。返回self.__info
另外,如果Cookie无效,将会抛出LoginError错误。
self.__info的有效值通常有如下格式:
{
    'encryptionUserId': str, # 加密后的用户ID
    'userId': str,  # 用户ID
    'name': str,  # 用户名
    'image': str,  # 用户头像url
    'permissions': list,  # 用户权限(或课程)
    'mobile': str,  # 用户手机号
    'hasCourse': bool,  # 用户是否购买课程
    'userIdentity': str # 用户身份(购课用户或非课用户)
    'courseType': str # 用户所有课程的类型
}

获取用户信息

如果需要获取已登录账号的信息,可以使用getInfo方法。如果要判断IcodeAPI对象是否已经正确地登录上一个账号,可以使用getLoginStatus方法。
getInfo方法会返回类的__info成员,getLoginStatus方法会返回类的__loginStatus成员。
使用示例

import icodeapi
cookie = input('输入你的Cookie: ')
api = icodeapi.IcodeAPI(cookie) # 构建IcodeAPI对象
if api.getLoginStatus(): # 判断是否已经登录
    print('账号的ID为', api.getInfo().get('userId')) # 获取用户信息并提取出ID
else:
    print('Cookie无效')