私は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 Parser を使用すると良い結果が得られました。特定の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=
:リダイレクトの問題を解決します。Action = renderを使用して、可能な限りクリーンなページを取得します。
https://wiki.Eclipse.org/Tip_of_the_Day/Eclipse_Tips/Now_where_was_I?action=render
対
https://wiki.Eclipse.org/Tip_of_the_Day/Eclipse_Tips/Now_where_was_I
多くの場合、書式設定記号のないWikiページはあまり意味がありません。
必要に応じて、書式設定を自分で取り除くことができますが、その過程でいくつかのものを壊してしまいます。
(検索エンジンのようなものを作成している場合を除き、テキスト部分のみが必要で、書式設定記号を完全に無視できます)