RSS1

Générer un flux RSS

Ce tuto va vous apprendre à concevoir un flux RSS à partir de PHP et de MySQL. Ce tuto vous permettra dans une seconde mesure, de vous familiariser avec les ouvertures et les écritures de fichiers avec PHP. Source Qu’est-ce qu’un flux RSS? Un flux RSS, n’est rien d’autre qu’un fichier XML avec des balises standardisées qui permettent à un internaute de connaître les dernières mises à jour de votre …

 

Ce tuto va vous apprendre à concevoir un flux RSS à partir de PHP et de MySQL. Ce tuto vous permettra dans une seconde mesure, de vous familiariser avec les ouvertures et les écritures de fichiers avec PHP.

Qu’est-ce qu’un flux RSS?

Un flux RSS, n’est rien d’autre qu’un fichier XML avec des balises standardisées qui permettent à un internaute de connaître les dernières mises à jour de votre site web sans pour autant y aller. Il existe à ce jour plusieurs versions de flux RSS, les plus connues sont RSS 1 et RSS 2 qui diffèrent par rapport à l’ordre des balises de votre fichier XML.

Structure d'un fichier RSS

Comme vous le voyez, la structure est assez simple et compréhensible. Le fichier RSS comportera l’extension .xml puisqu’il s’agit d’un document XML. Par ailleur le format des dates dans un flux est assez complexe, mais nous verrons qu’avec PHP cela ne pose pas de problèmes pour formater cette date.

Etape 1: Générer le flux

Commencez par créer un fichier php, ce sera le seul dont nous aurons besoin. La première étape va consister à créer notre flux dans une variable de type chaîne.

$xml = '';
$xml .= '
<?xml version="1.0" encoding="utf-8"?>
  <rss version="2.0">
    <channel>
    <title>Test de flux</title>
    <link>http://www.exemple.com</link>
    <description>La description de mon site se trouve ici!</description>';

Voici le début de mon script. J’ai choisi un encodage en utf-8, mais vous pouvez aussi bien choisir de l’iso-8859-1, tout dépend de l’encodage de votre base de données et de vos préférences.

Afin de pouvoir travailler rapidement, je vous donne un exemple de table à créer, vous pouvez copiez ce code dans PhpMyAdmin.

