Accueil Boite à Outils Syndication de contenu Syndication de contenu - Archives Un Editeur RSS pour votre site 2/2

Publié le : 24 février 2005
Publication antérieure :
29 janvier 2005

Imprimer Imprimer cet article

Auteur :
Alain Sichel

Alain Sichel
Un Editeur RSS pour votre site 2/2
Explication de l’Editeur RSS en PHP.

Cet article a été publié le 29 janvier 2005, il est actuellement dépassé et n’a plus qu’un intérêt "historique". Pour éditer des fichiers de syndication, je vous conseille plutôt de voir Editez vos flux avec Fil_LE 1/2 et 2/2.

Après le premier article pour présenter l’Editeur RSS [1] et permettre de l’installer tel quel prêt à fonctionner, cette deuxième partie donne quelques explications sur son fonctionnement [2].

Le principe

Le code présenté ici est celui du fichier “maker.php" [3]

Ce fichier utilise la classe "easyRSS" pour lire un fichier de syndication existant et pour l’éditer.

Lire un fichier de syndication existant

Je crois inutile de décortiquer tout le code de cette page, quelques éléments expliqués permettront de comprendre l’ensemble, car il est assez répétitif [4]. Voici le début :

include('easyRSS_reader.inc.php');
if(isset($_POST["rss_url"])) {
$rss_url = ($_POST["rss_url"]);
if (preg_match("#^http://.([\w./-]+)$#i",$rss_url,$ret)) {
$fil = $ret[0];

$rss = new Read_easyRSS();
$rss -> parsefile($fil, 15);
(...)
}
else {echo "<p class=\"red\">L'adresse indiquée n'est pas valide, essayez à nouveau&nbsp;:</p>\n<br />";}
}

On commence par inclure "easyRSS_reader.inc.php" (c’est ici qu’il faudra indiquer le chemin vers ce fichier s’il ne se trouve pas dans le même dossier que "maker.php" [5]). On poursuit en vérifiant que l’URL est correcte, sinon on affiche un message d’erreur.

On poursuit en récupérant les différentes informations dans des variables qui serviront à l’affichage dans les champs du formulaire, sans oublier l’affichage d’un message d’erreur si le fichier n’est pas lisible normalement :

$ctitle = $rss -> get_channel_title();
$clink = $rss -> get_channel_link();
$cdesc = $rss -> get_channel_description();
$cwebmaster = $rss -> get_channel_webmaster();
$ccopyright = $rss -> get_channel_copyright();

$iurl = $rss -> get_image_url();
$ilink = $rss -> get_image_link();
$ititle = $rss -> get_image_title();
$iwidth = $rss -> get_image_width();
$iheight = $rss -> get_image_height();
$idesc = $rss -> get_image_description();

