查询多种语言的维基百科url



我试图使用维基数据作为中介,从维基数据中列出的唯一标识符(例如VIAF ID)到维基百科描述。

我已经设法拼凑这个查询,从给定的VIAF ID ("153672966"下面是"南伊利诺伊大学出版社"的VIAF ID)获得维基百科页面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" .
}
}

这导致我能够在维基百科API中查找的页面id9393762,并使用此请求获得我需要的介绍文本:

https://en.wikipedia.org/w/api.php?format=json&action=query&prop=extracts&exintro&explaintext&redirects=1&pageids=9393762

结果响应包括一个未解析的描述(explaintext),取自维基百科文章的第一部分,所以这让我得到了我需要的语言是英语。

现在的问题是,我需要在一个国际化的网站上使用它,我甚至可能不知道未来可能使用哪些语言。对Wikidata的查询应该在后端作为批处理作业运行,而从Wikipedia获取实际描述将从前端完成,并以异步方式呈现。

理想情况下,我希望Wikidata查询返回每个给定语言的pageid,其中有一个维基百科文章可用。在前端,我会检查当前活动语言是否有一个pageid相关联,并调用维基百科api或呈现一个回退,如果没有pageid给出。

在未来,我需要对其他与库相关的标识符(例如ISNI)进行类似的查询,但我不认为这与当前的用例有太大的不同。

这是一个合理的方式来完成工作,我如何扩展它以支持多种语言?

要获得解释性文本,您不一定需要pageid,但页面标题就足够了。

您通过以下查询从维基数据获得的所有语言的页面标题:

SELECT ?item ?title ?site WHERE {
?item wdt:P214 "153672966" .
[ schema:about ?item ; schema:name ?title ;
schema:isPartOf ?site ] . 
}

之后你可以使用维基百科API获取explaintext:

https://en.wikipedia.org/w/api.php?format=json&action=query&prop=extracts&exintro&explaintext&redirects=1&titles=Southern Illinois University Press

使用页面标题的缺点是它们不稳定。因此,您需要定期运行批处理作业来检查文章的重命名。

最新更新