Получить отрывок из статьи в Википедии? - PullRequest
11 голосов
/ 01 апреля 2010

Я был взад и вперед по API Википедии , но я не могу понять, есть ли хороший способ получить отрывок из статьи (обычно первый абзац ). Было бы неплохо также получить форматирование HTML этого абзаца.

В настоящее время я вижу единственный способ получить что-то, похожее на фрагмент, - выполнить полнотекстовый поиск ( пример ), но это не совсем то, что я хочу (слишком коротко).

Есть ли другой способ получить первый абзац статьи в Википедии, кроме варварского разбора HTML / WikiText?

Ответы [ 4 ]

6 голосов
/ 09 сентября 2012

Используйте эту ссылку, чтобы получить неразобранное вступление в виде xml "http://en.wikipedia.org/w/api.php?format=xml&action=query&prop=extracts&exsentences=10&titles=Aati каленя"

Раньше я мог получить представление списка тем / статей из категории на одной странице, добавив фреймы с src, как указано выше. Но теперь Chrome выдает эту ошибку - «Отказ от отображения документа, поскольку отображение запрещено по X-Frame-Options. " Любой путь через? Просьба помочь ..

3 голосов
/ 09 сентября 2012

Как отмечает ARAVIND VR, в вики, где работает расширение MobileFrontend & mdash; которая включает википедию & mdash; Вы можете легко получить отрывок из статьи через MediaWiki API , используя prop=extracts запрос API .

Например, эта ссылка даст вам краткий отрывок статьи Переполнение стека в Википедии в оболочке JSON.

Различные параметры запроса могут использоваться для управления форматом выдержки (HTML или простой текст), его максимальной длиной (в символах и / или предложениях и, при желании, ограничив его вводным разделом статьи) и форматированием. заголовков разделов на выходе. Также возможно получить вступительные выдержки из более чем одной статьи в одном запросе.

3 голосов
/ 02 апреля 2010

Я не нашел способа сделать это через API, поэтому я прибег к анализу HTML, используя PHP-функции DOM . Это было довольно легко, что-то вроде:

$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>
2 голосов
/ 19 декабря 2010

С помощью API можно получить только «введение» в статью с параметром rvsection=0, как объяснено здесь .

Конвертировать 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);
...