wikipedia api json
¿Extracto de Fetch del artÃculo de Wikipedia? (4)
He estado arriba y abajo de la API de Wikipedia , pero no puedo averiguar si hay una buena manera de buscar el extracto de un artículo (generalmente el primer párrafo). También sería bueno obtener el formato HTML de ese párrafo.
La única forma en que veo actualmente algo que se asemeja a un fragmento es realizando una búsqueda de texto completo ( ejemplo ), pero eso no es realmente lo que quiero (demasiado corto).
¿Hay alguna otra manera de buscar el primer párrafo de un artículo de Wikipedia que analizar brutalmente HTML / WikiText?
Como señala ARAVIND VR, en las wikis que ejecutan la extensión de MobileFrontend , que incluye Wikipedia, puede obtener fácilmente un extracto de un artículo a través de la API de MediaWiki utilizando la consulta API prop=extracts
.
Por ejemplo, este enlace le dará un breve extracto del artículo en Wikipedia en un contenedor JSON.
Las diversas opciones de la consulta se pueden usar para controlar el formato del extracto (HTML o texto sin formato), su longitud máxima (en caracteres y / o frases y, opcionalmente, restringirlo a la sección de introducción del artículo) y el formato de los títulos de las secciones en la salida. También es posible obtener extractos de introducción de más de un artículo en una sola consulta.
Es posible obtener solo la "introducción" del artículo utilizando la API, con el parámetro rvsection=0
como se explica aquí .
Convertir el texto Wiki a HTML es un poco más difícil; Supongo que hay métodos más completos / oficiales, pero esto es lo que terminé haciendo:
// 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);
No encontré ninguna manera de hacer esto a través de la API, así que recurrí al análisis de HTML, usando las funciones DOM de PHP . Esto fue bastante fácil, algo entre las líneas de:
$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>
Utilice este enlace para obtener la introducción sin analizar en formato xml "http://en.wikipedia.org/w/api.php?format=xml&action=query&prop=extracts&exsentences=10&titles=Aati kalenja"
Anteriormente pude obtener la introducción de una lista de temas / artículos de una categoría en una sola página al agregar iframes con src como el enlace anterior. Pero ahora Chrome está lanzando este error: "Se negó a mostrar el documento porque la exhibición está prohibida por X- Frame-Options ". ¿De cualquier manera? Pls ayuda ..