Quantcast
Channel: Snoupix » php
Viewing all articles
Browse latest Browse all 2

Lire un flux RSS avec SimpleXML

$
0
0

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

	try{
		if(!@$fluxrss=simplexml_load_file('http://www.lemonde.fr/rss/sequence/0,2-651865,1-0,0.xml')){
			throw new Exception('Flux introuvable');
		}
                //code à venir
	}
	catch(Exception $e){
		echo $e->getMessage();
	}

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); .

	try{
		if(!@$fluxrss=simplexml_load_file('http://www.lemonde.fr/rss/sequence/0,2-651865,1-0,0.xml')){
			throw new Exception('Flux introuvable');
		}
		if(empty($fluxrss->channel->title) || empty($fluxrss->channel->description) || empty($fluxrss->channel->item->title))
			throw new Exception('Flux invalide');

		echo '<h3>'.$fluxrss->channel->title.'</h3>
		<p>'.$fluxrss->channel->description.'</p>';

	}
	catch(Exception $e){
		echo $e->getMessage();
	}

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…

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr" dir="ltr">
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    		<title>Afficher un flux RSS</title>
		<meta name="description" content="Descriptions..." />
		<meta name="Keywords" content="Mots, clefs" />
		<link rel="stylesheet" href="/static/css/miseenpage.css" type="text/css" media="screen, projection" />
		<link rel="shortcut icon" href="favicon.ico"/>
	</head>
  	<body>
	<?php
	try{
		if(!@$fluxrss=simplexml_load_file('http://www.lemonde.fr/rss/sequence/0,2-651865,1-0,0.xml')){
			throw new Exception('Flux introuvable');
		}
		if(empty($fluxrss->channel->title) || empty($fluxrss->channel->description) || empty($fluxrss->channel->item->title))
			throw new Exception('Flux invalide');

		echo '<h3>'.(string)$fluxrss->channel->title.'</h3>
				<p>'.(string)$fluxrss->channel->description.'</p>';

		$i = 0;
		$nb_affichage = 5;
		echo '<ul>';
		foreach($fluxrss->channel->item as $item){
			echo '<li><a href="'.(string)$item->link.'">'.(string)$item->title.'</a> <i>publié le'.(string)date('d/m/Y à G\hi',strtotime($item->pubDate)).'</i></li>';
			if(++$i>=$nb_affichage)
				break;
		}
		echo '</ul>';
	}
	catch(Exception $e){
		echo $e->getMessage();
	}

?>

Notre boucle s’effectue sur les éléments item, et affiche donc les 5 items du flux RSS dans une liste d’élément

    . 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.


    Viewing all articles
    Browse latest Browse all 2

    Latest Images

    Trending Articles