Créer et gérer un Flux RSS 2.0

Tout site qui publie régulièrement des news ou articles devrait avoir un flux RSS. Concrètement, le flux RSS, fil RSS ou encore flux de syndication (nommé « RSS feed » en anglais) est un fichier XML dynamique contenant des informations mises à jour très régulièrement.

Il permet via un lecteur de flux d'obtenir des mises à jours de la part des sites que l'on suit sans avoir à se connecter à ceux-ci.

Pour cela, il existe de nombreux lecteurs de flux RSS :

  • Intégré directement au navigateur
  • AmphetaDesk
  • BottomFeeder
  • IntraVnews
  • RSS Reader
  • SharpReader
  • Syndigator
  • Feed on Feeds

Et bien d'autres encore ! Ce n'est pas ce qui manque sur le web !

Nous allons apprendre ici à créer un flux RSS à partir d'une base de données MySQL.

Il existe d'autres types de flux d'informations : les Atoms qui sont un autre format de syndication. Nous ne les étudierons pas dans ce tutoriel mais sachez qu'ils fonctionnent à peu près de la même manière que les flux RSS.


Suivez le guide !

Création du flux RSS 2.0


Pour commencer, nous allons apprendre les spécifications standards d'un flux RSS 2.0, en d'autres termes, comment il est construit. Puis nous verrons comment ajouter des news dans notre flux RSS 2.0.

Sans plus tarder : débutons !

Suivez le guide ! Déclarer son flux RSS


Nous allons commencer créer un nouveau fichier texte de base et nous allons lui ajouter des informations afin de le transformer en un fichier XML.

Un flux RSS est en réalité un fichier XML. Il commence donc par la spécification du format XML dans la toute première ligne du fichier que nous allons utiliser.

  1. <?xml version="1.0" encoding="UTF-8" ?>


Pour créer un flux RSS 2.0, nous allons utiliser des paires de balises XML avec une signification et une utilisation bien précise.

Tout flux RSS 2.0 commence et se termine par une paire de balises « <rss> ». Celle-ci contient toujours la version du standard RSS que l'on utilise. Il existe de versions plus vielles que l'on utilise encore parfois. Pour maximiser la compatibilité, nous utiliserons la versions la plus à jour : la 2.0.

Pour vous éviter tout un long discourt, rien ne vaut un petit exemple. Voici la déclaration d'un flux RSS 2.0 de base :

  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <rss version="2.0">
  3.   <channel>
  4.     <title>Titre du channel</title>
  5.     <link>http://www.craym.eu</link>
  6.     <description>Description du channel</description>
  7.  
  8.   </channel>
  9. </rss>


Dans chaque fichier de flux RSS, on trouve un channel qui contient le fil d'actualité. Il n'y en a qu'un seul par fichier et est symbolisé avec les balises « <channel> », « </channel> ».

C'est entre ces balises que nous allons spécifier les caractéristiques du channel comme nous l'avons brièvement montré dans l'exemple ci-dessus.

Notez que les 3 balises « <title> », « <link> » et « <description> » sont obligatoires.

Il existe un grand nombre de balises possibles. Nous allons sans plus tarder jeter un oeil à leur construction et leur utilisation :


Liste de toutes les balises possibles que l'on peut insérer dans un <channel>
Balise Description
title

Indique le titre du channel :

  1. <title>Titre du channel</title>
link

Permet d'indiquer l'URL du site où se trouve le flux :

  1. <link>http://www.craym.eu</link>
description

Permet de décrire le contenu du channel :

  1. <description>Description du channel</description>
language

Code de deux lettres pour indiquer la langue principale des informations :

