yande.re API 介绍

By toupiOfRivia

网站链接:https://yande.re/help/api

Help: API 1.13.0+update.3

Moebooru提供的API和Danbooru API (version 1.13.0)大部分兼容,能够让您更方便的写脚本语言。 你需要的是一种GET和POST到URLs的方法。如果您能解析XML或者JSON的响应,这样更好,但不是很重要,简单的API意味着你可以用JavaScript, Perl, Python, Ruby甚至像bash或tcsh这样的shell语言编写脚本。

基础(Basics)

HTTP定义了两个请求方法:GET和POST。你将使用这两个方法与Danbooru API进行交互。大部分改变数据库状态的API调用(例如创建,更新,或者删除某些内容)需要进行HTTP POST调用。只检索数据的API调用通常可以使用HTTP GET调用来完成。 在Danbooru API中,URL和函数名类似。
您将函数参数作为查询字符串传递,这里是一个非常简单的栗子:/post.xml?limit=1.

post部分表示我们正在使用的控制器。在这个栗子下是posts.index描述了动作。这里我们正在检索帖子列表。最后,xml部分描述了我们想要的响应格式。您可以写.xml指定为XML响应,.json指定为JSON响应,或者什么都不写指定为HTML响应。
.xml效果: postxml .json效果: postjson html效果: posthtml

响应

所有改变状态的API调用将返回单个元素响应(以XML调用为例)他们的格式如下:

<?xml version="1.0" encoding="UTF-8"?>
<response success="false" reason="duplicate"/>

对于JSON响应,他们将如下所示:

{success: false, reason: "duplicate"}}

您通常可以根据响应对象来决定(调用)成功或者失败,您还可以根据HTTP状态码知道发生了什么。在标准状态码之外,Danbooru还使用一些范围在4xx到5xx的自定义状态码。

状态码 含义
200 OK 请求成功(Request was successful)
403 Forbidden 拒绝访问(Access denied)
404 Not Found 没有找到(Not found)
420 Invalid Record 记录无法保存(Record could not be saved)
421 User Throttled 用户被调节,稍后再试(User is throttled, try again later)
422 Locked 资源被锁定,无法修改(The resource is locked and cannot be modified)
423 Already Exists 资源已经存在(Resource already exists)
424 Invalid Parameters 给定的参数无效(The given parameters were invalid)
500 Internal Server Error 服务器上发生一些未知错误(Some unknown error occurred on the server)
503 Service Unavailable 服务器目前无法处理请求,稍后再试(Server cannot currently handle the request, try again later)

JSON响应

在大多数情况下,您可能希望使用XML,如果您在JavaScript中编写某些内容,那么JSON响应可能更好。JSON响应能够更快的被解析并且写更少的代码就可以获得你的数据结构。栗子:

var data = eval("(" + responseText + ")")
alert(data.response)

登录

有些操作可能要求您登录。对于任何操作,您随时可以指定两个参数来标识自己:
login 您的登录名
password_hash 您的SHA1散列密码。
简单的哈希您的纯密码将不会有效,因为Danbooru给它的密码加Salt了(更难被破解)。实际上被哈希的字符串是”choujin-steiner–your-password–“。 请注意通过未加密的频道发送您的密码所涉及的安全风险。虽然您的密码将被散列,但是理论上仍然有可能根据您的散列密码创建一个假的cookie来窃取您的账户。

帖子(Posts)

获得列表(List)

基本的URL是 /post.xml.

limit 你想要检索的帖子的数量。每个请求都有最多100个帖子的限制。
page 页数。
tags 搜索的tags。在网站上工作的任何标签组合都可以在这里工作。这包括了所有的元标记。

创建(Create)

基本的URL是 /post/create.xml.

只有两个必填的字段:您需要提供标签(tags),您需要通过多部分表单或源URL提供文件。
post[tags] 空格分隔的标签列表
post[file] 以多部分形式编码的文件数据
post[rating] 此post的评级,可以是:安全的(safe),可疑的(questionable),成人向(18+)(explicit)
post[source] 如果这是URL,Danbooru会下载此文件
post[is_rating_locked] 设置为true以防止其他人改变评级
post[is_note_locked] 设置为true以防止请他人添加注释
post[parent_id] 父post的ID
md5 如果您希望Danbooru在上传后验证该文件,请提供MD5,如果MD5不匹配,此post被销毁。

如果调用失败,可能有以下响应原因:
MD5不匹配(MD5 mismatch)这意味着你提供了一个Danbooru 无法匹配的MD5参数,尝试再次上传此文件。
重复(duplicate)这个提交请求(post)已经存在于Danbooru(基于MD5哈希)中。将设置一个名为location的附加属性,指向原提交请求的(相对)URL。
其他(other)任何其他的错误将打印出其错误消息。
如果提交请求(post)上传成功,你将会在响应中得到一个名为location属性,指向你最近上传的帖子的(相对)URL。

