Diffuser un flux RSS dynamique

Les fils de syndication RSS sont devenus essentiels pour les blogs, et tout autre type de site qui publie régulièrement du nouveau contenu. C'est un moyen très pratique pour diffuser votre contenu et permettre à vos visiteurs de suivre votre blog en s'abonnant à vos fils RSS.

En outre, cela permet aussi de s'inscrire dans des annuaires RSS, qui vous rapporteront de nombreux liens en profondeur (autres que votre page d'accueil), en plus de pouvoir accrocher les visiteurs de l'annuaire en leur présentant du contenu attrayant avant même qu'ils ne mettent le pied dans votre site Web!

La plupart des CMS (tels que Joomla, Wordpress, Dotclear etc.) ont déjà un script intégré qui vous génère pour vous vos fils RSS. Par contre, si vous possédez un site Web dynamique fait « à la main », vous devrez vous débrouiller seul!

Assumons que vous possédez un site Web dynamique en PHP qui publie des articles de temps en temps. Nous allons créer un fonction PHP pour extraire ces articles de la base de données puis les inscrire dans un fichier XML, ce qui constituera votre fil RSS. Ainsi, votre fil RSS se mettra constamment automatiquement à jour.

Générer automatiquement le flux avec la réécriture d'URL

Pour y arriver, nous allons utiliser la réécriture d'URL car ça permet de faire le tout plus proprement, en simulant le fichier RSS sur demande, au lieu de constamment modifier dynamiquement un fichier RSS réel.

Créez un fichier .htaccess que vous placerez à la racine de votre site, ou bien modifiez celui que vous avez déjà, s'il y-a-lieu :

  1. Options +FollowSymlinks
  2. RewriteEngine on
  3.  
  4. # Le lien pour le fil RSS
  5. RewriteRule ^rss\.xml$  /rss.php [L,NC]

Avec cette réécriture, le fichier rss.php va générer dynamiquement le contenu XML du flux RSS, il le simulera donc le fichier.

Créez un fichier qui se nommera rss.php. Nous extrayons dans l'exemple suivant les derniers articles d'un blogue (imaginaire).

Voici la structure de la table qui sert dans l'exemple :

  1. CREATE TABLE IF NOT EXISTS `blog` (
  2. `id` mediumint(9) NOT NULL COMMENT 'ID de l''article',
  3. `texte` text NOT NULL COMMENT 'Texte de l''article',
  4. `date` date NOT NULL
  5. ) ENGINE=MyISAM DEFAULT CHARSET=latin1 COMMENT='Articles du blogue';

