APIを介してmediawikiページからテキストコンテンツを取得する
-
06-07-2019 - |
質問
私はMediaWikiを初めて使用しますが、少し問題があります。 Wikiページのタイトルがあり、 api.php を使用して、そのページのテキストだけを取得したいのですが、APIで見つけたのは、Wikiコンテンツを取得する方法だけですページの(wikiマークアップ付き)。このHTTPリクエストを使用しました...
/api.php?action=query&prop=revisions&rvlimit=1&rvprop=content&format=xml&titles=test
しかし、Wikiマークアップのないテキストコンテンツのみが必要です。 MediaWiki APIで可能ですか?
解決
テキストを取得するためにAPIを使用することは不可能だと思います。
私にとっては、HTMLページをリクエストし(ブラウザで使用する通常のURLを使用)、コンテンツdivの下のHTMLタグを削除することでした。
編集:
Java用の HTMLパーサーを使用して、良い結果が得られました。特定のDIVでHTMLタグを取り除く方法の例があります。
他のヒント
action = parse
を使用してhtmlを取得します:
/api.php?action=parse&page=test
>htmlからテキストを取得する1つの方法は、JavaScriptを使用して、テキストをブラウザーにロードし、ノードをウォークして、テキストノードのみを検索することです。
APIのTextExtracts拡張機能は、ユーザーが求めていることを実行します。 prop = extracts
を使用して、クリーンアップされた応答を取得します。たとえば、このリンクは、 Stack Overflowの記事のテキストを作成します。また、セクションタグが含まれているため、記事の個々のセクションを識別できます。
回答に表示可能なリンクを含めると、上記のリンクは次のようになります。
/api.php?format=xml&action=query&prop=extracts&titles=Stack%20Overflow&redirects=true
編集:Amrが述べたように、TextExtractsはMediaWikiの拡張機能であるため、必ずしもすべてのMediaWikiサイトで利用できるとは限りません。
MediaWikiページの最後に?action = raw
を追加すると、最新のコンテンツが生のテキスト形式で返されます。例:- https://en.wikipedia.org/wiki/Main_Page?action=raw
explaintext
パラメーターを使用して、APIからテキスト形式のWikiデータを取得できます。さらに、多くのタイトルの情報にアクセスする必要がある場合は、1回の呼び出しですべてのタイトルのwikiデータを取得できます。パイプ文字 |
を使用して、各タイトルを区切ります。たとえば、このAPI呼び出しは、" Google"の両方からデータを返します。および「Yahoo」ページ:
http://en.wikipedia.org/w/api.php?format=json&action=query&prop=extracts&exlimit=max&explaintext&exintro&titles=Yahoo|Google&redirects=
パラメータ:
-
explaintext
:抽出を制限されたHTMLではなくプレーンテキストとして返します。 -
exlimit = max
:複数の結果を返します。現在、最大は20です。 -
exintro
:最初のセクションの前のコンテンツのみを返します。完全なデータが必要な場合は、これを削除してください。 -
redirects =
:リダイレクトの問題を解決します。
多くの場合、書式設定記号のないWikiページはあまり意味がありません。
必要に応じて書式設定を自分で削除することもできますが、その過程でいくつかのものを壊してしまいます。
(検索エンジンのようなものを作成している場合を除き、テキスト部分のみが必要で、フォーマット記号を完全に無視できます)
コンテンツがページに取り込まれた後に1つのことができます-PHP関数 strip_tags()
を使用してHTMLタグを削除できます。