Lire un flux RSS avec SimpleXML

Lire un flux RSS avec SimpleXML

27 fév | Catégorie: PHP | Rédigé par François | 2276 lectures

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.

Etape 1 : Activer SimpleXML?

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.

simpleXMl est activé sur ma config php

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.

Etape 2 : Charger votre flux

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.

Etape 3: Récupérer des informations avec SimpleXML

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.

Etape 4: Lister les Items

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.

Creative Commons License
Cette création par Snoupix.com est mise à disposition selon les termes de la licence Creative Commons.
Partager ce tutoriel :
wikio scoopeo fuzz diggfr digg-design blogmemes delicious tapemoi yoolink bluegger pioche

8 Commentaires

gravatar
le 04 mars à 00h34 Kazaam Répondre Très bon article, merci !

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.
gravatar
le 04 mars à 11h46 François Répondre En fait quand tu charges ton document xml avec simplexml, il charge la racine directement, donc ca devrait marcher quelquesoit le nom de la balise
Pour ton code ca devrait donner ca:
$playlist=simplexml_load_file('...URL...../taplaylist.xml');
Donc si tu as par exemple un document comme ca:
<?xml....>
<playlist>
<music>
<titre>...</titre>
<time>...</time>
</music>
<music>
...
</music>
</playlist>

Le principe reste le même, tu accèdes à tes données comme ceci:
$playlist->music->titre...


Essaye aussi d'afficher le contenu de ton objet simpleXML (var_dump($playlist)), ca peut être utile.

Bon tests!
gravatar
le 04 mars à 13h18 Kazaam Répondre D'accord, ça fonctionne bien mieux comme ça je dois dire.

C'était un peu étonnant que la fonction se limite au flux rss, enfin en tout cas merci beaucoup !
gravatar
le 09 avril à 19h00 cherrierj Répondre tuto très instructif et bien fait.
merci.
gravatar
le 02 juillet à 14h33 delta Répondre hello, ile me retourne ce message d'erreur une idée?

Parse error: syntax error, unexpected '{' in /homepages/33/d212168608/htdocs/names/test/afficheRSS.php on line 10
gravatar
le 02 juillet à 23h47 François Répondre C'est peut être du à une parenthèse qui n'est pas fermé à la ligne 9 ou un point virgule oublié...
Généralement pour ce type d'erreur faut chercher la ligne du dessus...
gravatar
le 30 mars à 18h56 blackg Répondre hello, merci pour ce trés bon tuto! j'ai une petite question : j'essaie de lire un flux en https mais ça ne fonctionne pas...est-ce qu'il y aurait une manipulation à faire pour le https?
gravatar
le 30 mars à 19h01 blackg Répondre le message d'erreur est le suivant : "warning : failed to load external entity"

Requête en cours, veuillez patienter...

Ajouter un commentaire