如何解决以多种语言查询维基百科网址的维基数据
我正在尝试使用维基数据作为中介,从维基数据中列出的唯一标识符(例如 VIAF ID)获取维基百科描述。
我已设法将这个查询拼凑起来,以从给定的 VIAF ID 中获取维基百科页面 ID(下面的 "153672966"
是“南伊利诺伊大学出版社”的 VIAF ID):
SELECT ?pageid WHERE {
?item wdt:P214 "153672966".
[ schema:about ?item ; schema:name ?name ;
schema:isPartOf <https://en.wikipedia.org/> ]
SERVICE wikibase:mwapi {
bd:serviceParam wikibase:endpoint "en.wikipedia.org" .
bd:serviceParam wikibase:api "Generator" .
bd:serviceParam mwapi:generator "allpages" .
bd:serviceParam mwapi:gapfrom ?name .
bd:serviceParam mwapi:gapto ?name .
?pageid wikibase:apIoUtput "@pageid" .
}
}
这会产生 pageid 9393762
,我可以在 Wikipedia API 中查找它并使用此请求获取我需要的介绍文本:
https://en.wikipedia.org/w/api.PHP?format=json&action=query&prop=extracts&exintro&explaintext&redirects=1&pageids=9393762
生成的响应包含取自维基百科文章第一部分的未解析描述 (explaintext
),因此这让我知道需要使用英语。
现在的问题是我需要在一个国际化的网站上使用它,在那里我可能甚至不知道将来可能会使用哪些语言。针对 Wikidata 的查询应该在后端作为批处理作业运行,而从 Wikipedia 获取实际描述将从前端完成并异步呈现。
理想情况下,我希望维基数据查询为有维基百科文章可用的每种给定语言返回一个 pageid
。在前端,我将检查当前活动语言是否具有关联的 pageid
并调用 Wikipedia api 或在未给出 pageid
时呈现回退。
将来我需要使用其他库相关标识符(例如 ISNI)进行类似查询,但我认为这与当前用例没有太大不同。
这是完成工作的合理方式吗?我该如何扩展它以支持多种语言?
解决方法
要获得说明文本,您不一定需要 pageid
,但页面标题就足够了。
您通过以下查询从维基数据获得的所有语言的页面标题:
SELECT ?item ?title ?site WHERE {
?item wdt:P214 "153672966" .
[ schema:about ?item ; schema:name ?title ;
schema:isPartOf ?site ] .
}
然后你可以使用维基百科 API 来获取解释文本:
https://en.wikipedia.org/w/api.php?format=json&action=query&prop=extracts&exintro&explaintext&redirects=1&titles=Southern Illinois University Press
使用页面标题的缺点是它们不稳定。因此,您需要定期运行批处理作业以检查文章的重命名。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。