163 votes

Existe-t-il une API Wikipedia pour récupérer le résumé du contenu ?

J'ai juste besoin de récupérer le premier paragraphe d'une page Wikipedia.

Le contenu doit être formaté en HTML, prêt à être affiché sur mon site web (donc pas de BBCode o Wikipedia spécial code !)

3 votes

Wikipédia n'utilise pas le code BB, mais son propre code de balisage wiki.

1 votes

Cela ne fonctionne pas pour tous les articles de wikipedia. ro.wikipedia.org/w/

84voto

AnthonyS Points 641

Il y a en fait une très belle accessoire appelé extraits qui peut être utilisé avec des requêtes conçues spécifiquement à cet effet.

Extraits vous permettent d'obtenir des extraits d'articles (texte d'article tronqué). Il existe un paramètre appelé exintro qui peut être utilisé pour récupérer le texte de la section zéro (pas de ressources supplémentaires comme des images ou des infoboxes). Vous pouvez également récupérer des extraits avec une granularité plus fine, par exemple en fonction d'un certain nombre de caractères ( échangeurs ) ou par un certain nombre de phrases ( exsentences ).

Voici un exemple de requête http://en.wikipedia.org/w/api.php?action=query&prop=extracts&format=json&exintro=&titles=Stack%20Overflow et le Bac à sable de l'API http://en.wikipedia.org/wiki/Special:ApiSandbox#action=query&prop=extracts&format=json&exintro=&titles=Stack%20Overflow pour expérimenter davantage avec cette requête.

Veuillez noter que, si vous souhaitez obtenir le premier paragraphe spécifiquement, vous devez encore effectuer une analyse syntaxique supplémentaire, comme suggéré dans la réponse choisie. La différence ici est que la réponse renvoyée par cette requête est plus courte que certaines des autres requêtes API suggérées, car vous n'avez pas d'actifs supplémentaires tels que des images dans la réponse API à analyser.

0 votes

Qu'est-ce que "prop" ? Propriété ?

0 votes

Le premier lien est (effectivement) cassé. Il n'y a pas de "extraits" ou "extrait" sur cette page.

39voto

Ce code vous permet de récupérer le contenu du premier paragraphe de la page en texte brut.

Certaines parties de cette réponse proviennent de aquí et donc aquí . Voir Documentation de l'API MediaWiki pour plus d'informations.

// action=parse: get parsed text
// page=Baseball: from the page Baseball
// format=json: in JSON format
// prop=text: send the text content of the article
// section=0: top content of the page

$url = 'http://en.wikipedia.org/w/api.php?format=json&action=parse&page=Baseball&prop=text&section=0';
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_USERAGENT, "TestScript"); // required by wikipedia.org server; use YOUR user agent with YOUR contact information. (otherwise your IP might get blocked)
$c = curl_exec($ch);

$json = json_decode($c);

$content = $json->{'parse'}->{'text'}->{'*'}; // Get the main text content of the query (it's parsed HTML)

// Pattern for first match of a paragraph
$pattern = '#<p>(.*)</p>#Us'; // http://www.phpbuilder.com/board/showthread.php?t=10352690
if(preg_match($pattern, $content, $matches))
{
    // print $matches[0]; // Content of the first paragraph (including wrapping <p> tag)
    print strip_tags($matches[1]); // Content of the first paragraph without the HTML tags.
}

0 votes

Mais si vous recherchez "corail", le résultat sera quelque chose de non requis. Existe-t-il un autre moyen pour que seuls les tags p avec smmary puissent être récupérés ?

33voto

svick Points 81772

Oui, c'est le cas. Par exemple, si vous souhaitez obtenir le contenu de la première section de l'article Stack Overflow utilisez une requête comme celle-ci :

http://en.wikipedia.org/w/api.php?format=xml&action=query&prop=revisions&titles=Stack%20Overflow&rvprop=content&rvsection=0&rvparse

Les parties signifient ceci :

  • format=xml : Retourner le formateur de résultat en XML. D'autres options (comme JSON) sont disponibles. Cela n'affecte pas le format du contenu de la page elle-même, mais uniquement le format des données qui l'entourent.

  • action=query&prop=revisions : Obtenir des informations sur les révisions de la page. Puisque nous ne spécifions pas quelle révision, la dernière est utilisée.

  • titles=Stack%20Overflow : Obtenir des informations sur la page Stack Overflow . Il est possible d'obtenir le texte de plus de pages en une seule fois, si vous séparez leurs noms par | .

  • rvprop=content : Renvoie le contenu (ou le texte) de la révision.

  • rvsection=0 : Retourner uniquement le contenu de la section 0.

  • rvparse : Retourner le contenu analysé en HTML.

