J’ai juste besoin de récupérer le premier paragraphe d’une page Wikipedia. Le contenu doit être au format HTML, prêt à être affiché sur mes sites Web (donc pas de code BBCODE, ni de code spécial WIKIPEDIA!)
Il existe un moyen d’obtenir l’intégralité de la “section d’introduction” sans parsing syntaxique HTML! Semblable à la réponse d’AnthonyS avec un explaintext
supplémentaire explaintext
, vous pouvez obtenir le texte de la section d’introduction en texte brut.
Obtenir l’intro de Stack Overflow en texte brut:
(avertissements supprimé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 consortingbutions, which represents a kind of gamification of the traditional Q&A site or forum. All user-generated content is licensed under a Creative Commons Atsortingbute-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." } } } }
Documentation: API: query / prop = extraits
Edit: Ajouté &redirects=1
comme recommandé dans les commentaires.
Il existe en fait un accessoire très intéressant 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 existe un paramètre appelé exintro qui peut être utilisé pour récupérer le texte dans la section zeroth (aucun élément supplémentaire tel que des images ou des infoboxes). Vous pouvez également récupérer des extraits avec une granularité plus fine, par exemple par un certain nombre de caractères ( exchars ) 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 sandbox API http://en.wikipedia.org/wiki/ Spécial: ApiSandbox # action = requête & prop = extraits & format = json & exintro = & titles = Empilage% 20Overflow pour expérimenter davantage avec cette requête.
S’il vous plaît noter que si vous voulez le premier paragraphe spécifiquement, vous devez encore faire une parsing 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 d’API suggérées, car vous ne disposez pas d’éléments supplémentaires tels que des images dans la réponse de l’API à parsingr.
Ce code vous permet de récupérer le contenu du premier paragraphe de la page en texte brut.
Des parties de cette réponse viennent d’ ici et donc ici . Voir la 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§ion=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 = '#(.*)
#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 tag) print ssortingp_tags($matches[1]); // Content of the first paragraph without the HTML tags. }
Oui il y 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:
Les parties signifient ceci:
format=xml
: renvoie 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 lui-même, mais uniquement le format de données englobant.
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
: Obtenir des informations sur la page Stack Overflow
. Il est possible d’obtenir le texte de plusieurs pages en une seule fois, si vous séparez leurs noms par |
.
rvprop=content
: Retourne le contenu (ou le texte) de la révision.
rvsection=0
: rvsection=0
uniquement le contenu de la section 0.
rvparse
: rvparse
le contenu analysé en HTML.
Gardez à l’esprit que cela renvoie toute la première section, y compris des choses telles que les chapitres («Pour d’autres utilisations…»), les infoboxes ou les images.
Plusieurs bibliothèques sont disponibles pour différentes langues, ce qui facilite le travail avec les API. Il peut être préférable pour vous d’en utiliser une.
Depuis 2017, Wikipedia fournit une API REST avec une meilleure mise en cache. Dans la documentation, vous trouverez l’API suivante qui correspond parfaitement à votre cas d’utilisation. (tel qu’il est utilisé par la nouvelle fonctionnalité de prévisualisations 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 résumé 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": "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. [...]", "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": "http://soffr.miximages.com/api/Stack_Overflow_homepage,_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 les redirections (de sorte que /api/rest_v1/page/summary/StackOverflow
fonctionne également), mais cela peut être désactivé avec ?redirect=false
C’est le code que j’utilise en ce moment pour un site Web qui doit contenir les paragraphes / résumé / section 0 des articles de Wikipedia, 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 de Wikipedia pour obtenir les paragraphes principaux (appelés section 0) en HTML, comme ceci: http://en.wikipedia.org/w/api.php?format=json&action=parse&page=Stack_Overflow&prop=text§ion=0&callback=?
Il supprime ensuite le code HTML et les autres données indésirables, vous donnant une chaîne de caractères claire pour un résumé d’article. Si vous le souhaitez, vous pouvez, avec quelques modifications, obtenir une balise HTML “p” autour des premiers paragraphes. caractère 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§ion=0&callback=?", function (data) { for (text in data.parse.text) { var text = data.parse.text[text].split(""); var pText = ""; for (p in text) { //Remove html comment text[p] = text[p].split("
Cette URL retournera un résumé au format xml.
http://lookup.dbpedia.org/api/search.asmx/KeywordSearch?QuerySsortingng=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?QuerySsortingng='.urlencode($keyword).'&MaxHits=1'; $xml=simplexml_load_file($url); return $xml->Result->Description; } echo getDescription('agra');
Vous pouvez également obtenir du contenu tel que le premier pagagraph via DBPedia, qui prend le contenu de Wikipedia et crée des informations structurées à partir de celui-ci (RDF) et les rend disponibles via une API. L’API DBPedia est une API SPARQL (basée sur RDF) mais elle produit du JSON et est assez facile à emballer.
A titre d’exemple, voici une bibliothèque JS super simple nommée WikipediaJS qui peut extraire un contenu structuré incluant un résumé du premier paragraphe: http://okfnlabs.org/wikipediajs/
Vous pouvez en savoir 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
Le fichier abstract.xml.gz
ressemble à celui que vous voulez.
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})/", "\\1;", $html), ENT_NOQUOTES, 'UTF-8');
$utf8html
pourrait nécessiter un nettoyage supplémentaire, mais c’est fondamentalement cela.
J’ai essayé @Michael Rapadas et la solution de @Krinkle mais dans mon cas, j’ai eu du mal à trouver des articles en fonction de la capitalisation. Comme ici:
Remarque j’ai tronqué la réponse avec exsentences=1
Apparemment, “la normalisation du titre” ne fonctionnait pas correctement:
La normalisation des titres convertit les titres de page en leur forme canonique. Cela signifie la mise en majuscule du premier caractère, le remplacement des traits de soulignement par des espaces et la modification de l’espace de noms en la forme localisée définie pour ce wiki. La normalisation des titres est effectuée automatiquement, quels que soient les modules de requête utilisés. Cependant, tout saut de ligne final dans les titres de page (\ n) provoquera un comportement étrange et devra être supprimé en premier.
Je sais que j’aurais pu régler facilement le problème de la capitalisation, mais l’inconvénient était de devoir lancer l’object dans un tableau.
Donc, parce que je voulais vraiment le tout premier paragraphe d’une recherche bien connue et définie (pas de risque de récupérer des informations à partir d’un autre article), je l’ai fait comme ceci:
https://en.wikipedia.org/w/api.php?action=opensearch&search=led%20zeppelin&limit=1&format=json
Notez dans ce cas que j’ai fait la troncature avec la limit=1
Par ici:
- Je peux accéder aux données de réponse très facilement.
- La réponse est assez petite.
Mais nous devons faire attention à la capitalisation de nos recherches.
Plus d’infos: https://www.mediawiki.org/wiki/API:Opensearch
Si vous cherchez simplement le texte que vous pouvez alors diviser mais que vous ne souhaitez pas utiliser, consultez en.wikipedia.org/w/index.php?title=Elephant&action=raw