Liste cache, cliquer pour afficher / cacher la liste
  • Afrikaans : « af »
  • Albanian : « sq »
  • Basque : « eu »
  • Belarusian : « be »
  • Bulgarian : « bg »
  • Catalan : « ca »
  • Chinese (Simplified) : « zh-cn »
  • Chinese (Traditional) : « zh-tw »
  • Croatian : « hr »
  • Czech : « cs »
  • Danish : « da »
  • Dutch : « nl »
  • Dutch (Belgium) : « nl-be »
  • Dutch (Netherlands) : « nl-nl »
  • English : « en »
  • English (Australia) : « en-au »
  • English (Belize) : « en-bz »
  • English (Canada) : « en-ca »
  • English (Ireland) : « en-ie »
  • English (Jamaica) : « en-jm »
  • English (New Zealand) : « en-nz »
  • English (Phillipines) : « en-ph »
  • English (South Africa) : « en-za »
  • English (Trinidad) : « en-tt »
  • English (United Kingdom) : « en-gb »
  • English (United States) : « en-us »
  • English (Zimbabwe) : « en-zw »
  • Estonian : « et »
  • Faeroese : « fo »
  • Finnish : « fi »
  • French : « fr »
  • French (Belgium) : « fr-be »
  • French (Canada) : « fr-ca »
  • French (France) : « fr-fr »
  • French (Luxembourg) : « fr-lu »
  • French (Monaco) : « fr-mc »
  • French (Switzerland) : « fr-ch »
  • Galician : « gl »
  • Gaelic : « gd »
  • German : « de »
  • German (Austria) : « de-at »
  • German (Germany) : « de-de »
  • German (Liechtenstein) : « de-li »
  • German (Luxembourg) : « de-lu »
  • German (Switzerland) : « de-ch »
  • Greek : « el »
  • Hawaiian : « haw »
  • Hungarian : « hu »
  • Icelandic : « is »
  • Indonesian : « in »
  • Irish : « ga »
  • Italian : « it »
  • Italian (Italy) : « it-it »
  • Italian (Switzerland) : « it-ch »
  • Japanese : « ja »
  • Korean : « ko »
  • Macedonian : « mk »
  • Norwegian : « no »
  • Polish : « pl »
  • Portuguese : « pt »
  • Portuguese (Brazil) : « pt-br »
  • Portuguese (Portugal) : « pt-pt »
  • Romanian : « ro »
  • Romanian (Moldova) : « ro-mo »
  • Romanian (Romania) : « ro-ro »
  • Russian : « ru »
  • Russian (Moldova) : « ru-mo »
  • Russian (Russia) : « ru-ru »
  • Serbian : « sr »
  • Slovak : « sk »
  • Slovenian : « sl »
  • Spanish : « es »
  • Spanish (Argentina) : « es-ar »
  • Spanish (Bolivia) : « es-bo »
  • Spanish (Chile) : « es-cl »
  • Spanish (Colombia) : « es-co »
  • Spanish (Costa Rica) : « es-cr »
  • Spanish (Dominican Republic) : « es-do »
  • Spanish (Ecuador) : « es-ec »
  • Spanish (El Salvador) : « es-sv »
  • Spanish (Guatemala) : « es-gt »
  • Spanish (Honduras) : « es-hn »
  • Spanish (Mexico) : « es-mx »
  • Spanish (Nicaragua) : « es-ni »
  • Spanish (Panama) : « es-pa »
  • Spanish (Paraguay) : « es-py »
  • Spanish (Peru) : « es-pe »
  • Spanish (Puerto Rico) : « es-pr »
  • Spanish (Spain) : « es-es »
  • Spanish (Uruguay) : « es-uy »
  • Spanish (Venezuela) : « es-ve »
  • Swedish : « sv »
  • Swedish (Finland) : « sv-fi »
  • Swedish (Sweden) : « sv-se »
  • Turkish : « tr »
  • Ukranian : « uk »

  1. <language>fr</language>
copyright

Permet d'indiquer le copyright sur les informations du channel :

  1. <copyright>Copyright 2011, Craym Internet Technology</copyright>
managingEditor

Donne l'e-mail de la personne en charge du contenu :

  1. <managingEditor>rss@monsite-craym.eu</managingEditor>
webMaster

Donne l'e-mail du webmaster du site :

  1. <webMaster>webmaster@monsite-craym.eu</webMaster>
pubDate

Date de publication du flux, c'est à dire date de la dernière mise à jour majeure des informations diffusées par le flux. Par exemple, le New York Times publie chaque jour un nouveau flux RSS. Le changement étant important (il n'y a pas les mêmes informations que la veille), la date doit être actualisée.

La date est au format RFC 822, comme dans l'exemple ci-dessous :

  1. <pubDate>Sat, 01 Jan 2011 12:00:00 GMT</pubDate>
lastBuildDate

Date de la dernière news parut :

  1. <lastBuildDate>Sat, 01 Jan 2011 14:53:12 GMT</lastBuildDate>