更新(Update)

基本URL是 /post/update.xml. 只需要id参数。如果你不想改变其他参数,则将它们留空。
id 提交请求将要更新的id
post[tags] 空格分隔的标签列表
post[file] 以多部分形式编码的文件数据
post[rating] 此post的评级,可以是:安全的(safe),可疑的(18+)(questionable),明确的(explicit)
post[source] 如果这是URL,Danbooru会下载此文件
post[is_rating_locked] 设置为true以防止其他人改变评级
post[is_note_locked] 设置为true以防止请他人添加注释
post[parent_id] 父post的ID

删除(Destroy)

您必须登录才能使用这个操作。同时,您必须是上传此帖子的用户(或者您是主持人moderator)。
id 要删除的帖子的id号.

恢复标签(Revert Tags)

此操作恢复一个帖子到之前的标签集,基本的URL是 /post/revert_tags.xml.
id 要更新的帖子的id号。
history_id 历史标签的id号。

投票(Vote)

这个操作让你给一个帖子投票。你以一个IP地址只能给一个帖子投一票。基本URL是/post/vote.xml.
id 要更新的帖子的id号。
score 设置为1来赞同,设置为-1以否定。所有其他值会被忽略。
如果调用不成功,可能因为下面的原因:
already voted 你已经给这个帖子投过票了。
invalid score 你提供了一个无效的分数。

标签(Tags)

获得列表(List)

基本URL是 /tag.xml.
limit 检索的tags的数量。将它设置为0会返回所有tag。
page 页数
order 排列顺序,可以是date, count, 或者 name
id tag的id
after_id 返回所有id比此id更大的tags
name tag的准确名字
name_pattern 搜索任何名字中包含此参数的tag
一个栗子: taglist

更新(Update)

name 要更新的标签的名称
tag[tag_type] tag类型。一般:0,艺术家:1,版权:3,角色:4
tag[is_ambiguous] 这个tag是否不明确,使用1表示不明确,使用0表示明确。

相关(Related)

基本URL是 /tag/related.xml.
tags 询问的tags名称
type 将结果限制在此tag类型,可以为general, artist, copyright,或者 character

艺术家(Artists)

获得列表(List)

基本URL是/artist.xml.
name 艺术家的名字(或名字的片段)
order 排列顺序,可以是date或者name
page 获取的页数
一个栗子: artistlist

创建(Create)

基本URL是 /artist/create.xml.
artist[name] 艺术家的名字
artist[urls] 与此艺术家相关的URLs列表,空格分隔。
artist[alias] 将创建艺术家是此字段代表艺术家的别名。只需输入别名。
artist[group] 此艺术家参与的组或圈子。只需输入该组的名称。

更新(Update)

基本URL是 /artist/update.xml. 只需要id参数,其他参数是可选的。
id 要更新的艺术家的id
artist[name] 艺术家的名字
artist[urls] 与此艺术家相关的URLs列表,空格分隔。
artist[alias] 将创建艺术家是此字段代表艺术家的别名。只需输入别名。
artist[group] 此艺术家参与的组或圈子。只需输入该组的名称。

删除(Destroy)

基本URL是 /artist/destroy.xml. 你必须登录才能删除艺术家。
id 将要删除的艺术家的id

评论(Comments)

展示评论(Show)

基本URL是 /comment/show.xml. 这将检索单个评论。
id 将要检索的评论的id

创建(Create)

基本URL是/comment/create.xml.
comment[anonymous] 如果你想匿名发表此评论,设置为1.
comment[post_id] 你此评论发表对象的id
comment[body] 评论的正文

删除(Destroy)

基本URL是 /comment/destroy.xml. 你必须登录才能使用此操作。同时你必须是此评论的发表者或者是主持人。
id 将要删除的评论的id

Wiki

所有标题必须是准确的(但是样例(case)和空格无关紧要)

获得列表(List)

基本的URL是 /wiki.xml. 这将检索所有wiki页面构成的列表。
order 你想要的页面的排列顺序。可以是:title,date
limit 要检索的总页数
page 检索特定页面的页码
query 将要搜索的一个单词或者词组
一个栗子: wikilist

创建(Create)

基本URL是 /wiki/create.xml.
wiki_page[title] 创建的wiki页面的标题
wiki_page[body] 创建的wiki页面的正文

更新(Update)

基本URL是 /wiki/update.xml. 可能的报错原因:“页面被锁定”
title 将要更新的wiki页面的原始标题
wiki_page[title] 此wiki页面的新标题
wiki_page[body] 此wiki页面的新正文

展示(Show)

基本URL是 /wiki/show.xml. 可能的报错原因:“艺术家类型”
title 将检索的wiki页面的标题
version 将检索的wiki页面的版本

删除(Destroy)