Gardez à l'esprit que cela renvoie l'ensemble de la première section, y compris des éléments tels que les notes de chapeau ("Pour d'autres utilisations "), les infoboxes ou les images.

Il existe plusieurs bibliothèques disponibles pour différents langages qui facilitent le travail avec les API. Il serait peut-être préférable pour vous d'utiliser l'une d'entre elles.

3 votes

Je ne veux pas que le contenu soit analysé en HTML, je veux juste obtenir le "texte brut" (ni le code wikipedia).

1 votes

L'API ne propose rien de tel. Et je peux comprendre pourquoi : parce que du point de vue de l'API, on ne sait pas exactement ce que doit contenir ce "texte brut". Par exemple, comment représenter les tableaux, s'il faut inclure "[citation nécessaire]", les boîtes de navigation ou les descriptions d'images.

2 votes

Ajout de &redirects=true à la fin du lien vous permet d'accéder à l'article de destination, s'il en existe un.

14voto

01AutoMonkey Points 467

Voici le code que j'utilise en ce moment pour un site web que je réalise et qui a besoin de récupérer les premiers paragraphes, le résumé et la section 0 des articles de Wikipédia, et tout cela est fait dans le navigateur (JavaScript côté client) grâce à la magie de JSONP ! --> http://jsfiddle.net/gautamadude/HMJJg/1/

Il utilise l'API de Wikipédia pour obtenir les paragraphes de tête (appelés section 0) en HTML, comme suit : http://en.wikipedia.org/w/api.php?format=json&action=parse&page=Stack_Overflow&prop=text&section=0&callback= ?

Il supprime ensuite le HTML et les autres données indésirables, ce qui vous donne une chaîne propre de résumé d'article. Si vous voulez, vous pouvez, avec un peu d'ajustement, obtenir une balise HTML "p" autour des premiers paragraphes, mais pour l'instant, il n'y a qu'un caractère de nouvelle ligne entre eux.

Code :

var url = "http://en.wikipedia.org/wiki/Stack_Overflow";
var title = url.split("/").slice(4).join("/");

// Get leading paragraphs (section 0)
$.getJSON("http://en.wikipedia.org/w/api.php?format=json&action=parse&page=" + title + "&prop=text&section=0&callback=?", function (data) {
    for (text in data.parse.text) {
        var text = data.parse.text[text].split("<p>");
        var pText = "";

        for (p in text) {
            // Remove HTML comment
            text[p] = text[p].split("<!--");
            if (text[p].length > 1) {
                text[p][0] = text[p][0].split(/\r\n|\r|\n/);
                text[p][0] = text[p][0][0];
                text[p][0] += "</p> ";
            }
            text[p] = text[p][0];

            // Construct a string from paragraphs
            if (text[p].indexOf("</p>") == text[p].length - 5) {
                var htmlStrip = text[p].replace(/<(?:.|\n)*?>/gm, '') // Remove HTML
                var splitNewline = htmlStrip.split(/\r\n|\r|\n/); //Split on newlines
                for (newline in splitNewline) {
                    if (splitNewline[newline].substring(0, 11) != "Cite error:") {
                        pText += splitNewline[newline];
                        pText += "\n";
                    }
                }
            }
        }
        pText = pText.substring(0, pText.length - 2); // Remove extra newline
        pText = pText.replace(/\[\d+\]/g, ""); // Remove reference tags (e.x. [1], [4], etc)
        document.getElementById('textarea').value = pText
        document.getElementById('div_text').textContent = pText
    }
});

0 votes

Ajoutez-vous ceci au script côté client ? Si c'est le cas, ce n'est pas du XSS ?

0 votes

Il a beaucoup de bugs, essayez ce lien avec votre script : fr.wikipedia.org/wiki/Modular_Advanced_Armed_Robotic_System

8voto

Amit Garg Points 1273

Cette URL renverra le résumé au format XML.

http://lookup.dbpedia.org/api/search.asmx/KeywordSearch?QueryString=Agra&MaxHits=1

J'ai créé une fonction pour récupérer la description d'un mot clé à partir de Wikipedia.

function getDescription($keyword) {
    $url = 'http://lookup.dbpedia.org/api/search.asmx/KeywordSearch?QueryString=' . urlencode($keyword) . '&MaxHits=1';
    $xml = simplexml_load_file($url);
    return $xml->Result->Description;
}

echo getDescription('agra');

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X