CREATE TABLE IF NOT EXISTS `actualites` (
  `id` int(10) unsigned NOT NULL auto_increment,
  `titre` varchar(100) collate latin1_general_ci NOT NULL,
  `article` text collate latin1_general_ci NOT NULL,
  `date` datetime NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci AUTO_INCREMENT=3 ;

INSERT INTO `actualites` (`id`, `titre`, `article`, `date`) VALUES
(1, 'test 1', 'Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi.', '2009-02-23 16:44:01'),
(2, 'test 2', 'Nam liber tempor cum soluta nobis eleifend option congue nihil imperdiet doming id quod mazim placerat facer possim assum. Typi non habent claritatem insitam; est usus legentis in iis qui facit eorum claritatem. Investigationes demonstraverunt lectores legere me lius quod ii legunt saepius. Claritas est etiam processus dynamicus, qui sequitur mutationem consuetudium lectorum. Mirum est notare quam littera gothica, quam nunc putamus parum claram, anteposuerit litterarum formas humanitatis per seacula quarta decima et quinta decima. Eodem modo typi, qui nunc nobis videntur parum clari, fiant sollemnes in futurum.', '2009-02-24 16:55:10');

Enfin, voici les quelques lignes à écrire au début de votre script pour vous connecter à la base de données (normalement, les identifiants seront corrects si vous travaillez en local).

define("MYHOST","localhost");
define("MYUSER","root");
define("MYPASS","");
define("MYDB","test");
$connect=mysql_connect(MYHOST,MYUSER,MYPASS) or die ('erreur de connexion');
mysql_select_db(MYDB) or die ('erreur de connexion à la base');

Notre objectif va maintenant être de parcourir notre table SQL et compléter notre variable $xml.

$requeteselect = 'SELECT id,titre,article,date FROM actualites ORDER BY date LIMIT 0,10';  //Selectionne les 10 dernières actualités
$result = mysql_query($requeteselect, $connect);  //éxécute la requête
while($actu_courante = mysql_fetch_array($result,MYSQL_ASSOC)){
	$xml .= '<item>
          <title>'.stripslashes($actu_courante['titre']).'</title>
          <link>http://www.exemple.com/actualites.php?id='.$actu_courante['id'].'</link>
          <description>'.stripslashes($actu_courante['article']).'</description>
          <pubDate>'.date('D, d M Y H:i:s', strtotime($actu_courante['date'])).' GMT</pubDate>
         </item>
         ';
}
mysql_close($connect);
$xml .= '</channel>';
$xml .= '</rss>';

Pour connaître les données de toutes les actus, nous avons besoin d’une boucle. Cette boucle while éxécute la fonction mysql_fetch_array qui retourne une actualité dans un tableau associatif dont les clés sont les noms des colonnes de notre table. Tant qu’il reste des actualités la boucle passe à l’actualité suivante. J’utilise la foncion stripslashes pour éviter d’avoir les antislashes servant à protéger les simple et double quotes.

Pour inscrire la date dans le format convenu, il faut utiliser dans un premier temps la fonction strtotime. Celle-ci, avec votre date en paramètre, vous retournera son timestamp. Grâce à cette valeur nous pourrons avec la fonction date retourner une date formatée. Pour plus d’infos sur la fonction date et notamment sur les formats possibles, je vous conseille d’aller vous renseigner ici: http://fr3.php.net/manual/fr/function.date.php.

Etape 2: Ecrire dans un fichier

Notre script est quasiment terminé, la dernière étape va consister à inscrire cette chaîne ($xml) dans un document XML. 3 lignes suffisent:

$fp = fopen('fluxactu.xml', 'w+');
fputs($fp, $xml);
fclose($fp);

la fonction fopen ouvre un fichier en mémoire, elle prend ici en paramètre le chemin du fichier et le mode d’ouverture (ici w+). w+ signifie que votre fichier est ouvert en lecture et en écriture. Le fichier est automatiquement vidé et si le fichier n’est pas crée il le vide… Elle est pas belle la vie?
La fonction fputs quant à elle, écrit dans le fichier ouvert, le contenu de la variable $xml.
Enfin, la fonction fclose ferme tout simplement le fichier.

Voilà votre petit script de création de flux RSS est terminé.

6 commentaires

S'abonner au RSS des commentaires
  1. François
    Posté le 04/05/2009 à 14h44

    Oui il y’en a qui n’aiment pas trop utiliser le or die pour les connexions à la BDD, à toi de voir:
    Un article intéressant sur le sujet:
    http://www.alsacreations.com/tuto/lire/676-gestion-erreurs-mysql-php-or-die.html

  2. Dakin Quelia
    Posté le 04/05/2009 à 6h09

    Bonjour,

    Je ne suis pas expert mais l’on m’a dit de remplacer les DIE par la fonction trigger_error de php. wink

    A bientôt,

  3. ThibZ
    Posté le 25/02/2009 à 14h16

    Ça serait super !

  4. Stephane
    Posté le 25/02/2009 à 13h23

    Et moi je proposerai le design du blog (qui est déjà prêt) en tuto.

  5. François
    Posté le 25/02/2009 à 11h29

    C’est vrai que ça pourrait être intéressant, j’envisagerais surement d’en faire un… mais par contre en plusieurs parties (au moins 4, pour avoir un système actu,tags,commentaires,recherche) c’est à voir smile

  6. ThibZ
    Posté le 25/02/2009 à 10h55

    Merci encore pour ce super tuto, je vais finir par avoir un site complet grâce à tout vos petits scripts !
    Un système de type blog ne vous tenterai comme tuto pas par hasard? J’ai déjà quelques notions mais pas assez pour faire un système correct de A à Z, et ça m’intéresserai d’essayer un peu tout seul sans dépendre de wordpress avec ces lourdes intégrations de thême.

Laisser un commentaire

Votre e-mail ne sera jamais publié ni communiqué. Les champs obligatoires sont indiqués par *

*
*

Vous pouvez utiliser ces balises et attributs HTML : <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>