category

Donne la catégorie du channel. Celle-ci est assez libre mais doit correspondre au contenu du channel et à la manière dont sont rangées les informations sur le site :

  1. <category>Tutoriels pour webmaster</category>

Ou encore :

  1. <category domain="http://www.craym.eu/tutoriels.html">    Développement</category>
generator

Permet d'indiquer le nom du programme/outil qui a généré le flux :

  1. <generator>PHP/MySQL</generator>
docs

Lien sur la documentation RSS 2.0 :

  1. <docs>http://www.rssboard.org</docs>
cloud

Indique à un lecteur de flux RSS qu'il peut enregistrer l'adresse du flux à travers l'interface « RssCloud Application Programming » afin de demander plus rapidement et plus souvent si des mises à jour du flux sont disponibles :

  1. <cloud domain="craym.eu" port="80" path="/rss/" registerProcedure="myCloud.rssPleaseNotify" protocol="xml-rpc" />

Vous pouvez lire la documentation anglaise sur ce sujet : ici.

ttl

« ttl » ou « Time to Live » indique l'intervale de temps, en minutes, avant qu'il ne faille rafraichir le flux RSS. (Le rafraichissement est automatiquement effectué par le lecteur de flux).

  1. <ttl>60</ttl>
image

« <image> » permet d'ajouter une image à un flux RSS. Celle-ci se place en haut à droite du flux.

Celle balise contient l'URL de l'image à afficher ainsi le lien de la page à afficher si l'on clique dessus.

Les types d'images supportés sont : « GIF », « JPEG » ou « PNG ».

  1. <image>
  2.   <title>Titre de l'image</title>
  3.   <url>http://www.craym.eu/logo.png</url>
  4.   <link>http:///www.craym.eu/tutoriels.html</link>
  5.   <description>Toute nos tutoriels sur Craym.eu !</description>
  6.   <width>80</width>
  7.   <height>80</height>
  8. </image>

Il existe plusieurs balises pour décrire l'image :

  • (Obligatoire) <url> indique l'adresse de l'image à afficher
  • (Obligatoire) <title> indique le titre de l'image qui se trouvera dans la balise « Alt ».
  • (Obligatoire) <link> indique l'URL du site qui publie le flux.

  • (Facultatif) <width> donne la largeur de l'image. La valeur par défaut est 88px. La valeur maximum est 144px.

  • (Facultatif) <height> donne la hauteur de l'image à afficher. Par défaut de 31px. La valeur maximum est 400px.

  • (Facultatif) <description> permet de compléter le texte de la balise « title » de l'image.
rating

Donne le rating du flux au format PICS.

textInput

Ajouter une zone de saisie de texte.

Elle peut contenir plusieurs sous-balises :

  • <title> indique le label du bouton de soumission
  • <description> décrit brièvement l'utilité de la zone de texte
  • <name> permet d'indiquer le nom de l'objet text que l'on utilise pour traiter la requête
  • <link> l'URL de la page qui doit traiter la requête.

Le but de cette zone de saisie reste un mystère. Elle peut être utilisée pour obtenir un peu de feed-back ou proposer une zone de recherche. La plupart du temps cette balise est donc totalement ignorée.

skipHours

Comporte un nombre entre 0 et 23 qui indique les heures que les agrégateurs peuvent ignorer. Les heures sont spécifiées avec les balises <hour> </hour>.

Le but est d'indiquer au lecteur de ne pas lire les news des heures indiquées (le lecteur de flux RSS n'ira pas chercher les informations aux heures spécifiées).

  1. <skipHours>
  2.   <hour>23</hour>
  3. </skipHours>
skipDays

Même utilité que « skipHours » mais cette fois-ci pour les jours de la semaine. Ils sont spécifiés entre des balises <day>.

Les valeurs possibles sont les jours de la semaine en anglais : « Monday » , « Tuesday », « Wednesday », « Thursday », « Friday », « Saturday » ou « Sunday ».

  1. <skipDays>
  2.   <day>Sunday</day>
  3. </skipDays>

