Y a-t-il une API wikipedia propre juste pour extraire le sommaire de contenu?

j'ai juste besoin de récupérer premier paragraphe d'une page Wikipedia. Le contenu doit être formaté html, prêt à être affiché sur mes sites web (donc pas de code BBCODE, ou de code spécial WIKIPEDIA!)

124
demandé sur sparkle 2011-12-19 02:25:10

12 réponses

il y a un moyen d'obtenir la totalité de la" section intro " sans aucun parsing html! Similaire à la réponse d'AnthonyS avec un param supplémentaire explaintext , vous pouvez obtenir le texte de la section intro en texte simple.

Requête

obtenir l'intro de Stack Overflow en clair:

https://en.wikipedia.org/w/api.php?format=json&action=query&prop=extracts&exintro&explaintext&redirects=1&titles=Stack%20Overflow

JSON Response

(Avertissements désactivés)

{
    "query": {
        "pages": {
            "21721040": {
                "pageid": 21721040,
                "ns": 0,
                "title": "Stack Overflow",
                "extract": "Stack Overflow is a privately held website, the flagship site of the Stack Exchange Network, created in 2008 by Jeff Atwood and Joel Spolsky, as a more open alternative to earlier Q&A sites such as Experts Exchange. The name for the website was chosen by voting in April 2008 by readers of Coding Horror, Atwood's popular programming blog.\nIt features questions and answers on a wide range of topics in computer programming. The website serves as a platform for users to ask and answer questions, and, through membership and active participation, to vote questions and answers up or down and edit questions and answers in a fashion similar to a wiki or Digg. Users of Stack Overflow can earn reputation points and \"badges\"; for example, a person is awarded 10 reputation points for receiving an \"up\" vote on an answer given to a question, and can receive badges for their valued contributions, which represents a kind of gamification of the traditional Q&A site or forum. All user-generated content is licensed under a Creative Commons Attribute-ShareAlike license. Questions are closed in order to allow low quality questions to improve. Jeff Atwood stated in 2010 that duplicate questions are not seen as a problem but rather they constitute an advantage if such additional questions drive extra traffic to the site by multiplying relevant keyword hits in search engines.\nAs of April 2014, Stack Overflow has over 2,700,000 registered users and more than 7,100,000 questions. Based on the type of tags assigned to questions, the top eight most discussed topics on the site are: Java, JavaScript, C#, PHP, Android, jQuery, Python and HTML."
            }
        }
    }
}

de la Documentation: API: requête/prop=extraits de


modifier: ajouté &redirects=1 comme recommandé dans les commentaires.

161
répondu Mike Rapadas 2018-08-14 06:49:20

il y a en fait un très beau prop appelé extraits qui peut être utilisé avec des requêtes conçues spécifiquement à cet effet. Les extraits vous permettent d'obtenir des extraits d'articles (texte d'article tronqué). Il y a un paramètre appelé exintro qui peut être utilisé pour récupérer le texte dans la section (aucun actif supplémentaire comme des images ou des infoboxes). Vous pouvez également extraire des extraits avec une granularité plus fine, par exemple par un certain nombre de caractères ( échars ) ou par un certain nombre de phrases( exstences )."

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 "151910920 API" bac à sable http://en.wikipedia.org/wiki/Special:ApiSandbox#action=query&prop=extracts&format=json&exintro=&titles=Stack%20Overflow pour expérimenter plus avec cette requête.

s'il vous plaît noter que si vous voulez le premier paragraphe spécifiquement, vous avez encore besoin de faire quelques parsing supplémentaires 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 autres requêtes api suggérées parce que vous n'avez pas de actifs tels que des images dans la réponse api à parse.

70
répondu AnthonyS 2013-08-29 07:42:41

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

Parties de cette réponse de 151940920" ici et donc ici . Voir documentation 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.
}
39
répondu Alexandre Vaillancourt 2017-05-23 12:10:29

Oui, il y en a. 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 formatteur de résultat en XML. D'autres options (comme JSON) sont disponibles. Cela n'affecte pas le format du contenu de la page lui-même, mais seulement le format de données qui l'entoure.

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

  • titles=Stack%20Overflow : obtenez des informations sur la page Stack Overflow . Il est possible d'obtenir le texte de plus 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 Seulement 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 incluant des choses comme des notes ("pour d'autres usages ..."), des infoboxes ou des images.

il y a plusieurs bibliothèques disponibles pour différentes langues qui rendent le travail avec API plus facile, il peut être mieux pour vous si vous avez utilisé l'un d'eux.

28
répondu svick 2011-12-19 09:55:13

depuis 2017 Wikipedia fournit un REST API avec une meilleure mise en cache. Dans la documentation vous pouvez trouver L'API suivante qui correspond parfaitement à votre cas d'utilisation. (comme il est utilisé par le nouveau Aperçus de Page )

https://en.wikipedia.org/api/rest_v1/page/summary/Stack_Overflow renvoie les données suivantes qui peuvent être utilisées pour afficher un summery avec une petite vignette:

{
  "title": "Stack Overflow",
  "displaytitle": "Stack Overflow",
  "pageid": 21721040,
  "extract": "Stack Overflow is a privately held website, the flagship site of the Stack Exchange Network, created in 2008 by Jeff Atwood and Joel Spolsky. It was created to be a more open alternative to earlier question and answer sites such as Experts-Exchange. [...]",
  "extract_html": "<p><b>Stack Overflow</b> is a privately held website, the flagship site of the Stack Exchange Network, created in 2008 by Jeff Atwood and Joel Spolsky. It was created to be a more open alternative to earlier question and answer sites such as Experts-Exchange. [...]",
  "thumbnail": {
    "source": "https://upload.wikimedia.org/wikipedia/en/thumb/f/fa/Stack_Overflow_homepage%2C_Feb_2017.png/320px-Stack_Overflow_homepage%2C_Feb_2017.png",
    "width": 320,
    "height": 149
  },
  "originalimage": {
    "source": "https://upload.wikimedia.org/wikipedia/en/f/fa/Stack_Overflow_homepage%2C_Feb_2017.png",
    "width": 462,
    "height": 215
  },
  "lang": "en",
  "dir": "ltr",
  "timestamp": "2018-01-30T09:21:21Z",
  "description": "website hosting questions and answers on a wide range of topics in computer programming"
}

