5

У меня есть набор полных адресов, какВикипедия Mediawiki API получить PageId из URL

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 

Я хочу найти Википедии pageids для этих URLS. Раньше я использовал API Mediawiki, но не могу понять, как это сделать.

Я попытался извлечь заголовок страницы из URL, взяв подстроку lastindexof ("/") и последнего символа, а затем запросив 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: Как я могу найти страницу страницы wikipedia из URL-адреса?

ответ

4

Я не уверен, что то, что вы называете «id страницы», является идентификационным номером страницы (например, 15580374 для главной страницы Википедии - на странице «Информация о странице» в toobox в левой колонке) или нормализованное название страницы с разрешенными переадресациями. Ответ ниже ответит на оба.

Вы можете использовать API action = query, например. https://en.wikipedia.org/w/api.php?action=query&titles=Main%20Page, где вы найдете минимальную информацию, чей идентификатор страницы (номер).

Вы также можете управлять более сложными случаями: нормализация названия и/или переадресация. Нормализация названия (начальный капитал, символы подчеркивания, измененные на пробелы, различные нормализации юникода iirc и т. Д.) Включены в комплект. Для переадресации вы должны спросить, добавив в адрес « переадресации» (обратите внимание, что двойные переадресации (= перенаправление перенаправления) не будут работать, но не должны быть там). Пример: 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.

+0

Спасибо за ответ. Я знаю обо всех этих методах, но никто не помогает моему делу. В обоих ваших ответах мне нужен page_title для работы. У меня нет page_title, у меня есть только URL. Вот в чем проблема. URL-адреса не могут быть переведены на page_titles подстрокой. Также page_titles может содержать неанглийский текст в кодировке UTF8.Который не обязательно будет присутствовать в URL-адресе и отображается как куча транслитерированного текста. –

+0

Хорошо. Таким образом, вы должны сначала извлечь подстроку, как вы сказали, затем вызвать API для нормализации заголовка и разрешения перенаправления (даже с% -encoded титров, таких как https://ar.wikipedia.org/w/api.php?action= query & prop = info & title =% D9% 86% D8% A7% D8% B3% D8% A7), а в случае нелатинских символов вы должны закодировать возвращенную строку на UTF8 (например, для французского слова «Café» API возвращает «title»: «Caf \ u00e9», где «é» - Unicode U + E9). – Seb35

0

Если у вас есть только URL, и ничего о вики не знаете, вы не можете предположить, что часть после последнего / является титульный лист, так как MediaWiki страниц имен may contain/. Вместо этого, вам придется начать с запрашивая siteinfo API, например:

https://www.mediawiki.org/wiki/API:Siteinfo 

В ответе, query.general.server и query.general.articlepath комбинированных даст вам структуру URL-адрес, и query.general.script даст вам scriptpath. В зависимости от того, откуда пришел ваш url, вам понадобится их стенд, чтобы учесть форму по умолчанию //mywiki/scriptpath/index.php?title=Namespace:Foo/Bar, а короткую форму url //mywiki/articlepath/Namespace:Foo/Bar для статьи с именем Foo/Bar.

Чтобы ухудшить ситуацию, косая черта в названии статьи может быть либо частью имени, либо разделителем для подстраницы, в зависимости от настроек этого пространства имен!

Если вы знаете синтаксис URL-адресов вики, под рукой, Seb35 уже ответил на все ваши вопросы.

Смежные вопросы