2009-10-26 14 views
47

Jestem całkiem nowy w MediaWiki, a teraz mam mały problem. Mam tytuł pewnej strony Wiki i chcę uzyskać tylko tekst tej strony za pomocą api.php, ale wszystko, co znalazłem w interfejsie API, jest sposobem na uzyskanie zawartości Wiki na stronie (ze znacznikami wiki). Użyłem tego żądania HTTP ...Pobierz zawartość tekstową ze strony mediawiki za pośrednictwem interfejsu API

/api.php?action=query&prop=revisions&rvlimit=1&rvprop=content&format=xml&titles=test 

Ale potrzebuję tylko treści tekstowych bez znaczników Wiki. Czy to możliwe z interfejsem API MediaWiki?

Odpowiedz

4

Nie sądzę, że jest to możliwe przy użyciu interfejsu API aby uzyskać tylko tekst.

To, co zadziałało, to poprosić o stronę HTML (używając normalnego adresu URL, który używałbyś w przeglądarce) i usunąć znaczniki HTML w dziale treści.

EDIT:

miałem dobre wyniki przy użyciu HTML Parser dla Javy. Zawiera przykłady usuwania tagów HTML pod podanym DIV.

+0

mam zrobić, to samo, mam aplikacji Java, które muszą otrzymywać treść tekstowa strony wiki. Kiedy używam api i otrzymuję stronę wikisyntax działa bardzo szybko, ale potrzebuję czystego tekstu, próbowałem zażądać strony HTML i usunąć znaczniki HTML, ale działa powoli, dlatego pytam o tę funkcję w interfejsie wiki API . A może teraz jakiś dobry konwerter tekstu wikisyntax dla Javy, a następnie mogę przekonwertować go bezpośrednio w Javie? –

+2

Prawdziwym problemem z językiem wikipedii jest to, że Turing jest kompletny. Jeśli przyjrzysz się dokładnie kodowi strony, zauważysz wszystkie rodzaje niestandardowych funkcji. Definicje tych funkcji również muszą zostać pobrane, a następnie zinterpretowane, co może rozszerzyć się na jeszcze więcej funkcji. Właśnie dlatego powróciłem do parsowania html, który zawiera kompletny, wyrenderowany tekst. –

+2

WIKITekst MediaWiki nie jest w pełni ukończony, ponieważ twórcy odważnie zwalczali żądania redaktorów dotyczące konstrukcji pętli. Ale masz rację, że aby uzyskać zwykły tekst z MediaWiki, musisz pobrać kod HTML, a następnie go usunąć. Możesz użyć tego narzędzia 'html2txt.pl' zrobionego w Perlu dla tego zadania lub przekonwertować je na twój ulubiony język: https://gist.github.com/751910 – hippietrail

0

Strony wiki bez symboli formatujących w wielu przypadkach nie miałyby większego sensu.

Możesz samemu usunąć formatowanie, ale zepsuć niektóre rzeczy.

(chyba, że ​​tworzą coś w wyszukiwarce, w takim przypadku będziesz potrzebować tylko części tekstu i może ignorować formatowania symboli całkowicie)

60

Zastosowanie action=parse uzyskać HTML:

/api.php?action=parse&page=test

jeden sposób, aby uzyskać tekst z html byłoby załadować go do przeglądarki i chodzić węzły, patrząc tylko dla węzłów tekstowych, używając JavaScript.

+4

'action = parsse' może również zwrócić JSON, dodając' format = json'. – scai

33

Rozszerzenie TextExtracts API ma o co pytasz. Użyj prop=extracts, aby uzyskać odpowiedź oczyszczoną. Na przykład this link will give you cleaned up text for the Stack Overflow article. Co jest również miłe, to nadal zawiera tagi sekcji, dzięki czemu można zidentyfikować poszczególne sekcje artykułu.

Wystarczy zawierać widoczny odnośnik w mojej odpowiedzi, powyższy link wygląda następująco:

/api.php?format=xml&action=query&prop=extracts&titles=Stack%20Overflow&redirects=true 

Edit: Jak wspomniano Amr, TextExtracts jest przedłużenie do MediaWiki, więc niekoniecznie będzie dostępny dla każdej witryny MediaWiki.

+1

Idealnie! Dziękuję Ci! –

+5

TextExtracts jest rozszerzeniem do MediaWiki. Jest dostępny dla Wikipedii, ale nie dla każdej instalacji MediaWiki. https://www.mediawiki.org/wiki/Extension:TextExtracts – Amr

23

Dodanie ?action=raw na końcu strony MediaWiki zwraca ostatnią treść w formacie nieprzetworzonego tekstu. Np .: - https://en.wikipedia.org/wiki/Main_Page?action=raw

+0

Próbowałem tego na stronie nie na wikipedii, i to nie działało. Czy to wymaga rozszerzenia? –

+0

Wydaje się, że działa tylko dla angielskiej Wikipedii - patrz [przykład] (https://de.wikipedia.org/wiki/Eurofighter_Typhoon%26action%3Draw) –

+1

@MartinThoma Jeśli zmienisz '% 26action% 3Draw' na'? Action = raw', działa. – KST

20

Możesz pobrać dane wiki w formacie tekstowym z API przy użyciu parametru explaintext. Dodatkowo, jeśli potrzebujesz dostępu do wielu informacji o tytułach, możesz uzyskać wszystkie dane wiki tytułów w jednym wywołaniu. Użyj znaku potoku |, aby oddzielić każdy tytuł.Na przykład, to wywołanie API zwróci dane zarówno od "Google" i na stronach "yahoo":

http://en.wikipedia.org/w/api.php?format=json&action=query&prop=extracts&exlimit=max&explaintext&exintro&titles=Yahoo|Google&redirects= 

Parametry:

  • explaintext: Powrót wyciągi w postaci zwykłego tekstu zamiast ograniczonej HTML.
  • exlimit=max: Zwróć więcej niż jeden wynik. Obecnie maksymalna wartość to 20.
  • exintro: Powoduje wyświetlenie tylko zawartości przed pierwszą sekcją. Jeśli chcesz pełne dane, po prostu to usuń.
  • redirects=: Rozwiązywanie problemów z przekierowaniem.
+1

To jest po prostu idealne. Dzięki – Darkbluesea

+0

To da ci tylko pierwszą sekcję, a nie cały tekst artykułu –

-4

Możesz zrobić jedną rzecz po przeniesieniu treści na twoją stronę - możesz użyć funkcji PHP strip_tags(), aby usunąć znaczniki HTML.

0

użytkowników Python pochodzące na to pytanie może być zainteresowany w module wikipedia (docs):

import wikpedia 
wikipedia.set_lang('de') 
page = wikipedia.page('Wikipedia') 
print(page.content) 

Każdy formatowanie, z wyjątkiem sekcji (==) jest rozłożony dalej.