$nbnews = $rss -> get_num_items();
if($nbnews==0) {echo "<p class=\"red\">L'analyse du fichier ".$fil." ne permet pas d'afficher un fil de syndication.</p>
<p class=\"red\">Il ne s'agit pas d'un fichier au format RSS 0.91 ou il contient des erreurs.</p><br />\n"; }
else {
$news_title = $rss -> get_items_title();
$news_link = $rss -> get_items_link();
$news_author = $rss -> get_items_author();
$news_description = $rss -> get_items_description();
$news_date = $rss -> get_items_date();

Les informations des articles sont récupérées dans des variables :

$item1_title = $news_title[1];
$item1_link = $news_link[1];
$item1_author = $news_author[1];
$item1_desc = $news_description[1];
$item1_date = $news_date[1];

Ce code est appliqué pour les 15 items.

Le formulaire

Le début du formulaire concerne le champ de l’URL du fichier de syndication à lire :

<form method="post" action="<?=$PHP_SELF ?>" enctype="application/x-www-form-urlencoded">
<table align="center" border="1">
 <tr align="left" valign="middle">
   <th colspan="2">RSS URL</th>
 </tr>
 <tr align="left" valign="middle">
   <td align="right"><b>RSS URL (<a target="_blank" href="aide.html#rss_url">?</a>) :</b></td>
   <td align="right"><input type="text" name="rss_url" value="<? if(isset($rss_url)) {echo $fil;}
                                  else {echo 'http://';} ?>" size="50" /></td>
 </tr>
 <tr align="left" valign="middle">
   <td colspan="2" align="center"><input type="submit" name="lire" value="Chercher RSS" /></td>
   </tr>

Si l’URL a été transmise par l’envoi du formulaire (donc "$rss_url" existe), on affiche cette URL dans le champ après vérification ("$fil"), sinon, on indique ’http://’. A côté de chaque élément, on peut faire appel au fichier d’aide pour préciser de quoi il s’agit : <a target="_blank" href="aide.html#rss_url">?</a>

Tous les champs du formulaire sont conçus de la même manière, prenons un exemple :

<tr align="left" valign="middle">
   <td align="right"><b>Title (<a target="_blank" href="aide.html#item_title">?</a>) :</b></td>
   <td align="right"><input type="text" name="newtitle1" value="<?=$newtitle1 ?>" size="50" /></td>
 </tr>

Après envoi du formulaire pour lire un fichier RSS, les données récupérées seront affichées dans les champs correspondants (ici par : value="<?=$newtitle1 ?>" [6]). Après envoi du formulaire pour l’édition du fichier, chaque élément sera identifié par le nom du champ (ici : name="newtitle1").

L’édition du fichier

L’éditeur est lancé si $_POST["ecrire"] existe, ce qui est le cas quand on envoie avec le bouton "Construire RSS". On inclue "easyRSS_maker.inc.php" (ici aussi, n’oubliez pas d’indiquer le chemin si ce fichier n’est pas dans le même dossier que "maker.php") :

if(isset($_POST["ecrire"])) {
// la classe easyRSS
include('easyRSS_maker.inc.php');

// créer l'instance
$myrss = new Make_easyRSS();

On déclare le Channel avec ses éléments obligatoires : Title, Link, Description, Language, et optionnels : Copyright, WebMaster :

$myrss -> channel(stripslashes(trim($_POST["ctitle"])), trim($_POST["clink"]),
                 stripslashes(trim($_POST["cdesc"])), $_POST["clang"],
                 trim($_POST["ccopyright"]), trim($_POST["cwebmaster"]));

La fonction stripslashes() permet de supprimer les backslashes "\" devant les simples et doubles quotes (’ et "), trim() supprime les caractères blancs en début et fin de chaîne.

On récupére les nouveaux articles s’ils existent :

if(($_POST["newtitle1"])!='') {$myrss -> add_item(stripslashes(trim($_POST["newtitle1"])), trim($_POST["newlink1"]), trim($_POST["newauthor1"]), trim($_POST["newdate1"]), stripslashes(trim($_POST["newdesc1"])));}

Le même principe est appliqué aux Items :

if(($_POST["item2_title"])!='') { $myrss -> add_item(stripslashes(trim($_POST["item2_title"])), trim($_POST["item2_link"]), trim($_POST["item2_author"]), trim($_POST["item2_date"]), stripslashes(trim($_POST["item2_desc"])));}

Avec une particularité pour les Items 14 et 15, puisqu’ils seront supprimés si il y a de nouveaux Items 1 :

if((($_POST["newtitle2"])=='') && (($_POST["item14_title"])!='')) { $myrss -> add_item(stripslashes(trim($_POST["item14_title"])), trim($_POST["item14_link"]), trim($_POST["item14_author"]), trim($_POST["item14_date"]), stripslashes(trim($_POST["item14_desc"])));}
if((($_POST["newtitle1"])=='') && (($_POST["item15_title"])!='')) { $myrss -> add_item(stripslashes(trim($_POST["item15_title"])), trim($_POST["item15_link"]), trim($_POST["item15_author"]), trim($_POST["item15_date"]), stripslashes(trim($_POST["item15_desc"])));}

Et enfin on crée le fichier RSS :

$myrss -> save('../backend.rss');
echo '<p class="red">Votre fichier de syndication a été réalisé.<p>';
}

