
Après le tuto précédent qui consistait à créer un flux RSS, je vous propose maintenant de vous initier avec simpleXML pour afficher le contenu d'un flux RSS. Comme son nom l'indique il s'agit d'une méthode très simple pour "parser" n'importe quel fichier XML.
L'idée de ce tutorial est de reprendre un flux RSS sur Internet et de l'afficher sur votre site Web. Ce tutorial explique donc les bases fondamentales pour parser un flux RSS. Au passage, on utilise le terme "parser" pour désigner le fait de naviguer dans un fichier XML (comme par exemple un fichier xHTML ou ici RSS) et de pouvoir retirer les informations qui nous intéressent. SimpleXML est en fait une API disponnible depuis PHP5 qui va nous permettre de manipuler un fichier XML très facilement: Son efficacité réside dans le fait qu'elle transforme un fichier XML en un objet.
SimpleXML est activé par défaut, cependant pour vérifier qu'il existe bien, regardez votre config PHP en éxécutant phpinfo(); dans un fichier.

Si vous ne trouvez pas la librairie c'est que vous êtes sur une version dépassée de PHP (<4). Après c'est à voir au cas par cas. Si vous travaillez sur un serveur mutualisé, il y a quelques astuces pour passer à PHP5 (chez 1and1, il y'a par exemple une petite manip à faire dans le fichier .htaccess.
Pour ce script, nous allons gérer les erreurs avec la classe Exception qui est une classe native de PHP. je vais tout encapsuler dans un try qui est peut être vu, comme une zone sensible, et afficher les erreurs dans le catch, qui ici affichera le message d'erreur.
Nous utilisons donc la fonction simplexml_load_file qui permet de charger un fichier XML à partir d'un fichier se trouvant sur Internet, cette fonction retourne faux si le fichier ne se charge pas correctement. Ainsi avec un '!' dans ma condition je teste si le fichier n'a pas été trouvé, auquel cas je "jette" une Exception (throw new Exception) qui arrête mon script en me renvoyant directement au bloc catch.
J'utilise un '@' devant la fonction simplexml_load_file, en effet le fait d'utiliser cette petite astuce permet de ne pas afficher les Warning si le fichier est introuvable.
Récupérer une donnée dans un notre fichier XML va être maintenant une tache assez facile: il suffit de spécifier de l'utiliser un peu comme un tableau. $fluxrss->channel->title renverra le contenu de la balise title, ayant pour élément parent "channel" ayant lui même pour parent $fluxrss qui n'est autre que l'élement racine "rss". Si vous êtes curieux et souhaitez connaitre le contenu de l'objet $fluxrss, affichez le avec ceci var_dump($fluxrss); .
Il est nécessaire de faire une vérification sur le contenu du flux RSS, afin d'être sûr qu'il s'agisse d'un flux RSS bien formé. Pour cela on utilise la fonction empty sur quelques élements de notre flux. Si l'on s'apercoit que l'une des données est vide on envoit une erreur. Vous pouvez noter (string) qui permet de spécifier à PHP le type de contenu que l'on affiche, ici une chaîne de caractères.
Pas de grandes nouveautés dans cette étape, si ce n'est l'utilisation d'une boucle foreach...
Notre boucle s'effectue sur les éléments item, et affiche donc les 5 items du flux RSS dans une liste d'élément <ul>. Pour mettre la date dans un format un peu plus compréhensible et facile à lire, il suffit de jouer avec les fonctions strtotime qui convertit la date en timestamp, et la fonction date prenant en paramètre un format et le timestamp.
Je m'arrêterais là pour la lecture de Flux RSS. Bien entendu, ce script constitue un premier pas. il y'a de nombreuses évolutions à apporter, comme la copie du flux sur son serveur pour accéder aux données de celui-ci beaucoup plus rapidement.
Est-il possible d'extraire des données d'un fichier xml ne contenant pas de balise <rss> ?
Je travaille sur un fichier playlist de lecteur mp3 qui ne contient justement pas cette balise. Après plusieurs tests il s'avère que c'est bien cet élément qui pose problème.
Merci de la réponse.