登陆账号
登录你的账号
在有道小图灵社区中使用抓包工具获取你的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': '...'}
login
方法来使用__cookie
成员进行登录,同时,login
方法也可以用于在该类上重新登录一个账号,只需要填入一个新的Cookie。
login方法:
login
方法会使用self.__cookie
进行登录,如果填入了newCookie
参数,那么将会使用newCookie
给self.__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
成员。
使用示例: