Récupérer un flux RSS

25 mai 2013 nakama

Développement

(Cet article a été écrit il y a très longtemps, dans une galaxie très très lointaine)

Vous êtes-vous demandé de tps en tps comment récupérer un flux rss ? La réponse se trouve dans cet article.

On va utiliser une fonction de php simplexml_load_file ainsi qu’un petit try catch (histoire de ne pas avoir d’erreur si le flux rss est incorrect).

1. Mise en place

$fluxRSS = "http://www.mangaxd.ws/fluxrss.xml";

function recupXML($url){
	if([email protected]$rss = simplexml_load_file($url)){
        throw new Exception('Flux introuvable');
    }else{
    	return $rss;
    }
}

Il n’y a pas grand-chose, je vous l’accorde, mais il y a tout de même 2-3 éléments importants :

Je commence par : mettre en place une fonction qui va essayer de récupérer le flux RSS.

– ligne 4 : le @ sert à cacher l’erreur php qui apparaitrait si l’url du flux est invalide
– ligne 4 : si l’url est invalide on obtient false, mais je l’inverse avec le ! pour obtenir true
– si on entre dans le if, on crée une exception en précisant le texte
– si l’url est correcte, on est dans le else, on renvoie alors la variable rss

Pourquoi inversé false et true ? Ce n’est pas obligé, mais je trouve que c’est plus logique de terminer par un return non ? 🙂 Mais là c’est vous qui voyez 😉

2. Try catch

// on va tester de récupérer le flux rss
// si l'url n'est pas valide, on crée une Exception
try{
	$rss = recupXML($fluxRSS);

	$animes = $rss->channel->item;
}catch(Exception $e){
    echo $e->getMessage();
}

Ici, on fait appel à la fonction dans le try, pour éviter de faire planter le script.

Si la fonction renvoie l’exception, tout ce qui se trouve après la ligne 4 ne sera pas exécuté et le script se rendra directement au catch pour y afficher l’erreur.

Et c’est fini, la variable rss contient tout le flux rss sous forme d’object.

3. Utilisation possible

<?php if(isset($animes)) :
		// on configure le temps en FR
		setlocale (LC_TIME, "fr_FR", "fra");
		$date_format = '%A %d %B %Y à %H:%M'; // format de la date
		echo '<div class="animesRss"> <h2><a href="http://www.mangaxd.ws/" target="_blank">Flux RSS mangaxd</a></h2>';
			foreach ($animes as $anime) : ?>
				<a href="<?php echo $anime->link ?>" target="_blank" class="animeRss">
					<?php if(isset($anime->enclosure['url']) && $anime->enclosure['url'] != "") : ?>
						<img src="<?php echo $anime->enclosure['url'] ?>" alt="" width="200">
					<?php endif; ?>
					<span class="titre"><?php echo $anime->title ?></span>
					<span class="date"><?php echo strftime($date_format, strtotime($anime->pubDate)) ?></span>
				</a>
		<?php endforeach; ?>
		<?php echo "</div>"; ?>
<?php endif; ?>

Explications :

– si $animes n’existe pas on ne fait rien (enfin, on affichera uniquement l’erreur que l’on a configuré :))
– les lignes 3,4 et 12 sont là pour configurer la date en français
– la ligne 8 est là pour tester si l’attribut supplémentaire existe et qu’il n’est pas vide, dans ce cas on affiche l’image

Mots-clés associés à cet article :

Retrouvez d'autres articles par catégories