PhilGuen 995
| Posté : 29-02-2012 08:24
Pour afficher les flux RSS, j'ai utilisé la librairie fil_le.
Comme je ne suis qu'un "bidouilleur" et non un vrai programmeur, mon code est sans doute assez folklo, mais il fonctionne. Il est sans doute possible de l'améliorer pour l'intégrer à NPDS.
Voici ce que j'ai fait
dans header_before.inc
if (file_exists("modules/fil_le/lecteurRSS.php")) !include!_once("m odules/fil_le/lecteurRSS.php");
code de lecteurRSS.php
<?php
// --------------------------------------------------------
// d'après parse_flux-2 pour lire des fichiers& nbsp;RSS/RDF/Atom
// Dominique WOJYLAC < http://wojylac.free.fr>
// Distribué sous GNU General Public License.
< br />//
// Version 2.1c
// ---------------------------------------------------------
// fonction destinée à nettoyer le texte r écupéré
// que l'on pourrait séparer de ce code&nb sp;en la mettant dans un fichier à inclure
< br />// fonction destinée à nettoyer le texte r écupéré
// que l'on pourrait séparer de ce code&nb sp;en la mettant dans un fichier à inclure
< br />function clean_text($text, $encodage = '',$long) {
if ($encodage == 'utf-8') {
$text = utf8_decode ($text);
}
$avant = array(
'<',
'>',
'"',
'&',
'|@|' // pour traitement correct des caractères spéciaux préalableme nt remplacés (voir plus bas)
);
$apres = array(
'<',
'>',
'"',
'&',
'&#'
);
$text = substr(str_replace($avant, $ap res, $text),0,$long).' ...';
return $text;
}
function lit_RSS($flux,$delai,$nbnews,$affichage,$long,$block_title)&nbs p;{
// chemin relatif vers le dossier cache
// le répertoire "cache" doit être autorisé&nbs p;en écriture
// ne pas oublier / à la fin
$dir_cache = './cache/';
// nom du fichier mis en cache
//$file_cache = 'flux.html';
$url_explode = explode('/',$flux);
$file_cache = ($url_explode[2]).'.html';
if (!is_dir($dir_cache)) {
exit ('Répertoire cache "'.$dir_cache. '" inexistant !');
}
!include!_once('rss_read.inc.php');
$rss = new rss_read();
//$flux = ' http://npds.org/backend.php'; //adresse du flux passée par la fonction.
// voir la doc pour cette fonction
$date_modif = $rss -> get_last_modified($flux);
if ($date_modif > 0) {
// le serveur distant a reto urné une date de dermière modification
// on remettra à jour immédi atement en cas de modification postérieure
// à la date du fichier  ;en cache
$delai = 0;
}
else {
// on impose la mise à jour avec une certaine periodicité
$date_modif = time();
// le delai entre deux rafra ichissements en secondes à régler suivant le  ;type de fil ici 2 heures
//$delai = 600; //délai passé&nbs p;par la fonction
}
// le fichier est-il en cache et suffisamm ent jeune
$file_cache = $dir_cache.$file_cache;
$en_cache = file_exists($file_cache);
if ($en_cache) {
$en_cache = ($date_modif < fil emtime($file_cache) + $delai);
}
if (!$en_cache) {
// il est considéré comme n' étant pas en cache on le génére
$content = '';
// caractères parasites pouvant ê tre contenus dans le fils rss et à remp lacer par d'autres
// doit être invoqué avant p arsefile
// cette fonction est optionnelle et ne doit être utilisée que pour cert ains fils.
$avant = array('&#','•');
$apres = array('|@|','-');
$rss -> to_replace_with($avant, $ap res);
// parser le fichier news
$res = $rss -> parsefile($flux );
if ($res) {
$encode = $rss  ;-> get_encoding();
// recupération des données sur le channel
$channel = $rss&nbs p;-> get_channel();
// nombre d'items&n bsp;
if ($nbnews >&nb sp;$rss -> get_num_items()) $nbnews = $rss&nb sp;-> get_num_items(); // nombre de news à&nbs p;afficher passé par la fonction
// recup array  ;des données
$items = $rss -> get_items();
if ($items) {
$cont ent .= '<ul>';
for($ i = 0; $i < $nbnews; $i++) {
  ; if ($affichage == '1') {
  ; $content .= '<li>&nb sp;'.$items[$i]['link'].'</li>'."\n";
  ; } else {
  ; $content .= '<li>&nb sp;<a href="'.$items[$i]['link'].'" target="_blank" class="noir">'.clean_text($items[$i]['title'], $encode, $long).'&l t;/a></li>'."\n";
  ; }
}
$cont ent .= '</ul>';
}
// affichage site,& nbsp;url, description
$content .= ' <p align = \'right\'><a href="'. $channel['li nk'].'" target="_blank" class="noir"> Lire la suite ...</a></p>';
} // fin if $rss
$fd = fopen($file_cache, "w");
fputs($fd, $content);
fclose($fd);
} else {
//Ouverture du fich ier en lecture seule
$handle = fopen($fi le_cache, 'r');
//Si on a réus si à ouvrir le fichier
if ($handle)
{
$cont ent = '';
//Tan t que l'on est pas à la fin du fic hier
while (!feof($handle))
{
  ; //On lit la ligne courante &n bsp;
  ; $content .= fgets($handle);
}
//On& nbsp;ferme le fichier
fclos e($handle);
} else {
$cont ent = 'Erreur de lecture du fichier en cache';
}
} // fin if !$en_cache
themesidebox($block_title,$content);
} // fin de fonction
?>
et enfin, dans chaque block devant afficher un fil
function#lit_RSS
params# http://gghsm.forumpro.fr/rss,600,5,0,15,GGHSM
A améliorer
- le passage du titre du block autrement que par l'appel de la fonction et sans doute plein d'autres choses.
- la lecture du flux un peu spécial de PedifreeDataBase dont le "link" contient déjà les balises http://la news> ma news alors que pour les flux "normaux" on reconstitue l'adresse.
- la gestion du nom des fichiers cache
Amusez-vous bien |