基本URL是 /wiki/destroy.xml. 你必须以创建人(moderator)身份登录才能使用此操作。
title 将删除的页面的标题

锁定(Lock)

基本URL是 /wiki/lock.xml. 你必须以创建人(moderator)身份登录才能使用此操作。
title 将锁定的页面的标题

解锁(Unlock)

基本URL是 /wiki/unlock.xml. 你必须以创建人(moderator)身份登录才能使用此操作。
title 将解锁的页面的标题

还原(Revert)

基本URL是 /wiki/revert.xml. 可能报错的原因:“页面被锁定”
title 将要更新的wiki页面的标题
version 将此页面恢复到的版本

历史(History)

基本URL是 /wiki/history.xml.
title 将要被检索历史版本的wiki页面的title

备注(Notes)

获得列表(List)

基本URL是 /note.xml.
post_id 将要检索的备注的post id 一个栗子:
notelist

搜索(Search)

基本URL是 /note/search.xml.
query 将要搜索的一个单词或词组

历史(History)

基本URL是 /note/history.xml.
你可以指定id,post_id或者什么都不指定。什么都不指定会给你一个包含所有备注当前版本信息的列表
limit 检索历史版本的数量
page 页面偏移量
post_id 将要被检索版本的备注的post id
id 将要被检索版本的备注的id

恢复(Revert)

基本URL是 /note/revert.xml. 可能的报错原因:“帖子被锁定”
id 将要被更新的备注的id
version 此备注将要恢复到的版本

创建/更新(Create/Update)

基本URL是 /note/update.xml.
备注和其他的控制器的不同点在于创建和更新的接口是相同的。如果你提供id参数,那么Danbooru会假定你正在更新一个现有的备注。
否则,它会创建一个新的备注。可能的错误原因:“帖子被锁定” id 如果你更新一个备注,这是被更新备注的id
note[post_id] 此备注属于的帖子的id
note[x] 此备注的x坐标
note[y] 此备注的y坐标
note[width] 此备注的宽度
note[height] 此备注的高度
note[is_active] 此备注是否可见,设置成1为可见,0为不可见
note[body] 此备注的信息

用户(Users)

搜索(Search)

基本URL是 /user.xml. 如果你不指定任何参数,你会得到一个包含所有用户的列表
id 用户的id
name 用户的名称
一个栗子: userlist

论坛(Forum)

获得列表(List)

基本URL是 /forum.xml. 如果你不指定任何参数,你会得到一个包含所有父级主题的列表
parent_id 父级主题id,你将会得到该论坛帖子的所有回复 一个栗子: forumlist

同主题图片集合(Pools)

列表池(List Pools)

基本URL是 /pool.xml. 如果你不指定任何参数,你会得到一个包含所有同主题图片集合的列表
query 标题
page 页面
一个栗子: poollist

帖子列表(List Posts)

基本URL是 /pool/show.xml. 如果你不指定任何参数,你会得到一个包含所有同主题图片集合的列表
id 此图片集合的id
page 图片集合的页数

更新(Update)

基本URL是 /pool/update.xml.
id 此图片集合的id
pool[name] 此图片集合的名称
pool[is_public] 值为1或0,1代表这个图片集合是公开的,0表示非公开
pool[description] 此图片集合的描述

创建(Create)

基本URL是 /pool/create.xml.
pool[name] 此图片集合的名称
pool[is_public] 值为1或0,1代表这个图片集合是公开的,0表示非公开
pool[description] 此图片集合的描述

删除(Destroy)

基本URL是 /pool/destroy.xml.
id 将要删除的图片集合的id

增加帖子(Add Post)

基本URL是 /pool/add_post.xml.
可能的报错原因:“帖子已经存在”,“访问被拒绝”
pool_id 将要添加此帖子的图片集合的id
post_id 将要添加的帖子的id

删除帖子(Remove Post)

基本URL是 /pool/remove_post.xml.
可能的错误原因:“访问被拒绝”
pool_id 将要删除此帖的图片集合的id
post_id 将要被删除的帖子的id

喜爱此图片的用户(Favorites)

喜爱此图片的用户列表(List Users)

基本URL是 /favorite/list_users.json 此操作没有XML类型的API
id 此图片帖子的id 一个栗子: favorite

更新日志(Change Log)

1.13.0+update.3

把 “/index” 从API的URLs移除

1.13.0+update.2

重新添加 “favorite/list_users” 的API

1.13.0+update.1

给同主题图片集合(Pools)添加文档

1.13.0

修改艺术家有关的接口以使用新的URL系统
JSON请求现在会以.json后缀结尾
重命名了一些错误原因信息
把 “comment/index” 从API中移除
把url和md5参数从艺术家搜索中移除(可以将URL或者MD5哈希当做名称参数传递)

1.8.1

去掉 post[is_flagged] 属性