Jump to content

Wikibase/API

From mediawiki.org
This page is a translated version of the page Wikibase/API and the translation is 100% complete.
MediaWiki版本:
1.9

Wikibase API是什么?

Wikibase提供了一种将陈述转化为结构化数据的机制。 有关项目的详细说明请参阅wikidata.org。 参阅Wikidata:Glossary以获取更多关于Wikibase的信息。

一个陈述

Wikibase API允许查询、添加、删除和编辑Wikidata或任何其他Wikibase实例上的信息。

它是通过一组对MediaWiki API模块的扩展提供的。 要使用Wikibase API,您至少要对MediaWiki 行动API有一定基础了解:行为、查询等,反过来说,以及诸如curtimestamprequestid之类的通用参数。

怎样使用Wikibase API?

与MediaWiki Action API一样,通过HTTP向API发送请求。 有关如何使用MediaWiki Action API的信息,请参阅API:Tutorial#How to use it

请求格式

API终端位于https://wikidata.org/w/api.php。

在查询字符串中添加action参数,该参数用于告知API需要执行的操作。 例如,action=wbgetentities指示API获取Wikibase实体的相关数据。 对于元数据和属性子模块,分别使用action=query&meta=yourmoduleaction=query&prop=modulename

有些参数几乎总是可用。如果某个参数可以取多个值,则使用复数形式。这些参数包括:

  • id/ids: 用于标识一个或多个特定的“实体”,通常指“项目”。在“wbgetentities”命令中使用复数形式。ID列表应使用竖线字符分隔。
  • site ∩ title/sites ∩ titles: 用于标识单个或多个项目。在“wbgetentities”中,使用复数形式。 “sites”和“titles”中只有一个可以同时包含多个值。
  • language/languages: 语言参数用于过滤获取操作中的标签和描述,或指定一组操作的特定语言。
  • format: 应始终设置为“json”(或用于调试的“jsonfm”),或“xml”(或用于调试的“xmlfm”)。不支持其他格式。
  • summary: 在系统生成的编辑摘要之后添加用户指定的编辑摘要。
  • token: 请求者必须传递一个加密字符串,请求才能得以完成。
  • baserevid: 必须传递最后一个已知版本的ID,以便服务器能够检测到编辑冲突。

一个简单的查询

GET请求

获取英文维基百科页面“Berlin”的相关项目。

URL每部分的解释:

  • http://www.wikidata.org/w/api.php是主要终端。
  • action=wbgetentities告诉API获得Wikibase实体的数据。
  • sites=enwiki表示从英文维基百科获取数据。
  • titles=Berlin 表示获取数据页面的标题。
  • props=descriptions 表示要从实体中获取的属性,在本例中,该属性是实体的描述。
  • languages=en 表示将结果筛选为英语版本。
  • format=json 表示输出格式为JSON,这是推荐的输出格式。

响应

{
    "entities": {
        "Q64": {
            "type": "item",
            "id": "Q64",
            "descriptions": {
                "en": {
                    "language": "en",
                    "value": "capital and largest city of Germany"
                }
            }
        }
    },
    "success": 1
}

请求的响应通常包含:

  • 如果请求成功,则返回一个键名为success的键值对,其值为布尔值转换为整数后的结果。如果该整数为零,则其他附加值可能不正确。
  • 如果请求失败,则返回一个名为error的键,其值为一个包含两个(可选地包含三个)键的对象,分别是codeinfo*
  • 关于此操作的信息。这些信息可以直接在顶层传递,如果只有一个项目,则在“item”字段下传递;如果有多个项目,则在“items”字段下传递。如果包含多个项目,则每个项目都位于以其各自项目ID为键的字段下。

空对象会以JSON数组的形式返回,而不是以对象的形式返回;而空参数会从项目中“删除”实际条目。

API文档和Wikibase模块

MediaWiki Action API(包括Wikibase的“wb”API模块)的自动生成文档可在wikidata.org/w/api.php处获取。

元模組

  • wikibase: ⧼Apihelp-query+wikibase-description⧽
  • wbcontentlanguages: 回传有关在不同语境里所接受内容语言Wikibase的信息。

屬性子模組

  • pageterms: ⧼Apihelp-query+pageterms-description⧽
  • wbentityusage: ⧼Apihelp-query+wbentityusage-description⧽

API模組

可能的错误

任何模块的可能的错误可以用action=paraminfo&modules=modulename找到。 错误格式与MediaWiki Action API的格式一致。 请参阅 API:Errors and warnings#Legacy format

Wikibase模块的所有错误消息都应该进行国际化(i18n)和本地化(l10n)。已登录用户的语言将作为错误消息的默认语言,但您可以通过在URL查询字符串中添加uselang=languageCode来覆盖此设置。

错误类型 代码 信息
An internationalized error message that isn't localized. no-such-item <wikibase-api-no-such-item>
A correctly localized error message. no-such-item There are no such item to be found
A localized variant.(Norwegian) no-such-item Det finnes ingen slik item

附加提醒

  • 许多维基媒体wiki都运行Wikibase客户端扩展程序。这使得这些维基上的API客户端能够查询wikibase元子模块,以确定完整的Wikibase存储库的URL,并使用pageterms属性子模块获取有关本地维基页面的一些Wikidata信息。
  • 可用于Wikibase的日历模型包括公历(d:Q1985727)和儒略历(d:Q1985786)。
  • 该API使用修订版本ID来检测编辑冲突。如果发生编辑冲突,请求者必须获取较新的修订版本ID 能继续操作。这通常需要调用wbgetentities方法获取相关项目的信息,然后存储(并使用)该项目的修订版本ID。
  • 任何MediaWiki安装都可以运行Wikibase。在维基媒体集群中,大多数维基站点并未运行全套Wikibase扩展程序。 维基共享资源拥有自己的Wikibase数据库,用于存储共享资源上文件的属性信息。
  • 不要测试info的值是否存在特定错误,而应使用code的值,因为该值不受本地化影响。

参阅