作品

抓取各种关于作品的信息!

作品信息的抓取可以让我们很方便的对各种作品进行操作,包括在面对他人刷屏的情况下自动删除评论;自动回复每一条评论等。

getWorkId

getWorkId方法可以解析出一个作品url的作品Id

函数构造:

def getWorkId(self,site)

其中site表示要解析的作品网址。

示例:

import turingAPI
print(turingAPI.icodeUser().getWorkId(
'https://icodeshequ.youdao.com/work/4f011adee17f4bc386f90e2786ebaf39?from=discovery'))

#will print : 4f011adee17f4bc386f90e2786ebaf39

getWorkId会自动过滤掉访问参数,它的核心算法为:

return urllib.parse.urlparse(site)[2].split('/')[2]

getWorkDetail

getWorkDetail可以让您查询一个作品的信息。这对Scratch , Python , Blockly类型的作品都有效。

函数构造:

def getWorkDetail(self,workId,isParse=0)

workId为需要查询的作品Id ,

isParse为是否自动解析结果,默认为False。

当isParse为假的情况下,getWorkDetail将返回一个urllib3的响应对象,如果您想知道如何操控该对象,请前往urllib3教程文档。而为真的情况下,getWorkDetail将会返回一个作品信息的详细字典。当作品Id不合法时,可能会报错。

返回字典的格式示例:

{'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作品的标准返回形式。其他两种类型可能有些不一样的地方,但是其实都不影响实际操作。

示例:

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

getWorkComments用于获取一个作品的所有评论及其信息。并可以实现分页等操作。

函数构造:

def getWorkComments(self,workId,page,getNum,isParse=0)

workId 是您要查询的作品Id ,

page指定了需要查询多少页评论,

getNum指定一页包含多少条评论。

isParse是可选的,默认为False。如果为真,则会返回一个经过解析的结果。

当isParse为假的情况下,getWorkComments将返回一个urllib3的响应对象,如果您想知道如何操控该对象,请前往urllib3教程文档。而为真的情况下,getWorkDetail将会返回一个获取到的评论的详细列表。当作品Id不合法时,可能会报错。

当isParse为真时的返回列表格式:

[{'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},
{'id': 评论Id, 
'content': '评论的内容', 
'userId': '评论者的userId', 
'name': '评论者名称', 
'image': '评论者头像url', 
'isAuthor': 该评论是否由作者发送,真或假, 
'praiseNum': 该评论被点赞的数量, 
'replyNum': 该评论被回复的数量, 
'time': 该作品的发布时间, 
'hasPraised': 当前用户是否给该评论点了赞,真或假False}]

示例:删除一个作品中的一页评论:

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的更多作品”这个栏位。

虽然没什么用,但还是写了

函数构造:

def getMoreWorks(self,userIdOrWorkId,isParse=0)

userIdOrWorkId 可以是一个userId , 也可以是一个workId 。但是该函数在底层的请求方式还是使用userId进行请求,所以推荐使用userId传参。如果您传入的是一个workId,则需要经过一轮解析才能进行发送请求,较为慢速。

isParse是可选的,默认为False。如果您将其改为1,返回的将是一个经过解析的结果,形式为列表。

如果isParse参数被设置为真时,方法返回的格式为:

[{'id': '作品id', 
'title': '作品标题', 
'imgUrl': '作品封面', 
'likeNum': 作品点赞数, 
'browseNum': 作品浏览量, 
'userName': '发布者名称', 
'userImage': '发布者头像url'}]

如返回了多个作品信息,则每个作品都如上图的字典格式一般储存

[{'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提供了一个更简便、易于调用的最新作品查询器,且速度较快。

函数构造:

def discoveryWorks(self,page,isParse=0)

page表示您要查询的页数。

isParse表示是否自动解析,如果为真,则自动解析,反则不解析。

当isParse为假的情况下,discoveryWorks将返回一个urllib3的响应对象,如果您想知道如何操控该对象,请前往urllib3教程文档。而为真的情况下,discoveryWorks将会返回一个获取到的作品的详细列表。

当isParse为真时,该方法返回的格式为:

[{'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': '作品使用的编程语言'},
{'id': '作品Id', 
'title': '作品标题', 
'imgUrl': '作品封面url', 
'userId': '用户Id', 
'likeNum': 作品点赞数, 
'browseNum': 作品浏览量, 
'userName': '作者名称', 
'userImage': '作者头像url', 
'codeLanguage': '作品使用的编程语言'}]

getWorks

getWorks方法用于获取有道小图灵的所有作品。它支持按最新发布和最多点赞的排序方法来返回结果,也支持使用keyWord查询关键字作品。还可以使用编程语言和作品主题的形式来区别并返回结果。

不同于discoveryWorks,getWorks显得更加强大且功能丰富。

函数构造:

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方法的返回格式为:

[{'id': '作品Id', 
'title': '作品标题', 
'imgUrl': '封面url', 
'userId': '发布者的Id', 
'browseNum': 该作品被浏览数, 
'userName': '作者名称', 
'userImage': '作者头像url', 
'codeLanguage': '作品编程语言类型'}]

在返回多个作品时,每个作品都遵循上面字典的格式。

[{'id': '作品Id', 
'title': '作品标题', 
'imgUrl': '封面url', 
'userId': '发布者的Id', 
'browseNum': 该作品被浏览数, 
'userName': '作者名称', 
'userImage': '作者头像url', 
'codeLanguage': '作品编程语言类型'},
{'id': '作品Id', 
'title': '作品标题', 
'imgUrl': '封面url', 
'userId': '发布者的Id', 
'browseNum': 该作品被浏览数, 
'userName': '作者名称', 
'userImage': '作者头像url', 
'codeLanguage': '作品编程语言类型'}]

示例:

获取榜一作品的信息

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能够查看自己尚未发布的作品。

函数构造:

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的返回格式为:

[{'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': '作品主题'},{'id': '作品id', 
'title': '作品标题', 
'imgUrl': '作品封面url', 
'status': 是否为公开状态,1为否,2为是 ,
'likeNum': 作品被点赞数, 
'browseNum': 作品被浏览量, 
'enshrineNum': 作品被收藏数, 
'forkNum': 作品被改编数, 
'userName': '作者名称', 
'userImage': '作者头像url', 
'codeLanguage': '作品编程语言', 
'theme': '作品主题', 
'subTheme': '作品主题'}]

示例:

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才被正式加入。

函数构造:

def getWorkSubmitInfo(self,workId,isParse=0)

workId : 要获取的作品Id

isParse : 是否返回解析的结果,一个真假值。

当isParse为假的情况下,getWorkSubmitInfo将返回一个urllib3的响应对象,如果您想知道如何操控该对象,请前往urllib3教程文档。而为真的情况下,getWorkSubmitInfo将会返回一个获取到的作品的详细字典。

当isParse为真,scratch作品的返回格式为:

{'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健,代表作品源码。

Last updated