Voici donc un exemple bien plus complet comprenant l'utilisation des principales balises ci-dessus :

  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <rss version="2.0">
  3.   <channel>
  4.     <title>Titre du channel</title>
  5.     <link>http://www.craym.eu</link>
  6.     <description>Description du channel</description>
  7.     <language>fr</language>
  8.     <copyright>Craym.eu</copyright>
  9.     <managingEditor>rss@monsite-craym.eu</managingEditor>
  10.     <webMaster>webmaster@monsite-craym.eu</webmaster>
  11.     <pubDate>Fri, 01 Nov 2010 12:00:00 GMT</pubDate>
  12.     <lastBuildDate>Sat, 01 Jan 2011 14:53:12 GMT</lastBuildDate>
  13.     <category>Tutoriel</category>
  14.     <generator>PHP/MySQL</generator>
  15.     <docs>http://www.rssboard.org</docs>
  16.     <cloud domain="craym.eu" port="80" path="/rss/" registerProcedure="myCloud.rssPleaseNotify" protocol="xml-rpc" />
  17.     <ttl>60</ttl>
  18.     <image>
  19.       <title>Titre de l'image</title>
  20.       <url>http://www.craym.eu/logo.png</url>
  21.       <link>http://www.craym.eu/tutoriels.html</link>
  22.       <description>Toute nos tutoriels sur Craym.eu !</description>
  23.       <width>80</width>
  24.       <height>80</height>
  25.     </image>
  26.     <skipHours>
  27.       <hour>23</hour>
  28.     </skipHours>
  29.     <skipDays>
  30.       <day>Sunday</day>
  31.     </skipDays>  
  32.    
  33.   </channel>
  34. </rss>

Nous sommes donc maintenant parfaitement en mesure de déclarer notre flux RSS. Il sera ainsi accepté par tous les lecteurs de flux et sera donc diffusable.

 

Suivez le guide ! Ajouter des items

 

Il reste cependant une balise que nous n'avons pas ajoutée dans cette liste ci-dessus : la balise « Item ». C'est en fait elle qui contient l'information et les « feeds ». Chaque item représente une news / un article / un feed.

Toutes les balises d'un item sont facultatives mais il est obligatoire d'y trouver au moins un titre ou une description.

Voici un exemple de notre flux RSS avec un item.

  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <rss version="2.0">
  3.   <channel>
  4.     <title>Titre du channel</title>
  5.     <link>http://www.craym.eu</link>
  6.     <description>Description du channel</description>
  7.    
  8.     <item>
  9.       <title>Titre de la news</title>
  10.       <link>http://www.craym.eu/tutoriels/developpement/flux_RSS.html</link>
  11.       <description>Un tutoriels sur les Flux RSS</description>
  12.       <pubDate>Sat, 01 Jan 2011 12:00:00 GMT</pubDate>
  13.     </item>
  14.  
  15.   </channel>
  16. </rss>

 

Chaque item est composé de plusieurs sous-balises qui lui permettent de donner plus d'informations sur l'item proposé.

Voici comme précédemment la liste des différentes balises et leurs utilisations :

Liste de tous les éléments pouvant se trouver dans la balise <item>
Balise Description
title

Donne le titre de l'item :

  1. <title>Titre de la news</title>
link

Donne l'URL complète de la page de la news. Cette URL est le lien indiqué dans chaque notification. C'est là que ce trouve la source.

  1. <link>http://www.craym.eu/tutoriels/developpement/flux_RSS.html</link>
description

C'est dans cette balise que vous allez entrer votre texte. C'est le message qui s'affichera dans la notification à propos de cet news/article.

  1. <description>Un tutoriels sur les Flux RSS complet avec même le code pour le gérer ! Enjoy !</description>
author

Permet d'indiquer l'e-mail de l'auteur de l'item. C'est très utilisé pour les journaux ou les blogs de groupe/projets.

  1. <author>redacteur@monsite-craym.eu</author>
category

Renseigne sur la catégorie de l'item. Tout comme la catégorie du channel, celle-ci est assez libre mais doit correspondre au contenu du channel et à la manière dont sont rangées les informations sur le site :

  1. <category>Tutoriels pour webmaster</category>
comments

Donne le lien de la page de commentaire sur cet item :

  1. <comments>http://www.craym.eu/tutoriels/developpement/flux_RSS.html?commentaires_sur_l'article</comments>
enclosure

L'enclosure permet de joindre un média à l'item. Pour cela, 3 informations sont obligatoires :

  • l'URL du média (obligatoirement commençant par « http:// »
  • La taille de celui-ci en bytes
  • Le type d'extension utilisé standardisé au format MIME.

  1. <enclosure url="http://www.craym.eu/mp3/une_musique_classique.mp3" length="12216320" type="audio/mpeg" />

