2009-10-26 33 views
47

私はMediaWikiが新しく、今は少し問題があります。 私はいくつかのWikiページのタイトルを持っていますが、api.phpを使って上記のページのテキストを取得したいのですが、私がAPIで見つけたのはページのWikiコンテンツを取得する方法ですwikiマークアップ付き)。私はこのHTTPリクエストを使用しました...テキストコンテンツをMediaWikiページからAPI経由で取得

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

しかし、私はWikiマークアップなしでテキストコンテンツのみが必要です。 これはMediaWiki APIで可能ですか?

答えて

4

(あなたがテキストのみの部品が必要になりますし、完全にフォーマットするシンボルを無視することができ、その場合には、検索エンジンのようなものを、作成している場合を除き)私はそれがAPIを使用して可能であるとは思いませんちょうどテキストを取得する。

私にとっては、(ブラウザで使用する通常のURLを使用して)HTMLページをリクエストし、コンテンツdivの下にあるHTMLタグを取り除くことでした。

EDIT:

私は、JavaのためのHTML Parserを使用して良い結果を持っていました。それは与えられたDIVの下でHTMLタグを取り除く方法の例を持っています。 HTMLからテキストを取得する1つの方法は、ブラウザにロードし、ノードを歩いて、唯一のテキストノードを探して、使用することです

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

:HTMLを取得する

+0

https://wiki.eclipse.org/Tip_of_the_Day/Eclipse_Tips/Now_where_was_I?action=render

を、私は受け取る必要がありますJavaアプリケーションを、持っていますwikiページのテキストコンテンツ。私はAPIを使用し、wikisyntaxページを受け取ると非常に速く動作しますが、明確なテキストが必要です.HTMLページを要求してHTMLタグを取り除こうとしましたが、ゆっくりと動作するため、wiki API 。または多分あなたは今Javaのためのいくつかの良いwi​​kisyntaxクリアテキストコンバータ、次にJavaで直接変換することができますか? –

+2

wikipediaの言語に関する実際の問題は、それが完全なチューリングだということです。ページのコードを注意深く見ると、あらゆる種類のカスタム関数に気づくでしょう。それらの関数の定義も同様にフェッチされ、解釈されなければならず、さらに多くの機能に拡張される必要があります。そのため、完全なレンダリングされたテキストを含むhtml解析に戻りました。 –

+2

MediaWikiのwikitextは、開発者がループ構築物に対する編集者の要求を勇敢に戦ってきたため、完全にチューリングしていません。しかし、MediaWikiからプレーンテキストを取得するには、HTMLを取得してそれを取り除く必要があります。その仕事のために私がPerlで作った 'html2txt.pl'ツールを使ってみたり、あなたの好きな言語に変換したりすることができます:https://gist.github.com/751910 – hippietrail

0

多くの場合、書式設定記号のないWikiページは実際にはあまり意味がありません。

必要に応じて書式を取り除くことはできますが、処理の中にはいくつかの問題があります。

8

。クリーンアップされた応答を得るには、prop=extractsを使用してください。たとえば、this link will give you cleaned up text for the Stack Overflow articleです。また、記事の個々のセクションを識別できるようにセクションタグが含まれていることもうれしいです。

ちょうど私の答えに目に見えるリンクが含まれるように、上記のリンクは次のようになります。

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

編集:アムルが述べたように、TextExtractsはMediaWikiのに拡張なので、それは必ずしも利用できませんMediaWikiサイトごとに

+2

残念ながら、これはMediaWikiマークアップを返します。これは、テキストを取得するために解析する必要があります。 – lightyrs

33

APIのTextExtractsの拡張子は、あなたが求めているものについて行います。最も簡単な方法です

+1

パーフェクト!ありがとうございました! –

+5

TextExtractsはMediaWikiの拡張機能です。 Wikipediaでは利用可能ですが、MediaWikiのすべてのインストールで利用できるわけではありません。 https://www.mediawiki.org/wiki/Extension:TextExtracts – Amr

23

MediaWikiページの最後に?action=rawを追加すると、最新のコンテンツが生のテキスト形式で返されます。例:https://en.wikipedia.org/wiki/Main_Page?action=raw

+0

私はウィキペディアではないページでこれを試しましたが、うまくいきませんでした。これには拡張機能が必要ですか? –

+0

それだけで英語版ウィキペディアのために働くようだ - ?あなたは 'アクションに'%26action%3Draw'を変更した場合は、[例](https://de.wikipedia.org/wiki/Eurofighter_Typhoon%26action%3Draw) –

+1

@MartinThomaを見ます=生 '、それは動作します。 – KST

20

explaintextパラメータを使用すると、APIからテキスト形式のwikiデータを取得できます。さらに、多くのタイトルの情報にアクセスする必要がある場合は、すべてのタイトルのwikiデータを1回の呼び出しで取得できます。各タイトルを区切るには、パイプ文字|を使用します。

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

パラメータ:

  • explaintext:たとえば、このAPIの呼び出しは、「グーグル」と「ヤフー」ページの両方からのデータを返します戻り値は、プレーンテキストの代わりに、限られたHTMLとして抽出します。
  • exlimit=max:複数の結果を返します。最大は現在20です。
  • exintro:最初のセクションの前の内容のみを返します。完全なデータが必要な場合は、これを削除してください。
  • redirects=:リダイレクトの問題を解決します。
+1

これはちょうど完璧です。ありがとう – Darkbluesea

+0

これは記事全体のテキストではなく最初のセクションだけを表示します –

-4

内容がページに持ち込まれた後で、1つのことを行うことができます。PHP関数strip_tags()を使用してHTMLタグを削除できます。セクション(==)を除いて離れてストライピングされ

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

すべての書式設定、:

0

この質問に来るのPythonユーザーがwikipediaモジュール(docs)に興味があるかもしれません。

関連する問題