Réponse acceptée !
Salut,
Ne cherches pas midi à 14 heures, c'est bien plus simples que ça. En effet il te faut indiquer format=xml dans l'url afin d'obtenir du xml. À partir de ça, un simplexml_load_file() sur cette url te retourne un objet SimpleXMLElement te permettant de manipuler les données :
Code PHP :
<?php
$Wiki = simplexml_load_file('http://fr.wikipedia.org/w/api.php?action=query&list=random&rnnamespace=0&rnlimit=1&format=xml');
?>
Seul soucis, ça génère une erreur 403 (accès interdit). La raison ? Normalement on ne devrai pas utiliser un bot qui ne soit pas authentifié, pour différencier els bots des humains l'api mediawiki se base sur el user agent. À celà deux solution :
1. Avoir un compte utilisateur pour le bot et le faire s'authentifier dessus (bonne pratique).
2. Modifier le useragent afin de se faire passer pour un humain (plus simple).
Pour modifier le useragent par défaut de php, il te faut modifier l'option de configuration nommée user_agent dans ton php.ini. Il est également possible d'appeller ini_set() afin de modifier cette option de configuration sans avoir à modifier le php.ini. Ainsi le code suivant récupère bien le flux xml décrivant un article aléatoire :
Code PHP :
<?php
ini_set('user_agent', 'Mozilla/5.0 (X11; U; GNU Hurd; C -) AppleWebKit/527+ (KHTML, like Gecko, Safari/419.3) Arora/0.10.1');
$Wiki = simplexml_load_file('http://fr.wikipedia.org/w/api.php?action=query&list=random&rnnamespace=0&rnlimit=1&format=xml');
?>
Pour récupérer le nom de l'article c'est simple, grâce à simple xml on y accède directement de cette manière :
Code PHP :
$Wiki->query->random->page['title']
Il est possible de caster en string afin de convertir cet objet SimpleXMLElement en chaîne de caractère.
Afin de récupérer un lien vers l'article, il me semble qu'il faut commencer par remplacer tous les espaces par des underscores puis appliquer la fonction urlencode afin de convertir les caractères spéciaux. On obtient donc le code suivant :
Code PHP :
<?php
ini_set('user_agent', 'Mozilla/5.0 (X11; U; GNU Hurd; C -) AppleWebKit/527+ (KHTML, like Gecko, Safari/419.3) Arora/0.10.1');
$Wiki = simplexml_load_file('http://fr.wikipedia.org/w/api.php?action=query&list=random&rnnamespace=0&rnlimit=1&format=xml');
var_dump((string)$Wiki->query->random->page['title']);
$link = 'http://fr.wikipedia.org/wiki/' . urlencode(str_replace(' ', '_', $Wiki->query->random->page['title']));
var_dump($link);
?>
Et ça fonctionne :
tycho@uraniborg-> php toto.php
string(8) "BB 27000"
string(37) "http://fr.wikipedia.org/wiki/BB_27000"
tycho@uraniborg-> php toto.php
string(17) "Palestine (Texas)"
string(50) "http://fr.wikipedia.org/wiki/Palestine_%28Texas%29"
tycho@uraniborg-> php toto.php
string(47) "Parcours du Tours Volley-Ball en coupe d'Europe"
string(78) "http://fr.wikipedia.org/wiki/Parcours_du_Tours_Volley-Ball_en_coupe_d%27Europe"