如何通过单次API调用获取多语言维基百科的页面ID与Wikidata ID?
解决维基百科API多语言页面信息查询问题
没问题,我来帮你搞定这个维基百科API的调用问题!
你之前的调用存在一个关键错误:重复使用了prop参数,维基API会自动覆盖重复的参数,导致你只能拿到最后一个prop指定的数据(也就是langlinks),而丢失了pageprops的内容。正确的做法是把多个需要的属性用竖线|合并到同一个prop参数里。
第一步:修正基础调用,获取Wikidata条目和多语言标题
先使用这个修正后的API调用,它会同时返回英文页面的Wikidata条目ID,以及对应德语、法语版本的页面标题:
https://en.wikipedia.org/w/api.php?action=query&prop=pageprops|langlinks&ppprop=wikibase_item&lllang=de&lllang=fr&redirects=1&format=xml&titles=Cat
参数说明:
prop=pageprops|langlinks:同时请求页面属性和语言链接数据ppprop=wikibase_item:只返回Wikidata条目ID这个页面属性lllang=de&lllang=fr:指定要获取德语和法语的语言链接redirects=1:自动处理重定向,确保拿到正确的页面数据
第二步:获取多语言页面的ID
如果你还需要德语、法语页面本身的页面ID,可以用以下两种方式:
方式一:在同一个英文API调用中批量查询
直接在titles参数里加上语言前缀(de:代表德语维基,fr:代表法语维基),同时请求info属性来获取页面ID:
https://en.wikipedia.org/w/api.php?action=query&prop=pageprops|info&ppprop=wikibase_item&redirects=1&format=xml&titles=Cat|de:Katze|fr:Chat
这个调用会一次性返回三个页面的信息:
- 各自的
pageid(页面ID) - 统一的
wikibase_item(所有语言页面对应的Wikidata条目是同一个,比如Q146)
方式二:调用目标语言的维基API
如果你更偏好直接调用对应语言的维基站点API,比如获取德语页面信息:
https://de.wikipedia.org/w/api.php?action=query&prop=pageprops&ppprop=wikibase_item&redirects=1&format=xml&titles=Katze
法语页面的调用只需替换域名为fr.wikipedia.org,标题换成Chat即可。
小提示
如果是在编程中处理数据,建议把format=xml换成format=json,JSON格式的数据会更易于解析和处理。
内容的提问来源于stack exchange,提问作者slal
相关产品推荐
相关产品推荐