À insérer dans le fichier rss.php :

  1. // Connexion MySQL
  2. $host = "localhost"; // généralement localhost
  3. $user = "NOM_D_UTILISATEUR";
  4. $pass = "MOT_DE_PASSE";
  5. $bdd = "NOM_DE_LA_BD";
  6.  
  7. @mysql_connect($host,$user,$pass) or die("La connexion a échoué: ".mysql_error());
  8. @mysql_select_db("$bdd") or die("La sélection de la base a échoué: ".mysql_error());
  9.  
  10. // Spécifier le type de contenu : XML
  11. header("Content-Type: text/xml");
  12.  
  13. // Requête MySQL qui extrait les articles de la base de données
  14. $requete = "SELECT id, date FROM blog ORDER BY date DESC LIMIT 10"; // les 10 derniers articles
  15. $resultat = mysql_query($requete);
  16.  
  17. // Écriture du fichier XML
  18. // l'entête :
  19. $sm = '';
  20. $sm .= 'xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  21. xsi:schemaLocation="http://www.google.com/schemas/sitemap/0.84
  22. http://www.google.com/schemas/sitemap/0.84/sitemap.xsd">';
  23.  
  24. // Articles du blog
  25. while ($blog=mysql_fetch_array($resultat,MYSQL_ASSOC)) {
  26. $xml = '<?xml version="1.0" encoding="iso-8859-1"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">';
  27. $xml .= '<channel>';
  28. $xml .= '<title>TITRE DU FLUX RSS</title>'; // Le titre de votre flux RSS. Par exemple : Derniers articles du site xyz
  29. $xml .= '<link>HTTP://WWW.VOTRESITE.COM/</link>'; // URL de votre site      
  30. $xml .= '<description>'.$title.'</description>'; // Description de votre site      
  31.  
  32. $xml .= '<image>';
  33. $xml .= '<url>VOTRE_SITE/IMAGE.GIF</url>'; // Une image, logo
  34. $xml .= '<title>TITRE DE L'IMAGE</title>'; // Normalement la même chose que le titre plus haut
  35. $xml .= '<link>HTTP://WWW.VOTRESITE.COM/</link>'; // URL de votre site
  36. $xml .= '<description>DESCRIPTION</description>'; // Description de votre site (pour l'image)
  37. $xml .= '</image>';
  38. }
  39. $i = 0;
  40.  
  41. foreach($news as $a) {
  42. if($i < 12) {
  43. $id = $a['date'];
  44. $datexml = explode('-', $a['date']);
  45. $date2=date("D, d M Y H:i:s", mktime(0,0,0, $datexml[1],$datexml[2],$datexml[0]));
  46.  
  47. $lien = "http://www.votresite.com/articles.php?id=" . $id; // Le lien vers l'article spécifique (à modifier selon vos besoins)
  48.  
  49. $xml .= '<item>';
  50. $xml .= '<title>'.$a['titre'].'</title>'; // Titre de l'article
  51. $xml .= '<link>'.$lien.'</link>'; // Lien vers l'article
  52. $xml .= '<guid isPermaLink="false">'.$lien.'</guid>'; // Permalink
  53. $xml .= '<pubDate>'.$date2.' GMT</pubDate>';
  54. $xml .= '<description>'.strip_tags($a['txt']).'</description>'; // Texte de l'article, en enlevant les tags HTML qu'il peut contenir (il peut y avoir plus de raffinement ici)
  55. $xml .= '</item>';  
  56.  
  57. $i++;
  58. }
  59. }
  60.  
  61. // édition de la fin du fichier XML
  62. $xml .= '</channel>';
  63. $xml .= '</rss>';
  64.  
  65. echo $xml;

Ainsi, lorsque vous tenterez d'accéder http://www.votresite.com/rss.xml, le fichier rss.php sera appelé et un document XML simulé affiché, avec les 10 derniers articles bien frais sortis de votre blog.

Si vous préférez, il est aussi possible de réaliser une fonction à l'aide de ce code, et, au lieu de simuler le fichier avec la réécriture d'URL, écrire directement dans un fichier flux.xml. Inscrivez simplement à la fin de votre fonction quelque chose comme ça, pour écrire dans le fichier :

  1. // écriture dans le fichier
  2. $fp = fopen("flux.xml", 'w+');
  3. fputs($fp, $xml);
  4. fclose($fp);

Ça parle de

Commentaires

Commenter sur ce sujet :

Le contenu de ce champ sera maintenu privé et ne sera pas affiché publiquement.
  • Les adresses de pages web et de messagerie électronique sont transformées en liens automatiquement.
  • Les lignes et les paragraphes vont à la ligne automatiquement.
  • You can enable syntax highlighting of source code with the following tags: <code>, <actionscript>, <apache>, <bash>, <dos>, <html>, <javascript>, <mysql>, <php>, <xml>.
  • Every instance heading tags will be modified to include an id attribute for anchor linking.
  • Image links with 'rel="lightbox"' in the <a> tag will appear in a Lightbox when clicked on.
  • Image links with 'rel="lightshow"' in the <a> tag will appear in a Lightbox slideshow when clicked on.
  • Links to HTML content with 'rel="lightframe"' in the <a> tag will appear in a Lightbox when clicked on.
  • Links to video content with 'rel="lightvideo"' in the <a> tag will appear in a Lightbox when clicked on.
  • Links to inline or modal content with 'rel="lightmodal"' in the <a> tag will appear in a Lightbox when clicked on.
  • Links to specified hosts will have a rel="nofollow" added to them.

  • Insert <!--tableofcontents [list: ol; title: Table of Contents; minlevel: 2; maxlevel: 3; attachments: yes;]--> to insert a mediawiki style collapsible table of contents. Arguments within [] are optional.

Plus d'informations sur les options de formatage