Wikipedia Mediawiki API从URL获取Pageid

时间:2015-07-28 17:43:03

标签: mediawiki wikipedia-api mediawiki-api mediawiki-extensions

我有一套像

这样的完整网址
http://en.wikipedia.org/wiki/Episkopi_Bay
http://en.wikipedia.org/wiki/Monte_Lauro
http://en.wikipedia.org/wiki/Lampedusa
http://en.wikipedia.org/wiki/Himera
http://en.wikipedia.org/wiki/Lago_Cecita
http://en.wikipedia.org/wiki/Aspromonte

我想为这些网址找到 维基百科网页 。我之前使用过Mediawiki API,但我无法弄清楚如何做到这一点。

我尝试通过获取lastindexof(" /")的子字符串和最后一个字符从URL中提取页面标题,然后查询API以获取pageid。

http://en.wikipedia.org/wiki/Episkopi_Bay --> Episkopi_Bay
http://en.wikipedia.org/wiki/Monte_Lauro --> Monte_Lauro
http://en.wikipedia.org/wiki/Lampedusa -- > Lampedusa
http://en.wikipedia.org/wiki/Himera --> Himera
http://en.wikipedia.org/wiki/Lago_Cecita --> Lago_Cecita
http://en.wikipedia.org/wiki/Aspromonte --> Aspromonte

但问题是我的一些链接可能是重定向,因此子字符串可能并不总是页面的标题。

TL; DR:如何从网址中找到维基百科页面的pageid?

4 个答案:

答案 0 :(得分:6)

我不确定你打电话是什么"页面ID"是页面的标识号(例如,英语维基百科主页面的15580374 - 在"页面信息"左栏中的toobox中找到)或已解析重定向的页面的标准化标题。下面的答案将回答两者。

您可以使用API​​ action = query,例如https://en.wikipedia.org/w/api.php?action=query&titles=Main%20Page您将在其中找到最少的信息,其页面ID(数字)。

您还可以管理更复杂的案例:标题规范化和/或重定向。标题化规范化(初始资本,下划线改为空格,各种unicode normalisations iirc等)包含在开箱即用中。对于重定向,您必须通过添加"& redirects"来具体询问。到URL(请注意,双重重定向(=重定向的重定向)将不起作用,但不应该在那里)。示例:https://en.wikipedia.org/w/api.php?action=query&titles=main_page&redirects

如果您需要更多信息,可以查看https://en.wikipedia.org/w/api.php?action=help&modules=query%2Binfo

答案 1 :(得分:3)

您可以在查询中添加&indexpageids。

例如

https://en.wikipedia.org/w/api.php?action=query&format=json&titles=Main%20Pages&indexpageids

或者如果您要同时查找摘要,请参见以下更全面的示例链接:

https://en.wikipedia.org/w/api.php?action=query&format=json&titles=barberton%20daisy&prop=extracts&exintro&explaintext&redirects=1&indexpageids

然后,如果您解析JSON,则会在查询下看到一个名为pageids的属性

答案 2 :(得分:0)

如果您只有URL,并且对wiki一无所知,则不能假设最后/之后的部分是页面标题,因为MediaWiki页面名称为may contain {{ 1}}。相反,您必须首先查询siteinfo API,如下所示:

/

在回复中,https://www.mediawiki.org/wiki/API:Siteinfo query.general.server合并将为您提供网址结构,query.general.articlepath将为您提供scriptpath。对于名为query.general.script的文章,根据您的网址来源,您需要展位,帐户的默认格式//mywiki/scriptpath/index.php?title=Namespace:Foo/Bar和短网址格式//mywiki/articlepath/Namespace:Foo/Bar

更糟糕的是,“文章名称”中的斜杠可以是名称的一部分,也可以是子页面的分隔符,具体取决于该名称空间的设置!

如果您知道手头的wiki的url语法,@ Seb35已经回答了您的所有问题。

答案 3 :(得分:0)

使用action=query进行API调用会给您文章的pageid

https://xx.wikipedia.org/w/api.php?action=query&format=json&titles=searched_title

提供类似JSON的

{
    "batchcomplete": "",
    "query": {
        "pages": {
            "xxxx": {
                "pageid": xxxx,
                "ns": 0,
                "title": "searched_title"
            }
        }
    }
}