TP11 : flux rss, manipulations d'objet Ce tp poursuit les tps précédents. Les 4 premières étapes sont indépendantes des autres, seule la dernière concerne l'intégration dans les tps précédents. Pour cela, vous pouvez vous basez sur la correction du TP 10. Réalisez ce tp dans un nouveau dossier tp11 (à côté de vos autres tps). 1. Lire un flux rss : création de la classe FluxRss L'objectif est d'écrire une classe qui va télécharger un flux rss pour le convertir en html. Nous allons commencer par convertir le premier article du flux. Créez un fichier "FluxRss.inc". Il contiendra la classe FluxRss. Voici une page index.php qui l'utilisera (il utilise la même feuille de style que les tps précédents) : include "FluxRss.inc"; $flux = new FluxRss(); $html = $flux->getpremierarticle(); <!doctype html> <html> <head> <meta charset="utf-8" /> <title>test rss</title> <link media="screen" type="text/css" rel="stylesheet" href="styles/tp02-style.css" /> </head> <body> echo $html; </body> </html> Voici le squelette (à compléter) de votre classe FluxRss : class FluxRss { private $url = "http://filuns.unice.fr/accueil/@@rss_view";
* * @var DOMDocument private $xml; * constructeur pour le * @param string $url * @param int $datemax * @param string $filename public function FluxRss() { $this->xml = new DOMDocument(); @$this->xml->load($this->url); * parcours du DOM du flux rss pour en extaire $nb article et les transformer en html... * @param int $nb public function getpremierarticle() { $rsshtml = ""; // à compléter.. return $rsshtml; La méthode getpremierarticle doit donc retrouver le premier item du flux et générer un html à partir du title, de la description et de la pubdate, sembable à l'html des articles des tps précédents (avec en plus la date de publication) : <div class='article'> <h2>sensibilisons la jeunesse à la lutte contre les discriminations : opération Droit au Coeur </h2> L'opération Droit au Coeur, est organisée par l'uns, en partenariat avec le Défenseur des Droits, le Conseil Départemental d'accès au Droit 06 et le Rectorat de l'académie de Nice. <br /><strong class='date'>2014-05-20 [12:38]</strong> </div>
2. Lecture de tout le flux. A votre classe FluxRss ajoutez une méthode gettouslesarticles. Dans un premier temps elle génère un code html pour tous les items du flux. Le code de cette méthode est donc proche de celui de la méthode getpremierarticle, mais en répétant le code (boucle foreach ou for) pour tous les items du flux. Dans un second temps ajoutez un paramètre $nb à la méthode pour limiter le nombre d'articles affichés : si $nb a une valeur et que cette valeur est un entier positif, la boucle se fait pour le minimum entre $nb et le nombre d'item. 3. Paramétrage de la classe FluxRss Modifiez votre classe FluxRss pour que le flux puisse être précisé lors de la construction (new) de l'objet. Le constructeur de la classe FluxRss peut prendre deux paramètres : une adresse pour un flux et un nom pour l'auteur des articles, dans le cas où celui-ci n'est pas spécifié dans les items avec la balise author. La classe FluxRss s'enrichit donc d'un champ de classe : $auteur_par_defaut. Les codes de getpremierarticle et gettouslesarticles doivent être modifier pour ajouter l'auteur à l'article (balise <p> après le <h2>). Le code de la page index.php devient : include "FluxRss.inc"; $html = ""; if (isset($_post["flux"],$_post["auteur"])) { $flux = new FluxRss($_POST["flux"], $_POST["auteur"]); $html = "<h2>{$_post["flux"]</h2>\n".$flux- >gettouslesarticles($_post["nb"]); <!doctype html> <html> <head> <meta charset="utf-8" /> <title>test rss</title> <link media="screen" type="text/css" rel="stylesheet" href="styles/tp02-style.css" /> </head> <body> echo $html;
<form method="post" > <fieldset><legend>flux à visualiser</legend> adresse : <input type="url" name="flux" value="http://filuns.unice.fr/accueil/@@rss_view"/><br /> nombre d'article : <input type="number" name="nb" min="0" max="10" step="1" value="3"/><br /> auteur par défaut : <input type="text" name="auteur" value="uns" /><br /> <input type="submit" /> </form> </body> </html> Pour essayer avec d'autres flux, voici des urls : http://www.lemonde.fr/ameriques/rss_full.xml http://www.leparisien.fr/une/rss.xml https://news.google.fr/news/feeds?pz=1&cf=all&ned=fr&hl=fr&output=rss http://filuns.unice.fr/accueil/@@rss_view 4. Enregistrer les articles dans un fichier.news Ajoutez une nouvelle méthode à votre classe FluxRss : public function importetouslesarticles($nb). Son code est initialement le même que celui de gettouslesarticles. L'apport sur cette méthode est de pouvoir sauvegarder dans un fichier les articles lus dans les flux rss. Pour cela, il faut : Déterminer le nom du fichier. Il sera "news/import/pubdate_title.new". Il faut donc créer un dossier news qui contient un dossier import. Donnez les droits d'écriture (chmod o+w.) dans ce dossier import à "php". pubdate est le contenu de la balise pubdate de l'item. title est le contenu de la balise title de l'item. Attention, un nom de fichier ne peut pas contenir les caractères suivant s : "\", "/", ":"; "*", "?"; "; "<", ">", " ", "'" et " ". La ligne de code suivante devrait vous être utile : $filename = urlencode($titre); Il faut déterminer son contenu : 1ère ligne le titre, 2de ligne l'auteur et le reste c'est l'article. Une fois que tout est prêt, il n'y plus qu'à utiliser file_put_contents
5. Intégration dans le site d'article Dernière étape : intégrer ce code dans le site. Pour cela ajouter un page "importer.php" dans le menu "Administrer les nouvelles", sur le modèle d'ajouter.php. Gérez bien les include (notamment de FluxRss.inc). Fusionnez les dossiers news (de ce tp avec celui du tp précédent).