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(!@$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