Выбирать выдержку из статьи в Википедии?

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

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

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

Ответ 1

Я не нашел никакого способа сделать это через 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

Используйте эту ссылку, чтобы получить unparsed intro в xml-форме "http://en.wikipedia.org/w/api.php?format=xml&action=query&prop=extracts&excentences=10&titles=Aati kalenja"

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

Ответ 3

Как отмечает ARAVIND VR, на wikis работает расширение MobileFrontend — который включает в себя Wikipedia — вы можете легко получить отрывок статьи через MediaWiki API, используя prop=extracts Запрос API.

Например, эта ссылка даст вам короткую выдержку Qaru статью в Википедии в обертке JSON.

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

Ответ 4

Можно получить только "введение" статьи с использованием 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);