作品信息的抓取可以让我们很方便的对各种作品进行操作,包括在面对他人刷屏的情况下自动删除评论;自动回复每一条评论等。
getWorkId
getWorkId方法可以解析出一个作品url的作品Id
函数构造:
Copy def getWorkId(self,site)
其中site表示要解析的作品网址。
示例:
Copy import turingAPI
print(turingAPI.icodeUser().getWorkId(
'https://icodeshequ.youdao.com/work/4f011adee17f4bc386f90e2786ebaf39?from=discovery'))
#will print : 4f011adee17f4bc386f90e2786ebaf39
getWorkId会自动过滤掉访问参数,它的核心算法为:
Copy return urllib.parse.urlparse(site)[2].split('/')[2]
getWorkDetail
getWorkDetail可以让您查询一个作品的信息。这对Scratch , Python , Blockly类型的作品都有效。
函数构造:
Copy def getWorkDetail(self,workId,isParse=0)
workId为需要查询的作品Id ,
isParse为是否自动解析结果,默认为False。
当isParse为假的情况下,getWorkDetail将返回一个urllib3的响应对象,如果您想知道如何操控该对象,请前往urllib3教程文档 。而为真的情况下,getWorkDetail将会返回一个作品信息的详细字典。当作品Id不合法时,可能会报错。
返回字典的格式示例:
Copy {'id': '作品Id',
'title': '标题',
'imgUrl': '封面url',
'description': '简介',
'type': 类型(int),
'userId': '发布者的Id',
'status': 是否公开,不是为1,是为2 ,
'likeNum': 点赞数,
'browseNum': 浏览量,
'enshrineNum': 收藏数,
'code': '代码json',
'userName': '发布者的名称',
'userImage': '发布者的头像url',
'haveLiked': 当前用户是否给该作品点赞,0或1 ,
'haveEnshrined': 当前用户是否给该作品收藏,0或1,
'createTimeStr': '创建时间',
'updateTimeStr': '更新时间',
'codeLanguage': '作品语言',
'shortLink': '短链接(手机端分享网页)',
'theme': '主题',
'subTheme': '发布语言',
'iframeUrl': '在网站里嵌入的网址',
'scratchFile': '',
'codeType': '源代码的储存类型',
'firstPopups': 笔者也不清楚,翻译是“第一时间弹窗” ,
'forkAuthorizationStatus': 是否允许改编,
'isFirstPublish': 一开始是否公开,
'haveReported': 是否被当前用户举报,0或1}
这是Scratch作品的标准返回形式。其他两种类型可能有些不一样的地方,但是其实都不影响实际操作。
示例:
Copy import turingAPI
user=turingAPI.icodeUser('your cookie')
print(user.getWorkDetail(user.getWorkId('https://icodeshequ.youdao.com/work/4f011adee17f4bc386f90e2786ebaf39?from=home'),True))
#print:
'''
{'id': '4f011adee17f4bc386f90e2786ebaf39', 'title': 'turingAPI文档', 'imgUrl': 'http://ydschool-online.nosdn.127.net/svg/0564bb05d236bad30484b058a56a5d70242ea34743973d69939956caef6ec93f.png', 'description': 'turingAPI所有接口已基本开发完毕!\r\n操作文档正在编写中!\r\n基于gitbook\r\n文档网站:https://shuai-bi.gitbook.io/turingapi', 'type': 1, 'userId': 'qqB60D8500058F9FBEA41D76E17167C37A', 'status': 2, 'likeNum': 0, 'browseNum': 7, 'enshrineNum': 0, 'code': '{"targets":[{"isStage":true,"name":"Stage","variables":{"]i(LXs%]L:]N+lbx9cBn-得分-":["得分","0"],"b$_h_0WQZE4qP?^$/,L{":["速度",-5.5]},"lists":{},"broadcasts":{},"blocks":{},"comments":{},"currentCostume":0,"costumes":[{"assetId":"9ae2f6aa3dee8fb8f39e8e553c4c2e61","name":"背景1","bitmapResolution":1,"md5ext":"9ae2f6aa3dee8fb8f39e8e553c4c2e61.svg","dataFormat":"svg","rotationCenterX":235.25,"rotationCenterY":95.58332824707031}],"sounds":[],"volume":100,"layerOrder":0,"tempo":60,"videoTransparency":50,"videoState":"off","textToSpeechLanguage":null},{"isStage":false,"name":"Cat","variables":{},"lists":{},"broadcasts":{},"blocks":{},"comments":{},"currentCostume":2,"costumes":[{"assetId":"bcf454acf82e4504149f7ffe07081dbc","name":"cat-a","bitmapResolution":1,"md5ext":"bcf454acf82e4504149f7ffe07081dbc.svg","dataFormat":"svg","rotationCenterX":48,"rotationCenterY":50},{"assetId":"0fb9be3e8397c983338cb71dc84d0b25","name":"cat-b","bitmapResolution":1,"md5ext":"0fb9be3e8397c983338cb71dc84d0b25.svg","dataFormat":"svg","rotationCenterX":46,"rotationCenterY":53},{"assetId":"1fc2e737fd8e92509be39fb3bc53b4eb","name":"xss","bitmapResolution":1,"md5ext":"1fc2e737fd8e92509be39fb3bc53b4eb.svg","dataFormat":"svg","rotationCenterX":100,"rotationCenterY":150}],"sounds":[{"assetId":"83c36d806dc92327b9e7049a565c6bff","name":"Meow","dataFormat":"wav","format":"","rate":48000,"sampleCount":40682,"md5ext":"83c36d806dc92327b9e7049a565c6bff.wav"}],"volume":100,"layerOrder":1,"visible":true,"x":0,"y":0,"size":100,"direction":90,"draggable":false,"rotationStyle":"all around"}],"monitors":[{"id":"]i(LXs%]L:]N+lbx9cBn-得分-","mode":"default","opcode":"data_variable","params":{"VARIABLE":"得分"},"spriteName":null,"value":"0","width":0,"height":0,"x":5,"y":5,"visible":false,"sliderMin":0,"sliderMax":100,"isDiscrete":true},{"id":"b$_h_0WQZE4qP?^$/,L{","mode":"default","opcode":"data_variable","params":{"VARIABLE":"速度"},"spriteName":null,"value":"-2","width":0,"height":0,"x":5,"y":34,"visible":false,"sliderMin":0,"sliderMax":100,"isDiscrete":true}],"extensions":[],"meta":{"semver":"3.0.0","vm":"0.2.0-prerelease.20190226023539","agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:106.0) Gecko/20100101 Firefox/106.0"}}', 'userName': '魔法少女小圆', 'userImage': 'https://oimagec2.ydstatic.com/image?id=781513807186064470&product=xue&format=PNG', 'haveLiked': 0, 'haveEnshrined': 0, 'createTimeStr': '2022-10-03 18:05:07', 'updateTimeStr': '2022-10-03 18:05:07', 'codeLanguage': 'scratch', 'shortLink': 'http://163.lu/Wc9Dy4', 'theme': 'scratch', 'subTheme': 'scratch', 'iframeUrl': 'https://icode.youdao.com/share?id=4f011adee17f4bc386f90e2786ebaf39&display=true', 'scratchFile': '', 'codeType': 'json', 'firstPopups': 1, 'forkAuthorizationStatus': 1, 'isFirstPublish': True, 'haveReported': 0}
'''
getWorkComments用于获取一个作品的所有评论及其信息。并可以实现分页等操作。
函数构造:
Copy def getWorkComments(self,workId,page,getNum,isParse=0)
workId 是您要查询的作品Id ,
page指定了需要查询多少页评论,
getNum指定一页包含多少条评论。
isParse是可选的,默认为False。如果为真,则会返回一个经过解析的结果。
当isParse为假的情况下,getWorkComments将返回一个urllib3的响应对象,如果您想知道如何操控该对象,请前往urllib3教程文档 。而为真的情况下,getWorkDetail将会返回一个获取到的评论的详细列表。当作品Id不合法时,可能会报错。
当isParse为真时的返回列表格式:
Copy [{'id': 评论Id,
'content': '评论的内容',
'userId': '评论者的userId',
'name': '评论者名称',
'image': '评论者头像url',
'isAuthor': 该评论是否由作者发送,真或假,
'praiseNum': 该评论被点赞的数量,
'replyNum': 该评论被回复的数量,
'time': 该作品的发布时间,
'hasPraised': 当前用户是否给该评论点了赞,真或假False}]
如有更多评论,每个评论都遵守上列表里面元素的格式,如
Copy [{'id': 评论Id,
'content': '评论的内容',
'userId': '评论者的userId',
'name': '评论者名称',
'image': '评论者头像url',
'isAuthor': 该评论是否由作者发送,真或假,
'praiseNum': 该评论被点赞的数量,
'replyNum': 该评论被回复的数量,
'time': 该作品的发布时间,
'hasPraised': 当前用户是否给该评论点了赞,真或假False},
{'id': 评论Id,
'content': '评论的内容',
'userId': '评论者的userId',
'name': '评论者名称',
'image': '评论者头像url',
'isAuthor': 该评论是否由作者发送,真或假,
'praiseNum': 该评论被点赞的数量,
'replyNum': 该评论被回复的数量,
'time': 该作品的发布时间,
'hasPraised': 当前用户是否给该评论点了赞,真或假False},
{'id': 评论Id,
'content': '评论的内容',
'userId': '评论者的userId',
'name': '评论者名称',
'image': '评论者头像url',
'isAuthor': 该评论是否由作者发送,真或假,
'praiseNum': 该评论被点赞的数量,
'replyNum': 该评论被回复的数量,
'time': 该作品的发布时间,
'hasPraised': 当前用户是否给该评论点了赞,真或假False}]
示例:删除一个作品中的一页评论:
Copy import turingAPI
user=turingAPI.icodeUser('your cookie')
comments=user.getWorkComments('4f011adee17f4bc386f90e2786ebaf39',1,20,True)
for i in comments:
user.deleteComment(i['id'])
getMoreWorks
getMoreWorks用于获取一个作品的“TA的更多作品”这个栏位。
虽然没什么用,但还是写了
函数构造:
Copy def getMoreWorks(self,userIdOrWorkId,isParse=0)
userIdOrWorkId 可以是一个userId , 也可以是一个workId 。但是该函数在底层的请求方式还是使用userId进行请求,所以推荐使用userId传参。如果您传入的是一个workId,则需要经过一轮解析才能进行发送请求,较为慢速。
isParse是可选的,默认为False。如果您将其改为1,返回的将是一个经过解析的结果,形式为列表。
如果isParse参数被设置为真时,方法返回的格式为:
Copy [{'id': '作品id',
'title': '作品标题',
'imgUrl': '作品封面',
'likeNum': 作品点赞数,
'browseNum': 作品浏览量,
'userName': '发布者名称',
'userImage': '发布者头像url'}]
如返回了多个作品信息,则每个作品都如上图的字典格式一般储存
Copy [{'id': '作品id',
'title': '作品标题',
'imgUrl': '作品封面',
'likeNum': 作品点赞数,
'browseNum': 作品浏览量,
'userName': '发布者名称',
'userImage': '发布者头像url'},
{'id': '作品id',
'title': '作品标题',
'imgUrl': '作品封面',
'likeNum': 作品点赞数,
'browseNum': 作品浏览量,
'userName': '发布者名称',
'userImage': '发布者头像url'}]
当isParse为假的情况下,getMoreWorks将返回一个urllib3的响应对象,如果您想知道如何操控该对象,请前往urllib3教程文档 。如果您传入了一个错误的workId,程序可能会报错。
discoveryWorks
discoveryWorks主要用于查询目前发现页的最新作品。相比于getWorks 方法,discoveryWorks提供了一个更简便、易于调用的最新作品查询器,且速度较快。
函数构造:
Copy def discoveryWorks(self,page,isParse=0)
page表示您要查询的页数。
isParse表示是否自动解析,如果为真,则自动解析,反则不解析。
当isParse为假的情况下,discoveryWorks将返回一个urllib3的响应对象,如果您想知道如何操控该对象,请前往urllib3教程文档 。而为真的情况下,discoveryWorks将会返回一个获取到的作品的详细列表。
当isParse为真时,该方法返回的格式为:
Copy [{'id': '作品Id',
'title': '作品标题',
'imgUrl': '作品封面url',
'userId': '用户Id',
'likeNum': 作品点赞数,
'browseNum': 作品浏览量,
'userName': '作者名称',
'userImage': '作者头像url',
'codeLanguage': '作品使用的编程语言'}]
在返回多个作品信息时,每个作品将遵循上面字典的格式。
Copy [{'id': '作品Id',
'title': '作品标题',
'imgUrl': '作品封面url',
'userId': '用户Id',
'likeNum': 作品点赞数,
'browseNum': 作品浏览量,
'userName': '作者名称',
'userImage': '作者头像url',
'codeLanguage': '作品使用的编程语言'},
{'id': '作品Id',
'title': '作品标题',
'imgUrl': '作品封面url',
'userId': '用户Id',
'likeNum': 作品点赞数,
'browseNum': 作品浏览量,
'userName': '作者名称',
'userImage': '作者头像url',
'codeLanguage': '作品使用的编程语言'}]
getWorks
getWorks方法用于获取有道小图灵的所有作品。它支持按最新发布和最多点赞的排序方法来返回结果,也支持使用keyWord查询关键字作品。还可以使用编程语言和作品主题的形式来区别并返回结果。
不同于 discoveryWorks ,getWorks显得更加强大且功能丰富。
函数构造:
Copy def getWorks(self,page,getNum,sortType,theme='all',codeLanguage='all',keyword='',isParse=0)
page表示您要查询的作品页数;
getNum表示一页有多少作品;
sortType表示您查询时选择的排序方式,1则为按点赞量从大到小排序,2则为按发布时间从现在往以前排序;
theme则为查询时特定的作品主题,是可选的,可以为all , play , story , art , minecraft , scratch , turtle ;
codeLanguage表示查询时特定的作品语言类型,是可选的,可以为all , blockly , scratch , python ;
keyword表示您在查询时特别指定的查询关键字,是可选的,默认为不搜索(即显示全部),您可以传入任意您想搜索的关键字;
isParse代表返回的结果是否经过自动解析,是可选的,默认为假,您需要填入一个布尔值。
在β0.1版本之前,getWorks的isParse参数默认为真,这是开发时的疏忽。在β0.1版本中,该问题被修复。
当isParse为假的情况下,getWorks将返回一个urllib3的响应对象,如果您想知道如何操控该对象,请前往urllib3教程文档 。而为真的情况下,getWorks将会返回一个获取到的作品的详细列表。
当isParse为真的情况下,getWorks方法的返回格式为:
Copy [{'id': '作品Id',
'title': '作品标题',
'imgUrl': '封面url',
'userId': '发布者的Id',
'browseNum': 该作品被浏览数,
'userName': '作者名称',
'userImage': '作者头像url',
'codeLanguage': '作品编程语言类型'}]
在返回多个作品时,每个作品都遵循上面字典的格式。
Copy [{'id': '作品Id',
'title': '作品标题',
'imgUrl': '封面url',
'userId': '发布者的Id',
'browseNum': 该作品被浏览数,
'userName': '作者名称',
'userImage': '作者头像url',
'codeLanguage': '作品编程语言类型'},
{'id': '作品Id',
'title': '作品标题',
'imgUrl': '封面url',
'userId': '发布者的Id',
'browseNum': 该作品被浏览数,
'userName': '作者名称',
'userImage': '作者头像url',
'codeLanguage': '作品编程语言类型'}]
示例:
获取榜一作品的信息
Copy import turingAPI
user=turingAPI.icodeUser('cookie1')
print(user.getWorks(1,1,1,isParse=True))
#will print:
'''
[{'id': '1ff7d9bdfa80388037e5f54577a739c8',
'title': '乱世英雄:平板桌面',
'imgUrl': 'http://ydschool-online.nosdn.127.net/svg/0de90b9381744b4fd6abfca9d21a1deab3309fa9623483c1c0174c9d4e2e1297.png',
'userId': 'wxoXQUDj60yxZP7JXZiBRSvJ-SeFf8',
'likeNum': 5029,
'browseNum': 76140,
'userName': '007-小柴犬-鸿铭',
'userImage': 'https://oimageb2.ydstatic.com/image?id=3001922321237554364&product=xue',
'codeLanguage': 'scratch'}]
'''
#2022.10.4 15:13
getMyWorks
顾名思义,该函数用于获取当前登录的用户自己的作品。
不同于getPersonWorks,getMyWorks能够查看自己尚未发布的作品。
函数构造:
Copy def getMyWorks(self,page,getNum,status=2,theme='all',codeLanguage='all',keyword='',isParse=0)
page 代表您要查询的作品页数
getNum 代表您在查询时一页返回的作品个数
status 代表查询的类别,1代表查询未发布作品,2代表查询已发布作品,这个参数是可选的。默认为2.
theme 查询时指定的作品主题,可以填入 all , play , story , art , minecraft , scratch , turtle 。这个参数是可选的。默认为all.
codeLanguage 查询时指定的作品语言,可以填入 all , blockly , scratch , python 。这个参数是可选的。默认为all.
keyword 代表您要查询时查询的关键字,这个参数是可选的,默认为空字符串(不搜索,显示全部)
isParse 代表该函数返回的结果是否经过解析,为真或假,是可选的,默认为假。
当isParse为假的情况下,getMyWorks将返回一个urllib3的响应对象,如果您想知道如何操控该对象,请前往urllib3教程文档 。而为真的情况下,getMyWorks将会返回一个获取到的作品的详细列表。
当isParse参数为真时,getMyWorks的返回格式为:
Copy [{'id': '作品id',
'title': '作品标题',
'imgUrl': '作品封面url',
'status': 是否为公开状态,1为否,2为是 ,
'likeNum': 作品被点赞数,
'browseNum': 作品被浏览量,
'enshrineNum': 作品被收藏数,
'forkNum': 作品被改编数,
'userName': '作者名称',
'userImage': '作者头像url',
'codeLanguage': '作品编程语言',
'theme': '作品主题',
'subTheme': '作品主题'}]
当返回多个作品时,每个作品都遵循以上字典的格式
Copy [{'id': '作品id',
'title': '作品标题',
'imgUrl': '作品封面url',
'status': 是否为公开状态,1为否,2为是 ,
'likeNum': 作品被点赞数,
'browseNum': 作品被浏览量,
'enshrineNum': 作品被收藏数,
'forkNum': 作品被改编数,
'userName': '作者名称',
'userImage': '作者头像url',
'codeLanguage': '作品编程语言',
'theme': '作品主题',
'subTheme': '作品主题'},{'id': '作品id',
'title': '作品标题',
'imgUrl': '作品封面url',
'status': 是否为公开状态,1为否,2为是 ,
'likeNum': 作品被点赞数,
'browseNum': 作品被浏览量,
'enshrineNum': 作品被收藏数,
'forkNum': 作品被改编数,
'userName': '作者名称',
'userImage': '作者头像url',
'codeLanguage': '作品编程语言',
'theme': '作品主题',
'subTheme': '作品主题'}]
示例:
Copy import turingAPI
user=turingAPI.icodeUser('your cookie')
print(user.getMyWorks(1,1,1,keyword='黑历史',isParse=True))
#will print:
# (作品信息纯属虚构,因为我实在不想再写一次代码)
'''
[{'id': '114514',
'title': '一个黑历史嗯哼哼啊啊啊',
'imgUrl': '114514.com/img.png',
'status': 1 ,
'likeNum': 1919810,
'browseNum': 141414,
'enshrineNum': 151515,
'forkNum': 191919,
'userName': '野兽先辈',
'userImage': '114514.com/leipu.jpg',
'codeLanguage': 'scratch',
'theme': '真夏夜の淫梦',
'subTheme': '真夏夜の淫梦'}]
'''
getWorkSubmitInfo
getWorkSubmitInfo方法主要用于获取一个作品发布时携带的数据包信息,相比于getWorkDetail ,它可以获取更多信息。
它获取到的内容和submitScratch所携带的数据包格式大体相同,您可以将它们结合在一起使用。这个方法在turingAPI beta0.3才被正式加入。
函数构造:
Copy def getWorkSubmitInfo(self,workId,isParse=0)
workId : 要获取的作品Id
isParse : 是否返回解析的结果,一个真假值。
当isParse为假的情况下,getWorkSubmitInfo将返回一个urllib3的响应对象,如果您想知道如何操控该对象,请前往urllib3教程文档 。而为真的情况下,getWorkSubmitInfo将会返回一个获取到的作品的详细字典。
当isParse为真,scratch作品的返回格式为:
Copy {'avatar': '作者头像url',
'category': 'lab',
'codeType': 'json',
'commit': '不知道',
'createtime': '更新时间',
'description': '简介',
'fork': 是否开放改编,
'forkcommit': '不知道',
'forkfrom': '改编自',
'likes': 点赞数,
'owner': '不知道',
'publish': 是否已发布,
'qrCodeImage': '二维码图像url',
'shareMessage': '手机端聊天软件分享信息',
'shareText': '分享文本',
'shareTitle': '分享标题',
'subtheme': '发布类型',
'theme': '主题',
'thumbnail': '封面url',
'thumbnailList': [封面列表???什么玩意?笔者猜测是小图灵远古版本时可以选择的封面列表],
'title': '作品标题',
'username': '发布者名称',
'visits': 被浏览量,
'workid': '作品id'}
Python为:
相比于scratch,codeType变为空字符串,添加了code健,代表作品源码。