11

私はウィキペディアAPIを上下に移動してきましたが、記事の抜粋(通常は最初の段落)を取得するための優れた方法があるかどうかわかりません。その段落のHTMLフォーマットも取得すると便利です。

スニペットに似たものを取得するために現在私が見ている唯一の方法は、全文検索を実行することです()が、それは私が本当に望んでいることではありません(短すぎます)。

HTML / WikiTextを野蛮に解析する以外に、ウィキペディアの記事の最初の段落を取得する方法はありますか?

4

4 に答える 4

6

このリンクを使用して、未解析のイントロをxml形式で取得します「http://en.wikipedia.org/w/api.php?format=xml&action=query&prop=extracts&exsentences=10&titles=Aatikalenja」

以前は、上記のリンクのようにsrcを使用してiframeを追加することで、1ページのカテゴリからトピック/記事のリストを紹介できました。しかし、現在、chromeはこのエラーをスローしています-「Xによって表示が禁止されているため、ドキュメントの表示を拒否しました-フレームオプション。」とにかく?plsヘルプ..

于 2012-09-09T07:46:23.523 に答える
3

APIを介してこれを行う方法が見つからなかったため、 PHPのDOM関数を使用してHTMLを解析することにしました。これは非常に簡単で、次のようなものがあります。

$doc = new DOMDocument();
$doc->loadHTML($wikiPage);
$xpath = new DOMXpath($doc);
$nlPNodes = $xpath->query('//div[@id="bodyContent"]/p');
$nFirstP = $nlPNodes->item(0);
$sFirstP = $doc->saveXML($nFirstP);
echo $sFirstP; // echo the first paragraph of the wiki article, including <p></p>
于 2010-04-02T11:31:08.287 に答える
3

ARAVIND VRが指摘しているように、MobileFrontend拡張機能(ウィキペディアを含む)を実行しているウィキでは、 APIクエリを使用してMediaWikiAPIを介して記事の抜粋を簡単に取得できます。prop=extracts

たとえば、このリンクは、JSONラッパーでウィキペディアのスタックオーバーフローの記事の短い抜粋を提供します。

クエリのさまざまなオプションを使用して、抜粋形式(HTMLまたはプレーンテキスト)、最大長(文字や文、およびオプションで記事のイントロセクションに制限)、およびセクション見出しの形式を制御できます。出力で。1回のクエリで複数の記事からイントロ抽出を取得することもできます。

于 2012-09-09T09:31:02.323 に答える
2

ここで説明rvsection=0するパラメータを使用して、APIを使用して記事の「紹介」のみを取得することができます。

WikiテキストをHTMLに変換するのは少し難しいです。もっと完全な/公式の方法があると思いますが、これは私がやったことです:

// remove templates (even nested)
do {
    $c = preg_replace('/[{][{][^{}]+[}][}]\n?/', '', $c, -1, $count);
} while ($count > 0);
// remove HTML comments
$c = preg_replace('/<!--(?:[^-]|-[^-]|[[[^>])+-->\n?/', '', $c);
// remove links
$c = preg_replace('/[[][[](?:[^]|]+[|])?([^]]+)[]][]]/', '$1', $c);
$c = preg_replace('/[[]http[^ ]+ ([^]]+)[]]/', '$1', $c);
// remove footnotes
$c = preg_replace('#<ref(?:[^<]|<[^/])+</ref>#', '', $c);
// remove leading and trailing spaces
$c = trim($c);
// convert bold and italic
$c = preg_replace("/'''((?:[^']|'[^']|''[^'])+)'''/", $html ? '<b>$1</b>' : '$1', $c);
$c = preg_replace("/''((?:[^']|'[^'])+)''/", $html ? '<i>$1</i>' : '$1', $c);
// add newlines
if ($html) $c = preg_replace('/(\n)/', '<br/>$1', $c);
于 2010-12-19T15:07:26.283 に答える