C’est backend.rss qu’il faudrait modifier si on voulait que le fichier ait un autre nom ou une extension différente. On peut aussi modifier le chemin : ici, ’../’ permet que le fichier soit enregistré à l’extérieur du répertoire, donc à la racine du site.

Adaptation de ce script à vos besoins

Au cours de cet article, je n’ai envisagé que des modifications simples de ce script :

- changer l’emplacement du dossier easyRSS,
- changer l’emplacement où est enregistré le fichier backend.rss,
- changer le nom du fichier de syndication réalisé.

On peut envisager d’autres modifications, que je ne vais pas développer car sinon il faudrait un 3e article sur cet Editeur. Mais, avec toutes les informations de la rubrique Syndication de contenu, je crois que quelqu’un qui va chercher un peu dans le code peut les réaliser, et ce sera un bon exercice de PHP. Quelques exemples :

- supprimer le champ RSS URL pour remplacer par l’adresse de votre fichier de syndication dans le code ou par un menu déroulant proposant vos différents fichiers de syndication,
- supprimer les champs des éléments constants (Channel Sommaire, Channel Image, Language...) en les notant directement dans le code,
- supprimer des champs inutilisés Webmaster, Copyright, Author (si l’auteur de tous les articles est la même personne, à quoi bon le mettre à chaque fois),
- ajouter les champs facultatifs que l’on souhaite PICS Rating, Managing Editor, Publish Date, Last Build, Input Title, Input Name, Input Link...,
- prendre en compte d’autres sous éléments : <dc:author>, <category>, <comments>, <guid>, <source>, <dc:date> ou <pubDate> [7],
- modifier le nombre de nouveaux Items (si on veut pouvoir en ajouter 3 à la fois) ou le nombre d’Items (si on veut se limiter à 10), etc.

Conclusion provisoire

Cette première version de l’Editeur RSS est encore imparfaite, elle est limitée au format 0.91, mais elle a le mérite d’exister et de permettre à ceux qui n’ont pas un site sous SPIP de se mettre sans grande difficulté à la syndication de contenu.

 


 

 

[1] Ce script a été mis au point pour le site du CYES.

[2] Après avoir mis au point cet éditeur et l’avoir utilisé sur le site du CYES, j’ai cherché à aller plus loin et à lui faire réaliser en même temps plusieurs fichiers de syndication (RSS 0.91, RSS 2.0, Atom 0.3, HTML et Javascript). Cette nouvelle version est décrite dans Editer plusieurs fichiers de syndication 1/2 et 2/2.

[3] Attention, ce fichier utilise la classe easyRSS version 1.5.1, il ne peut donc pas fonctionner seul. Tous ces fichiers sont contenus dans "easyRSS.zip" qui peut être téléchargé en bas du premier article.

[4] Les articles Utilisation de la classe easyRSS, Un lecteur RSS pour votre site 1/2 et Un lecteur RSS pour votre site 2/2 ont déjà présenté l’utilisation de cette classe pour afficher un fichier de syndication.

[5] Si vous utilisez easyRSS pour afficher d’autres fichiers de syndication, il ne faut pas que vous soyez gêné par un accès réservé par le fichier .htaccess. Il faut donc mieux dans ce cas mettre uniquement les fichiers "maker.php" et "aide.html" dans un dossier sécurisé.

[6] L’écriture de value="<?=$newtitle1 ?>" est une forme simplifiée équivalente à value="<?php echo $newtitle1; ?>"

[7] Voir l’article Fichiers De Syndication.




Cliquez ici pour réagir à cet article

Imprimer Imprimer cet article