Voici une liste des extensions possibles :

Liste cache, cliquer pour afficher / cacher la liste
Type MIME Type de fichier Extension associée
application/atom+xml Fichiers au format ATOM atom
application/iges Fichiers CAS iges
application/javascript Fichiers Javascript js
application/dxf Fichiers AutoCAD dxf
application/mp4 Fichiers MPEG4 mp4
application/iges Format d'échange CAO IGES igs,iges
application/octet-stream Fichiers binaires non interprétés bin
application/msword Fichiers bureautique au format Microsoft Word doc
application/pdf Fichiers Adobe Acrobat pdf
application/postscript Fichiers PostScript ai,eps,ps
application/rtf Format de texte enrichi rtf
application/sgml Fichiers SGML sgml
application/vnd.ms-excel Fichiers tableur au format Microsoft Excel xls
application/vnd.ms-powerpoint Fichiers diaporama au format Microsoft Powerpoint ppt
application/xml fichier XML xml
application/x-tar Fichiers compressés tar tar
application/zip Fichiers compressés ZIP man
audio/basic Fichiers audio basiques au,snd
audio/mpeg Fichiers audio MPEG mpg,mp3
audio/mp4 Fichiers audio MPEG-4 mp4
audio/x-aiff Fichiers audio AIFF aif,aiff,aifc
audio/x-wav Fichiers audio Wave wav
image/gif Images gif man
image/jpeg Images JPEG jpg,jpeg,jpe
image/png Images PNG png
image/tiff Images Tiff tiff,tif
image/x-portable-bitmap Fichiers Bitmap PBM pbm
image/x-portable-graymap Fichiers Graymap PBM pgm
image/x-portable-pixmap Fichiers Pixmap PBM ppm
multipart/x-zip Fichiers archive zip zip
multipart/x-gzip Fichiers archive GNU zip gz,gzip
text/css Feuille de style css
text/csv Fichiers texte avec séparation des valeurs csv
text/html Fichiers HTML htm,html
text/plain Fichiers texte sans mise en forme txt,g,h,c,cc,hh,m,f90
text/richtext Fichiers texte enrichis rtx
text/rtf Fichiers texte au format Rich Text Format rtf
text/tab-separated-value Fichiers texte avec séparation des valeurs tsv
text/xml Fichiers XML xml
video/h264 Vidéos H.264 h264
video/dv Vidéos au format DV dv
video/mpeg Vidéos MPEG mpeg,mpg,mpe
video/quicktime Vidéos QuickTime qt,mov
video/msvideo Vidéos Microsoft Windows avi
guid

Cette balise est composée d'un texte unique qui permet d'être sur que chaque item est différent.

Elle doit donc forcément être différente pour chaque item ! Vous pouvez y mettre ce que vous voulez tant que cette chaîne de caractères est unique et ne change pas.

  1. <guid>100299304904</guid>

Par mesure de simplicité, nous utiliserons des timestamps qui sont très efficaces pour identifier de manière unique un document. Nous verrons pourquoi et comment par la suite.

Il existe un attribut pour cette balise qui permet d'indiquer que le lien de cette balise est unique. Sa valeur peut être portée à « true » ou « false » :

  1. <guid isPermaLink="true">100299304904</guid>

 

pubDate

Date de publication de l'item. Celle-ci est au format RFC 822 :

  1. <pubDate>Sat, 01 Jan 2011 12:00:00 GMT</pubDate>
source

Donne l'adresse URL du flux qui a publié l'item. Très pratique pour les syndications de contenu par d'autres sites web. Ainsi n'importe quel lecteur sera toujours en mesure de retrouver la source de l'article/news proposée.

  1. <source url="http://www.craym.eu/rss/flux_rss_news.rss">Craym's News</source>

