获取作品
获取作品信息
解析作品ID
使用getWorkIdFromUrl
方法从作品url中提取作品的id。
from icodeapi import getWorkIdFromUrl
print(getWorkIdFromUrl('https://icodeshequ.youdao.com/work/a1f09b5eb34a48dfbdc8dee59d130ec6'))
作品信息元组生成器
使用WorkInfoTupleGenerator
函数生成一个作品信息元组,该元组可用于IcodeAPI.submitWork
的参数传递。
api : 发送请求使用的IcodeAPI对象
workId : 作品id
也有异步版本AsyncWorkInfoTupleGenerator
,功能和参数设置完全相同,但是api
参数需填入AsyncIcodeAPI
对象。
获取作品信息
使用IcodeAPI.getWorkDetail
方法获取一个作品的基本信息。
workId : 作品id
addBrowseNum : 是否增加浏览量
返回的字典格式通常如下:
{
'id': str, # 作品id
'title': str, # 作品标题
'imgUrl': str, # 作品封面url
'description': str, # 作品简介
'type': int, # 作品类型
'userId': str, # 发布者用户id
'status': int, # 发布状态(1为未发布,2为已发布)
'likeNum': int, # 点赞数
'browseNum': int, # 浏览量
'enshrineNum': int, # 收藏量
'code': str, # 作品源码
'userName': str, # 发布者用户名
'userImage': str, # 发布者用户头像url
'haveLiked': bool , # 是否已点赞
'haveEnshrined': bool, # 是否收藏
'createTimeStr': str, # 创建时间
'updateTimeStr': str, # 更新时间
'codeLanguage': str, # 代码语言(blocky, scratch或python)
'shortLink': str, # 分享链接
'theme': str, # 作品主题
'subTheme': str, # 作品发布主题
'iframeUrl': str, # 作品iframe地址
'scratchFile': str, # scratch作品文件url
'codeType': str, # 代码类型
'firstPopups': bool , # 是否在作品发布者点进该作品后显示弹窗
'forkAuthorizationStatus': bool, # 是否允许他人fork
'isFirstPublish': bool, # 是否为首次发布
'haveReported': bool # 是否已举报
}
获取作品发布信息
使用IcodeAPI.getWorkSubmitInfo
方法获取一个作品在发布时向后台提交的数据。(与IcodeAPI.submitWork
方法发送的数据几乎相同)。
{
'avatar': str, # 作者头像url
'category': str, # 不明意义
'codeType': str, # 代码类型
'commit': str, # 提交时间
'createtime': str, # 创建时间
'description': str, # 作品简介
'fork': int, # 是否允许fork
'forkcommit': str, # 不明意义
'forkfrom': str, # 从哪里fork(一个workId)
'likes': int, # 点赞数
'owner': str, # 不明意义
'publish': int, # 是否公开(1为不公开,2为公开)
'qrCodeImage': str, # 作品二维码图片url
'shareMessage': str, # 分享信息
'shareText': str, # 分享文本
'shareTitle': str, # 分享标题
'subtheme': str, # 发布主题
'theme': str, # 主题
'thumbnail': str, # 封面url
'thumbnailList': list, # 封面列表
'title': str, # 标题
'username': str, # 作者名
'visits': int, # 浏览量
'workid': str # 作品id
}
获取更多作品
使用IcodeAPI.getMoreWorks
方法获取更多作品。
参数
userId
和workId
都是可选的,如果同时提供,则以userId
为准。
参数userId
为用户id。
参数workId
为作品id。 如果只填入了workId
,那么将会自动使用self.getWorkDetail
方法获取作品发布者id。
返回的字典格式通常如下:
[
{
'id': str, # 作品id
'title': str, # 作品标题
'imgUrl': str, # 作品封面url
'likeNum': int, # 作品点赞数
'browseNum': int, # 作品浏览数
'userName': str, # 发布者用户名
'userImage': str # 发布者头像url
}
# 列表中可以同时存在多个元素,表示有多个作品。
]
获取社区中的所有作品
使用IcodeAPI.getWorks
方法获取社区中的所有作品。
IcodeAPI.getWorks
提供了检索方式。
def getWorks(self,
page : int = 1,
getNum : int = 20,
sortType : int = 2,
theme : str = 'all',
codeLanguage : str = 'all',
keyword : Union[str, any] = '') -> list
参数
page
为页码,默认为1
。
参数getNum
为每页的作品数量,默认为20
。
参数sortType
为排序方式,默认为2
。1为按点赞量从大到小排序,2则为按发布时间从现在往以前排序。
参数theme
为作品类型,默认为all
,即所有类型。可以为all , play , story , art , minecraft , scratch , turtle。
参数codeLanguage
为代码语言,默认为all
,即所有语言。可以为all , blockly , scratch , python。
参数keyword
为获取到作品的检索关键词,默认为空。
返回的字典格式通常如下:
[
{
'id': str, # 作品id
'title': str, # 作品标题
'imgUrl': str, # 作品封面url
'userId': str, # 作品发布者id
'browseNum': int, # 作品浏览量
'userName': str, # 作品发布者用户名
'userImage': str, # 作品发布者头像url
'codeLanguage': str # 作品语言类型
}
]
获取当前账号下的作品
使用IcodeAPI.getMyWorks
方法获取当前登录账号的所有作品。
它和IcodeAPI.getWorks
一样提供检索方式,并且可以获取未发布的作品。
def getMyWorks(
self,
page : int = 1,
getNum : int = 20,
theme : str = 'all',
codeLanguage : str = 'all',
status : int = 2,
keyword : Union[str, any] = '') -> list
参数
page
为页码,默认为1
。
参数getNum
为每页的作品数量,默认为20
。
参数theme
为作品类型,默认为all
,即所有类型。可以为all , play , story , art , minecraft , scratch , turtle。
参数codeLanguage
为代码语言,默认为all
,即所有语言。可以为all , blockly , scratch , python。
参数status
为作品状态,默认为2
,即所有状态。可以为1或2。1为未发布,2为已发布。
参数keyword
为获取到作品的检索关键词,默认为空。
返回的字典格式通常如下:
[
{
'id': str, # 作品id
'title': str, # 作品标题
'imgUrl': str, # 作品封面url
'status': int, # 作品发布状态
'userId': str, # 作品发布者id
'likeNum': int, # 作品点赞量
'browseNum': int, # 作品浏览量
'enshrineNum': int, # 作品收藏量
'forkNum': int, # 作品被改编量
'userName': str, # 作品发布者用户名
'userImage': str, # 作品发布者头像url
'codeLanguage': str, # 作品语言类型
'theme': str, # 作品类型
'subTheme': str # 作品发布类型
}
]
获取作品评论
使用IcodeAPI.getWorkComments
方法获取作品的所有评论。
参数
workId
为作品id。
参数page
为页码,默认为1
。 参数getNum
为每页的评论数量,默认为20
。
返回的字典格式通常如下:
[
{
'id': int, # 作品评论id
'content': str, # 作品评论内容
'userId': str, # 作品评论发布者id
'name': str, # 作品评论发布者用户名
'image': str, # 作品评论发布者头像url
'isAuthor': bool, # 是否为作者
'praiseNum': int, # 作品评论点赞量
'replyNum': int, # 作品评论回复量
'time': int, # 作品评论发布时间
'hasPraised': bool # 是否被当前登录的账户点赞
}
]
获取Scratch作品内部资源
我们都知道,Scratch作品内部可以包含很多资源,例如图片、音乐等。它们在Scratch中被称为“asset”。
每个asset有一个自己的md5ext属性,是由文件内容由MD5哈希加密和文件后缀组合而来的。md5ext属性可以在project.json等Scratch源代码文件中找到。
使用IcodeAPI.getScratchAsset
方法可以获取一个在小图灵服务器中指定md5ext属性的asset文件。
参数
md5ext
为asset文件的md5ext属性。
该方法以二进制(bytes
)形式返回asset文件的内容。可以直接使用返回值进行文件读写等操作。
需要注意的是,如果获取的asset文件类型为svg文件,那么需要将返回值解码。例如:
from icodeapi import IcodeAPI
cookie = input('请输入cookie: ')
api = IcodeAPI(cookie = cookie) # 构建用户对象
# 获取mp3类型 asset文件
with open("Everyday World.mp3", 'wb') as fb:
content = api.getScratchAsset('119eab65876ab93a229d1a339238db39.mp3') # 获取文件内容
fb.write(content) # 写入
# 获取svg类型 asset文件
with open('testsvg.svg', 'w', encoding = 'utf-8') as f:
content = api.getScratchAsset('71b09db63e151c30d92b16181520bb29.svg') # 获取文件内容
f.write(content.decode('utf-8')) # 解码内容并写入
如果想了解更多关于Scratch Json的内容,另行参阅:
Json - Scratch Wiki
Scratch File Format - Scratch Wiki
Scratch3 Static Assets API