par défaut, il suit redirige( de sorte que /api/rest_v1/page/summary/StackOverflow fonctionne aussi), mais cela peut être désactivé avec ?redirect=false

si vous avez besoin d'accéder à L'API à partir d'un autre domaine, vous pouvez définir l'en-tête CORS avec &origin= (par exemple &origin=* )

27
répondu Lukas Winkler 2018-09-10 18:30:17

C'est le code que j'utilise en ce moment pour un site Web que je fais qui a besoin d'obtenir les paragraphes principaux / résumé / section 0 des articles hors Wikipédia, et tout est fait dans le navigateur (javascript côté client) grâce au magick de JSONP! -- > http://jsfiddle.net/gautamadude/HMJJg/1 /

il utilise L'API Wikipedia pour obtenir les paragraphes principaux (appelés section 0) en HTML comme suit: http://en.wikipedia.org/w/api.php?format=json&action=parse&page=Stack_Overflow&prop=text§ion=0&callback=Je ne sais pas.

il supprime alors le HTML et d'autres données indésirables, vous donnant une chaîne propre d'un résumé d'article, si vous voulez, vous pouvez, avec un peu de modification, obtenir un" p " étiquette html autour des paragraphes principaux, mais en ce moment il ya juste un caractère newline 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
    }
});
15
répondu 01AutoMonkey 2015-02-09 21:35:56

cette url retournera le sommaire en 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é 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');
8
répondu Amit Garg 2013-10-24 13:14:41

vous pouvez également obtenir du contenu tel que le premier pagagraph via DBPedia qui prend le contenu Wikipédia et crée des informations structurées à partir de celui-ci (RDF) et le rend disponible via une API. L'API DBPedia est une API SPARQL (basée sur RDF) mais elle produit JSON et elle est assez facile à envelopper.

à titre d'exemple, voici une bibliothèque JS très simple appelée WikipediaJS qui peut extraire du contenu structuré incluant un premier paragraphe de résumé: http://okfnlabs.org/wikipediajs/

vous pouvez lire plus à ce sujet dans ce billet de blog: http://okfnlabs.org/blog/2012/09/10/wikipediajs-a-javascript-library-for-accessing-wikipedia-article-information.html

le code de la bibliothèque JS peut être trouvé ici: https://github.com/okfn/wikipediajs/blob/master/wikipedia.js

5
répondu Rufus Pollock 2013-02-10 17:54:12

Le abstract.xml.gz dump les sons que vous désirez.

2
répondu sarnold 2011-12-18 22:35:10

mon approche était la suivante (en PHP):

$url = "whatever_you_need"

$html = file_get_contents('https://en.wikipedia.org/w/api.php?action=opensearch&search='.$url);
$utf8html = html_entity_decode(preg_replace("/U\+([0-9A-F]{4})/", "&#x\1;", $html), ENT_NOQUOTES, 'UTF-8');

$utf8html pourrait avoir besoin d'un nettoyage plus poussé, mais c'est essentiellement ça.

1
répondu Alex 2015-12-16 13:40:00

j'ai essayé la solution de @Michael Rapadas et @Krinkle mais dans mon cas j'ai eu du mal à trouver quelques articles en fonction de la capitalisation. Comme ici:

https://en.wikipedia.org/w/api.php?format=json&action=query&prop=extracts&exintro=&exsentences=1&explaintext=&titles=Led%20zeppelin

Note I tronqué la réponse par exsentences=1

apparemment, la "normalisation du titre" ne fonctionnait pas correctement:

la normalisation des titres convertit les titres de page à leur forme canonique. Ce signifie capitaliser le premier caractère, remplacer les soulignements par les espaces, et changer l'espace de noms à la forme localisée définie pour cela wiki. La normalisation du titre se fait automatiquement, quel que soit le module de recherche sont utilisés. Cependant, toute ligne de fuite se brise dans la page les titres (\n) provoquent des comportements étranges et doivent être supprimés premier.

je sais que je pourrais avoir réglé la question de la capitalisation facilement, mais il y avait aussi l'inconvénient d'avoir à convertir l'objet d'un tableau.

donc, parce que je voulais vraiment le tout premier paragraphe d'une recherche bien connue et définie (aucun risque de chercher des informations à partir d'autres articles) je l'ai fait comme ceci:

https://en.wikipedia.org/w/api.php?action=opensearch&search=led%20zeppelin&limit=1&format=json

Note dans ce cas j'ai fait la troncature avec limit=1

par ici:

  1. je peux accéder aux données de réponse très facilement.
  2. la réponse est assez faible.

mais nous devons faire attention avec la majuscule de notre recherche.

plus d'informations: https://www.mediawiki.org/wiki/API:Opensearch

1
répondu gugol 2016-06-01 14:13:27

si vous cherchez simplement le texte que vous pouvez ensuite diviser mais que vous ne voulez pas utiliser L'API, jetez un coup d'oeil à en.wikipedia.org/w/index.php?title=Elephant&action=raw

0
répondu mr.user1065741 2012-03-18 18:04:59