Voici maintenant un exemple complet d'un item :

  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <rss version="2.0">
  3.   <channel>
  4.     <title>Titre du channel</title>
  5.     <link>http://www.craym.eu</link>
  6.     <description>Description du channel</description>
  7.    
  8.     <item>
  9.       <title>Titre de la news</title>
  10.       <link>http://www.craym.eu/tutoriels/developpement/flux_RSS.html</link>
  11.       <description>Un tutoriels sur les Flux RSS complet avec même le code pour le gérer ! Enjoy !</description>
  12.       <author>redacteur@monsite-craym.eu</author>
  13.       <category>Tutoriels pour webmaster</category>
  14.       <comments>http://www.craym.eu/tutoriels/developpement/flux_RSS.html?commentaires_sur_l'article</comments>
  15.       <enclosure url="http://www.craym.eu/mp3/une_musique_classique.mp3" length="12216320" type="audio/mpeg" />
  16.       <guid>100299304904</guid>
  17.       <pubDate>Sat, 01 Jan 2011 12:00:00 GMT</pubDate>
  18.       <source url="http://www.craym.eu/rss/flux_rss_news.rss">Craym's News</source>
  19.     </item>
  20.  
  21.   </channel>
  22. </rss>

Rien de bien difficile n'est-ce pas ?

Vous êtes maintenant en mesure de créer un flux RSS 2.0 sans problèmes ! Rassurez-vous il n'y aura plus de balises supplémentaires, nous avons terminé avec la création du flux ! Il est temps de passer à l'étape suivante !

 

Suivez le guide !

Automatisation de la gestion du flux RSS 2.0


Bien ! Maintenant que nous savons exactement comment se créer un flux RSS 2.0, vous vous doutez bien que nous n'allons pas créer à la main un à un les items de chaque news, nous allons automatiser le tout !

Pour cela, nous allons avoir besoin d'une base de données. En fait, nous allons nous servir de celle que vous utilisez déjà pour vos news ou vos articles et même si ce n'est pas encore le cas, passez le pas et créez s'en une !


Suivez le guide ! Création de la base de données

Nous allons commencer par créer notre base de données et si celle-ci existe déjà, modifier et vérifier la structure de celle-ci afin d'être compatible avec la génération d'un flux RSS 2.0.

Si vous n'êtes pas familier avec le concept des bases de données, je vous conseille de lire l'introduction sur les bases de données :

Notez que pour faire ces différentes modifications, vous aurez besoin de maitriser PhpMyAdmin, notre interface pour gérer nos bases de données. Vous pouvez lire le tutoriel sur son utilisation ici :

Voici la structure de la base de données que nous allons utiliser. Les noms des champs correspondent à ceux d'un flux RSS. L'objectif est de « convertir » votre base de données actuelle (celle de vos news) en y ajoutant de l'information afin d'être capable de générer le flux RSS.

Nom Champ Type Description
ID médium Int Pensez à l'Auto incrément ainsi qu'à utiliser ce champ comme champ primaire.

Utilisé dans toutes les bases, il n'y a aucun problème.
TITLE tiny Text Le titre de la news
LINK tiny Text Le lien de la page contenant la news
GUID timestamp Utilisez l'option : current timestamp. Comme cela, nous n'aurons jamais à entrer la valeur qui sera automatiquement le timestamp de la date de création de la news.

Cela assure l'unicité de chaque document (sauf si vous arrivez à poster 2 news dans la même seconde...)
DESCRIPTION text Probablement un champ à ajouter.

Il doit contenir une description courte en une ou deux phrases de ce que contient votre article.
PUBDATE datetime Vous pouvez choisir la date de publication du document mais de manière générale, la date du jour convient très bien.


Vous pouvez, si vous le souhaitez ajouter les champs ci-dessous en respectant bien le format décrit plus haut. Nous ne les utiliserons pas dans notre exemple :

Nom Champ Type Description
SOURCE tiny Text  
ENCLOSURE (3 champs) tiny Text
Int
tiny Text
Pour l'URL du média
Pour la taille de celui-ci
Pour le format du média
COMMENTS Text  
CATEGORIE tiny Text  
AUTHOR tiny Text  


Question

Petite mise en garde : Comme nous allons générer notre fichier à partir d'une base de données, veillez à ce que l'encodage de la base de données soit le même que celui du fichier XML (à vérifier dans la structure de celle-ci). Sinon, vous aurez de drôles de caractères qui vont apparaitre dans votre fichier ce qui est plutôt gênant.

Notez qu'il existe les fonctions « utf8_encode() » et « utf8_decode() » pour vous permettre d'effectuer des conversions si besoin est.



Suivez le guide ! Générer le flux RSS automatiquement

