TuringIO
TuringIO是由冰梨在2022.6开始开发的一个项目,作为一个小图灵的Python API框架。
TuringIO基于request,并第一次发现了简化小图灵cookie的方法。
冰梨没开发多久就放弃了,但是这为后来的TuringAPI、icodeapi的诞生奠定了基础,是划时代的项目,意义重大。
源码没多少,在此可以展示一下。
__init__.py
import requests
import json
import warnings
class LoginWarning(Warning):
"""Cannot login"""
def strcookies_to_dict(strcookies):
return {i.split("=", 1)[0].strip(): i.split("=", 1)[-1].strip() for i in strcookies.split(";")}
class Turing:
def __init__(self, cookie=None):
r'''
传入一个cookie字典登录小图灵。
经过检测,只传入DICT_PERS一个参数即可登录小图灵
例如:
>>> import turingio
>>> XiaoMing = turingio.Turing({'DICT_PERS': '******'})
>>> XiaoMing.updateIntro("我最帅")
登录后会进行检测
如果登录失败会抛出LoginWarning
'''
self.__session = requests.Session()
self.logincode = None
if cookie != None:
self.__session.cookies = requests.utils.cookiejar_from_dict(
cookie)
self.checklogin()
self.__session.headers['User-Agent'] = "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198"
self.__session.headers['Host'] = "icodeshequ.youdao.com"
self.__session.headers['Referer'] = "https://icodeshequ.youdao.com/"
self.__session.headers['Sec-Fetch-Dest'] = "empty"
self.__session.headers['Sec-Fetch-Mode'] = "cors"
self.__session.headers['Sec-Fetch-Site'] = "same-origin"
def checklogin(self):
url = 'https://icodecontest-online-api.youdao.com/api/user/info'
headers = {
'Accept': 'application/json, text/plain, */*',
'Accept-Encoding': 'gzip, deflate, br',
'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8',
'Host': 'icodecontest-online-api.youdao.com',
'Origin': 'https://icodeshequ.youdao.com',
'Referer': 'https://icodeshequ.youdao.com/',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198'
}
check = self.__session.get(url=url, headers=headers).json()
print(check)
if check['code'] == 0:
self.login = 'OK'
self.encryptionId = check['data']['encryptionUserId']
self.Id = check['data']['userId']
self.name = check['data']['name']
self.image = check['data']['image']
self.permissions = check['data']['permissions']
self.hasCourse = check['data']['hasCourse']
self.userIdentity = check['data']['userIdentity']
return(True)
else:
print(check)
warnings.warn("Cannot Login", LoginWarning)
return(False)
def updateIntro(self, text):
updateIntro = self.__session.post(
url="https://icodeshequ.youdao.com/api/user/updateIntro",
data=text.encode('utf-8'))
#self.code = updateIntro.status_code
return updateIntro.json()
#
#
# 请填入您的cookie在双引号内
print(strcookies_to_dict(''))