5

Mam zestaw pełnych adresów URL, jakWikipedia Mediawiki API dostać IdStrony z 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 

Chcę znaleźć wikipedia pageids dla tych adresów URL. Użyłem API Mediawiki wcześniej, ale nie mogę zrozumieć, jak mogę to zrobić.

Próbowałem już wyodrębnić tytuł strony z adresów URL, biorąc podłańcuch ostatniegoindeksu ("/") i ostatniego znaku, a następnie wysyłając zapytanie do interfejsu API, aby uzyskać identyfikator strony.

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 

Ale problemem jest to, że niektóre z moich linków może być przekierowania i stąd podciąg nie może być zawsze tytuł strony.

TL; DR: Jak znaleźć identyfikator strony wikipedii z adresu URL?

Odpowiedz

4

Nie jestem pewien, czy to, co nazywasz "identyfikatorem strony", jest numerem identyfikacyjnym strony (np. 15580374 dla głównej strony angielskiej Wikipedii - znalezionej na "Informacje o stronie" w toobox w lewej kolumnie) lub znormalizowany tytuł strony z rozwiązanymi przekierowaniami. Poniższa odpowiedź odpowie na oba.

Możesz użyć akcji API = zapytanie, np. https://en.wikipedia.org/w/api.php?action=query&titles=Main%20Page gdzie znajdziesz minimalne informacje, których identyfikator strony (numer).

Można również zarządzać bardziej złożonymi przypadkami: normalizacją tytułu i/lub przekierowaniami. Normalizacja tytułów (kapitał początkowy, podkreślniki zmienione na spacje, różne normizacje unicode iirc itd.) Jest dołączana do zestawu. W przypadku przekierowań musisz zapytać konkretnie, dodając "przekierowania" do adresu URL (zwróć uwagę, że podwójne przekierowania (= przekierowanie przekierowania) nie będą działać, ale nie powinno tam być). Przykład: https://en.wikipedia.org/w/api.php?action=query&titles=main_page&redirects

Jeśli potrzebujesz więcej informacji, możesz przejrzeć https://en.wikipedia.org/w/api.php?action=help&modules=query%2Binfo.

+0

Dzięki za odpowiedź. Wiem o obu tych metodach, ale żadna nie pomaga mojej sprawie. W obu twoich odpowiedziach potrzebuję page_title do pracy. Nie mam page_title, mam tylko URL. Na tym polega problem. Adresów URL nie można przetłumaczyć na podstrony stron tytułowych. Również page_titles może zawierać nieanglojęzyczny kodowany UTF8 tekst.Które nie muszą znajdować się w adresie URL i pojawiają się jako pęczek transliterowanego tekstu. –

+0

Ok. Musisz więc najpierw wyodrębnić podłańcuch, jak powiedziałeś, następnie wywołać API, aby znormalizować tytuł i rozwiązać przekierowania (nawet z tytułami z kodowaniem%, takimi jak https://ar.wikipedia.org/w/api.php?action= query & prop = info & titles =% D9% 86% D8% A7% D8% B3% D8% A7), aw przypadku znaków innych niż łacińskie musisz zakodować zwracany ciąg do UTF8 (np. dla francuskiego słowa "Café" API zwraca "title": "Caf \ u00e9", gdzie "é" to Unicode U + E9). – Seb35

0

Jeśli masz tylko adres URL, a nic o wiki nie wiem, nie można zakładać, że część po ostatnim / jest tytuł strony, jak MediaWiki stron nazwisk may contain/. Zamiast tego, trzeba będzie zacząć od zapytań API siteinfo, tak:

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

w replice query.general.server i query.general.articlepath połączeniu daje strukturę URL i query.general.script daje scriptpath. W zależności od tego, skąd pochodzą adresy URL, będziesz ich potrzebować, aby uwzględnić domyślny formularz //mywiki/scriptpath/index.php?title=Namespace:Foo/Bar i krótki adres URL w postaci //mywiki/articlepath/Namespace:Foo/Bar dla artykułu o nazwie Foo/Bar.

Ukośnik w "nazwie artykułu" może być albo częścią nazwy, albo ogranicznikiem dla podstrony, w zależności od ustawień tej przestrzeni nazw!

Jeśli znasz składnię URL stron wiki pod ręką, @ Seb35 już odpowiedział na wszystkie Twoje pytania.

Powiązane problemy