turingAPI vs turingIO
turingAPI与turingIO的区别
前世今生
turingIO是冰梨在6月份还未开发完成的一个项目。或许他也不打算开发完成。但是turingAPI的作者对该项目抱有极大兴趣,便沿用turingIO的名字,继续开发起了turingIO.
turingIO的开发工作在2022.7开始。当时预计在8.15开发完毕并上线售卖,高级版售价2¥一份。
但是在后来9月,turingIO的作者觉得之前写的代码太烂,所以重写了turingIO,听从冰梨意见,改库名为turingAPI。
turingAPI vs turingIO
API数量:
#turingAPI :41个API
#turingIO : 基础版11个 + 高级版6个 = 17个API
#turingAPI 胜出
开源:
#turingAPI : 免费开源
#turingIO : 不免费,更不开源
#turingAPI 胜出
内核:
#turingAPI : urllib3 + asyncio
#turingIO : requests + urllib
#并非说requests不好,只是requests速度并没有urllib3快,且turingIO没有内置异步接口
#turingAPI 胜出
代码简洁度:
# 以下是turingAPI的comment方法(beta 0.1):
def comment(self,workId,data):
return self.http.request('POST','https://icodeshequ.youdao.com/api/works/comment',body=('{"id":"'+str(workId)+'","content":"'+str(data)+'"}').encode('utf-8'),headers={'Accept': 'application/json, text/plain, */*',
'Content-Type': 'application/json;charset=UTF-8',
'Cookie': self.cookie,'User-Agent': self.userAgent})
# 以下是turingIO的comment方法(turingIO 基础版0.5):
def comment(self,urll,datas,isencode="is"):
try:
urll=str(urll)
datas=str(datas)
isencode=str(isencode)
temp=0
if not urll.find("?from=")==-1:
urll=urll[0:urll.find('?from='):1][-32::]
else:
urll=urll[-32::]
datas='{"id":"'+str(urll)+'","content":"'+str(datas)+'"}'
if isencode=="is":
temp=requests.post(url='https://icodeshequ.youdao.com/api/works/comment',data=datas.encode("utf-8"),headers={'Accept': 'application/json, text/plain, */*',
'Accept-Encoding': 'gzip, deflate, br',
'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6',
'Connection': 'keep-alive',
'Content-Length': '654',
'Content-type': 'application/json',
'Cookie': self.cookies,
'Host': 'icodeshequ.youdao.com',
'Origin': 'https://icodeshequ.youdao.com',
'Referer': 'https://icodeshequ.youdao.com/work/'+ urll +'?from=home',
'sec-ch-ua': '" Not;A Brand";v="99", "Microsoft Edge";v="103", "Chromium";v="103"',
'sec-ch-ua-mobile': '?0',
'sec-ch-ua-platform': '"Windows"',
'Sec-Fetch-Dest': 'empty',
'Sec-Fetch-Mode': 'cors',
'Sec-Fetch-Site': 'same-origin',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.5060.114 Safari/537.36 Edg/103.0.1264.49})'})
else:
temp=requests.post(url='https://icodeshequ.youdao.com/api/works/comment',data=datas,headers={'Accept': 'application/json, text/plain, */*',
'Accept-Encoding': 'gzip, deflate, br',
'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6',
'Connection': 'keep-alive',
'Content-Length': '654',
'Content-type': 'application/json',
'Cookie': self.cookies,
'Host': 'icodeshequ.youdao.com',
'Origin': 'https://icodeshequ.youdao.com',
'Referer': 'https://icodeshequ.youdao.com/work/'+ urll +'?from=home',
'sec-ch-ua': '" Not;A Brand";v="99", "Microsoft Edge";v="103", "Chromium";v="103"',
'sec-ch-ua-mobile': '?0',
'sec-ch-ua-platform': '"Windows"',
'Sec-Fetch-Dest': 'empty',
'Sec-Fetch-Mode': 'cors',
'Sec-Fetch-Site': 'same-origin',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.5060.114 Safari/537.36 Edg/103.0.1264.49})'})
except UnicodeEncodeError:
print("用户"+self.userid+'调用comment时Unicode字符转换错误:发送中文及更多字符必须将isencode参数调为is,否则无法转换至bytes。或者您的参数类型输入错误!')
except:
print("用户"+self.userid+"在使用comment方法时出现未知错误,请检查您的网络是否已连接,或者是您的ip已经被小图灵封禁")
else:
if not str(temp)=='<Response [200]>':
print("用户"+self.userid+"访问异常:"+str(temp)[str(temp).find('[')+1:-2:1])
print(temp.text)
return temp
#turingAPI 胜出
API可控性
# 以下是turingAPI的report方法构造:
def report(self,workId,rpdata,reportType=1)
# 以下是turingIO的report方法构造:
def report(self,sop,url)
#turingAPI 胜出
#PS:turingIO的sop参数意为“scratch or python” 。
#但turingAPI可以自动识别该作品的类型,所以将其删除。
运行效率:
import turingIO , time
user=turingIO.turing_user()
user.login('your cookie','your e-mail')
s=time.time()
for i in range(100):
user.like('https://icodeshequ.youdao.com/work/55432928f19d4f7d90423303a83c1a10')
print(time.time()-s)
import turingAPI , time
user=turingAPI.icodeUser('your cookie')
s=time.time()
for i in range(100):
user.like('55432928f19d4f7d90423303a83c1a10')
print(time.time()-s)
#我也不想说什么了,urllib3最强好吧(虽然 并发没有aiohttp快)
# turingAPI胜出
使用难易:
#turingIO基础版:
import turingIO
user=turingIO.turing_user() #没有__init__初始化,很不方便
user.login('your cookie','userId') #登录需要写userId,没有获取info的API
user.comment('https://一个作品网址','test',0) #多出来一个多余的isencode参数,turingAPI
#直接自动编码
#输出:
#userId用户调用comment时Unicode字符转换错误:发送中文及更多字符必须将isencode参数调为is,否则无法
#转换至bytes。或者您的参数类型输入错误!
#不人性化的报错信息,没法具体debug
#------------------------------------#
#turingIO高级版:
import _turingIO_
user=turing_baduser('your cookie','userId') #还是要填userId......
comments=user.get_projecy_comment('projectId',[1,2,3]) #控制精度不够,没法控制页内查询数目
print(comments) #并且速度超慢
#------------------------------------#
#turingAPI
import turingAPI
user=turingAPI.icodeUser('your cookie') #用驼峰式命名法,舒服了。并且登录只需要cookie,
#userId会被自动识别。
print(user.isLogin()) #简洁明了 API比turingIO多
#will print:
#True
#turingAPI 胜出
同步和异步
#turingIO : 没法并发
#turingAPI :
import turingAPI , asyncio , time
a=turingAPI.icodeUser('OUTFOX_SEARCH_USER_ID_NCOO=669150644.180877; OUTFOX_SEARCH_USER_ID="-1563481906@10.110.96.154"; P_INFO=13826255030|1663407616|1|youdaodict|00&99|null&null&null#gud&440100#10#0|&0||13826255030; DICT_PERS=v2|cqq||DICT||web||7776000000||1665668764369||240e:47c:40:45e3:99b4:da80:5b8c:140b||qqB60D8500058F9FBEA41D76E17167C37A||UfOfkGPLqL0PLhfOMO4Um0zM0MeB0MJB0YG0LYWkLTu0z50MTFPLzf0puh4UEhfTz0OW6LkAhflE0guhLw40fpz0; DICT_SESS=v2|KONAMuYzwR64nHwBnfwFRz5hfUWhfJFReKh4Quk4lM0TFhfQyRMOMRqZhMU5h4gFRQ4O4lW64gyRPFhfkMkMz50JyhMw46Lgz0; JSESSIONID=abcCJw-PqD7y7cPD3fGsy; xiaotuling=icode:session:b77c3c73bc7ccc7ad177d3469e99174f; DICT_LOGIN=3||1669396973145') #用户
start = time.time()
for i in range(50):
response=a.getWorks(1,1,1,keyword='魔法少女小圆',isParse=True)[0]['id']
a.comment(response,'test')
print('同步用时:',time.time()-start)
def data(value,self): #关联处理函数
return [[value[0]['id'],'test'],{}]
e1=turingAPI.event(name='帅逼')
turingAPI.addTask(e1,a.comment,association='帅2') #建立数据关联
turingAPI.addTask(e1,a.getWorks,'帅2',[1,1,1],{'keyword':'魔法少女小圆','isParse':True},returnFunc=data)
ep1=turingAPI.eventPool()
ep1.events=[e1 for i in range(50)]
start = time.time()
asyncio.run(ep1.runEvents(['帅逼']))
print('异步用时:',time.time()-start)
'''
输出:
同步用时: 23.86828875541687
异步用时: 3.4289634227752686
'''
#turingAPI 胜出
最重要的还是:turingAPI是开源免费的,并长期维护!而turingIO早在2022.9.1就被下北泽工作室官方停止支持。
turingAPI胜过turingIO的任何地方!
所以,我们推荐您使用turingAPI ,而并非turingIO!
Last updated