Maintenant que notre base de données est prête à créer notre flux RSS, nous allons créer une fonction PHP qui va nous permettre de générer le flux RSS.

Pour cela, nous allons avoir besoin de plusieurs choses :

  • D'un fichier XML (un fichier texte basique dont l'extension, lors de la sauvegarde, se termine en .xml)
  • De l'emplacement de ce fichier sur votre site de manière relative au script php qui va appeler la fonction de mise à jour (on placera donc tous les fichiers de gestion du flux dans un même dossier par simplicité)

Voici le code commenté en détail de la fonction de mise à jour du flux :

  1. <?php
  2.  
  3. //On déclare la fonction Php :
  4. function update_fluxRSS() {
  5.  
  6. /*  Nous allons générer notre fichier XML d'un seul coup. Pour cela, nous allons stocker tout notre
  7.   fichier dans une variable php : $xml.
  8.   On commence par déclarer le fichier XML puis la version du flux RSS 2.0.
  9.   Puis, on ajoute les éléments d'information sur le channel. Notez que nous avons volontairement
  10.   omit quelques balises :
  11. */
  12.  
  13. $xml = '<?xml version="1.0" encoding="UTF-8"?>';
  14. $xml .= '<rss version="2.0">';
  15. $xml .= '<channel>';
  16. $xml .= ' <title>Voici mon premier flux RSS !</title>';
  17. $xml .= ' <link>http://www.craym.eu</link>';
  18. $xml .= ' <description>Voici le flux RSS de mon site ! Suivez le pour avoir les dernières news !</description>';
  19. $xml .= ' <image>';
  20. $xml .= '   <title>Titre de l\'image</title>';
  21. $xml .= '   <url>http://www.craym.eu/logo.png</url> ';
  22. $xml .= '   <link>http:///www.craym.eu/tutoriels.html</link> ';
  23. $xml .= '   <description>Toute nos tutoriels sur Craym.eu !</description>';
  24. $xml .= '   <width>80</width>';
  25. $xml .= '   <height>80</width>';
  26. $xml .= ' </image>';
  27. $xml .= ' <language>fr</language>';
  28. $xml .= ' <copyright>Craym.eu</copyright>';
  29. $xml .= ' <managingEditor>rss@monsite-craym.eu</manadgingEditor>';
  30. $xml .= ' <category>Tutoriel</category>';
  31. $xml .= ' <generator>PHP/MySQL</generator>';
  32. $xml .= ' <docs>http://www.rssboard.org</docs>';
  33.  
  34.  
  35.  
  36. /*  Maintenant, nous allons nous connecter à notre base de données afin d'aller chercher les
  37.   items à insérer dans le flux RSS.
  38. */
  39.  
  40. //on lit les 25 premiers éléments à partir du dernier ajouté dans la base de données
  41. $index_selection = 0;
  42. $limitation = 25;
  43.  
  44. //On se connecte à notre base de données (pensez à mettre les bons logins)
  45. try {
  46.   $bdd = new PDO('mysql:host=localhost;dbname=flux_rss', 'nom_utilisateur', 'mot_de_passe');
  47. }
  48. catch(Exception $e) {die('Erreur : '.$e->getMessage());}
  49.  
  50. //On prépare la requête et on exécute celle-ci pour obtenir les informations souhaitées :
  51. $reponse = $bdd->prepare('SELECT * FROM flux_rss ORDER BY pubDate DESC LIMIT :index_selection, :limitation') or die(print_r($bdd->errorInfo()));
  52. $reponse->bindParam('index_selection', $index_selection, PDO::PARAM_INT);
  53. $reponse->bindParam('limitation', $limitation, PDO::PARAM_INT);
  54. $reponse->execute();
  55.  
  56. //Une fois les informations récupérées, on ajoute un à un les items à notre fichier
  57. while ($donnees = $reponse->fetch())
  58. {
  59.   $xml .= '<item>';
  60.   $xml .= '<title>'.stripcslashes($donnees['title']).'</title>';
  61.   $xml .= '<link>'.$donnees['link'].'</link>';
  62.   $xml .= '<guid isPermaLink="true">'.$donnees['link'].'</guid>';
  63.   $xml .= '<pubDate>'.(date("D, d M Y H:i:s O", strtotime($donnees['pubDate']))).'</pubDate>';
  64.   $xml .= '<description>'.stripcslashes($donnees['description']).'</description>';
  65.   $xml .= '</item>';
  66. }
  67.  
  68. //Puis on termine la requête
  69. $reponse->closeCursor();
  70.  
  71. //Et on ferme le channel et le flux RSS.
  72. $xml .= '</channel>';
  73. $xml .= '</rss>';
  74.  
  75. /*  Tout notre fichier RSS est maintenant contenu dans la variable $xml.
  76.   Nous allons maintenant l'écrire dans notre fichier XML et ainsi mettre à jour notre flux.
  77.   Pour cela, nous allons utiliser les fonctions de php File pour écrire dans le fichier.
  78.  
  79.   Notez que l'adresse URL du fichier doit être relative obligatoirement !
  80. */
  81.  
  82. //On ouvre le fichier en mode écriture
  83. $fp = fopen("flux_rss.xml", 'w+');
  84.  
  85. //On écrit notre flux RSS
  86. fputs($fp, $xml);
  87.  
  88. //Puis on referme le fichier
  89. fclose($fp);
  90.  
  91. } //Fermeture de la fonction
  92. ?>

