跳转至

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(''))