如何通过API获取维基百科文章的Wikidata ID?

25
如何从英语维基百科文章名称中获取Wikidata ID,包括重定向文章?是否有API调用?
示例:
Karachi >> Q8660
Karaachi >> Q8660
如何应对任务变更?现在,卡拉奇的媒体已重定向到巴基斯坦的媒体(维基数据项Q6805922),但以后可能会有自己的文章。
3个回答

29
使用维基百科API创建一个查询,包含属性pageprops解决重定向
https://en.wikipedia.org/w/api.php?action=query&prop=pageprops&ppprop=wikibase_item&redirects=1&titles=ARTICLE_NAME

对于维基百科文章中的"卡拉奇媒体""巴基斯坦媒体",您将获得相同的维基数据项ID:Q6805922"Karaachi""Karachi"也是如此→ Q8660


你如何实现相反的操作?也就是说,当你只有Wikidata ID时,如何获取文章? - t-bone
1
https://dev59.com/9loU5IYBdhLWcg3wzZLw#37086915 - Termininja
它在例如Isabel_II_del_Reino_Unido方面无法正常工作。 - Leandro Bardelli
@Termininja 是的,谢谢,我想可以通过名称查找任何实体,而不使用维基语言规范。 - Leandro Bardelli

4
除了采用已接受的答案,您也可以直接使用Wikidata API,并传递站点和标题。
文档在https://www.wikidata.org/w/api.php?action=help&modules=wbgetentities
获取http://en.wikipedia.org/wiki/Karachi实体:
1. 如果您知道确切的标题:https://www.wikidata.org/w/api.php?action=wbgetentities&sites=enwiki&titles=Karachi
2. 通过标题规范化进行字符首字母大写修复和下划线(以及可能更多):https://www.wikidata.org/w/api.php?action=wbgetentities&sites=enwiki&titles=Karachi&normalize=1

你有使用“normalize”参数解决问题的例子吗? - maxlath
1
是的,一个简单的例子就是titles=karachi不会返回结果,因为标题应该大写,normalize=1可以解决这个问题。我会更新答案。 - Addshore
如果你指的是英文维基百科,你只需要将“enwiki”部分更改为其他维基语言,例如德文维基百科“dewiki”。 - Addshore

2

我需要在Google Sheets中完成此操作,并使用以下公式实现。假定维基百科标题位于B列。复制到所需的行。

=IMPORTXML(concat("https://en.wikipedia.org/w/api.php?action=query&prop=pageprops&ppprop=wikibase_item&redirects=1&format=xml&titles=",B1),"//@wikibase_item")

另一个建议是使用转储文件https://dumps.wikimedia.org/enwiki/latest/enwiki-latest-page_props.sql.gz,压缩后大小为230Mb。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接