Elle n'est vraiment pas très compliquée mais si certaines choses vous gênent, n'hésitez pas à taper le nom de la fonction dans Google pour en savoir plus sur son utilisation.

Copiez et sauvegardez ce code dans un fichier séparé. Il sera alors bien plus facile de maintenir le code à jour et ce sera bien plus propre. Par exemple, sauvegardez-le sous le nom : « mettre_a_jour_rss.php »

Maintenant, à chaque fois que vous souhaiterez mettre à jour votre flux RSS, vous n'aurez qu'à appeler la fonction de mise à jour du flux :

  1. <?php
  2.  
  3.   //On va chercher le fichier php qui contient le code pour mettre à jour le flux RSS
  4.   include_once("url_relative/mettre_a_jour_rss.php");
  5.  
  6.   //On appelle la fonction de mise à jour du fichier
  7.   update_fluxRSS();
  8.  
  9. ?> 
  10.  

 

Suivez le guide ! Des liens en .rss

Ci-dessous, vous trouverez une astuce sur comment publier vos liens de fichier RSS avec l'extension « .rss » et non pas l'habituelle « .xml » que nous sommes par défaut obliger d'utiliser.

Pour cela nous allons utiliser l'URL rewriting. Il est conseillé de lire le tutoriel sur l'URL Rewriting pour bien comprendre de quoi il s'agit.

Je ne fais que vous donner la syntaxe qu'il vous faudra utiliser pour transformer vos liens :

1
2
3
4
# Transformer un lien .xml en .rss

RewriteEngine on
RewriteRule ^(.+).rss$ $1.xml [L]

Vous n'avez qu'à copier/coller ce code dans votre fichier « .htaccess » pour activer la réécriture. N'oubliez pas de supprimer le « RewriteEngine on » si l'URL Rewriting est déjà actif !

Une fois fait, vous pourrez publier vos liens sous le format :

  1. <a href="le_lien_de_mon_flux_RSS.rss">Flux RSS</a>

 

 

Suivez le guide !

Insérer le flux RSS dans votre page

Il nous reste une chose essentielle à faire : déclarer notre flux RSS dans notre page web.

Ceci est essentiel pour le référencement de votre flux et pour les lecteurs de flux RSS.

La syntaxe est très simple : il suffit d'ajouter l'URL de votre fichier entre les balises <head> et </head> de votre page comme dans l'exemple ci-dessous :

  1. <link rel="alternate" type="application/rss+xml" title="Mon flux RSS" href="http://www.craym.eu/rss/flux_rss_news.rss" />  


Il ne reste donc plus qu'à afficher l'image indicatrice de la présence de votre flux RSS 2.0 sur votre site comme nous le faisons nous-même.

Notez que le lien est en « .rss » car nous avons activé la réécriture d'URL.

  1. <a href="http://www.craym.eu/rss/flux_rss_news.rss">
  2.   <img src="http://www.craym.eu/images/template/rss_mini.png" alt="Flux RSS" border="0" />
  3.   Flux RSS News
  4. </a>

Félicitations ! Vous avez terminé ! Vous êtes maintenant parfaitement en mesure de générer votre flux RSS.