Wikipedia Mediawiki API从URL获取Pageid

Shr*_*van 9 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
Run Code Online (Sandbox Code Playgroud)

我想找到这些URL的维基百科pageid.我之前使用过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
Run Code Online (Sandbox Code Playgroud)

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

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

Seb*_*b35 7

我不确定你所谓的"页面ID"是否是页面的标识号(例如英语维基百科主页的15580374 - 在左栏中的toobox中的"页面信息"中找到)或页面的标准化标题重定向已解决.下面的答案将回答两者.

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

您还可以管理更复杂的案例:标题规范化和/或重定向.标题化规范化(初始资本,下划线改为空格,各种unicode normalisations iirc等)包含在开箱即用中.对于重定向,您必须通过向URL添加"&redirects"来具体询问(请注意,双重重定向(=重定向的重定向)将不起作用,但不应该在那里).示例: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.


小智 5

您可以将 &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,您将在 query 下看到一个名为 pageids 的属性