logo

NPDS : Gestion de contenu et de communauté


Content & Community Management System (CCMS) robuste, sécurisé, complet, performant, parlant vraiment français, libre (Open-Source) et gratuit.
11 visiteur(s) et 0 membre(s) en ligne.
Activité du Site

Pages vues depuis 25/05/2001 : 104 272 239

  • Nb. de membres 8 691
  • Nb. d'articles 1 691
  • Nb. de forums 25
  • Nb. de sujets 8
  • Nb. de critiques 92

Top 10  Statistiques

Index du forum »»  Version future »» Flux RSS

Nouveau sujet
 Flux RSS#25391Répondre

1Contributeur(s)
PhilGuen
3 Modérateur(s)
developpeurjpbJireck
PhilGuen PhilGuenicon_post
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("modules/fil_le/lecteurRSS.php");



code de lecteurRSS.php



<?php    
// --------------------------------------------------------
// d'après parse_flux-2 pour lire des fichiers RSS/RDF/Atom
// Dominique WOJYLAC < http://wojylac.free.fr>
// Distribué sous GNU General Public License.
// 
// Version 2.1c
// ---------------------------------------------------------
// fonction destinée à nettoyer le texte récupéré
// que l'on pourrait séparer de ce code en la mettant dans un fichier à inclure
// fonction destinée à nettoyer le texte récupéré
// que l'on pourrait séparer de ce code en la mettant dans un fichier à inclure
function clean_text($text$encodage '',$long) {
    if ($encodage == 'utf-8') {
        $text = utf8_decode($text);
    }
    $avant = array(
        '&lt;',
        '&gt;',
        '&quot;',
        '&amp;',
        '|@|' // pour traitement correct des caractères spéciaux préalablement remplacés (voir plus bas)
        );
    $apres = array(
        '<',
        '>',
        '"',
        '&',
        '&#'
        );
    $text = substr(str_replace($avant, $apres, $text),0,$long).' ...';
    return $text;
}

function lit_RSS($flux,$delai,$nbnews,$affichage,$long,$block_title) {
// chemin relatif vers le dossier cache
// le répertoire "cache" doit être autorisé 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 retourné une date de dermière modification
    // on remettra à jour immédiatement 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 rafraichissements en secondes à régler suivant le type de fil ici 2 heures
    //$delai = 600; //délai passé par la fonction
}

// le fichier est-il en cache et suffisamment jeune
$file_cache = $dir_cache.$file_cache;
$en_cache = file_exists($file_cache);
if ($en_cache) {
    $en_cache = ($date_modif < filemtime($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 à remplacer par d'autres
    // doit être invoqué avant parsefile
    // cette fonction est optionnelle et ne doit être utilisée que pour certains fils.
    $avant = array('&#','&bull;');
    $apres = array('|@|','-');
    $rss -> to_replace_with($avant, $apres);

    // parser le fichier news
    $res = $rss -> parsefile($flux);
    
    if ($res) {
        $encode = $rss -> get_encoding();
        
        // recupération des données sur le channel
        $channel = $rss -> get_channel();
    
        // nombre d'items 
        if ($nbnews > $rss -> get_num_items()) $nbnews =  $rss -> get_num_items(); // nombre de news à afficher passé par la fonction
        
        // recup array des données 
        $items = $rss -> get_items();
        if ($items) {
            $content .= '<ul>';
            for($i = 0; $i < $nbnews; $i++) { 
                if ($affichage == '1') {
                    $content .= '<li> '.$items[$i]['link'].'</li>'."\n";
                } else {
                    $content .= '<li> <a href="'.$items[$i]['link'].'" target="_blank">'.clean_text($items[$i]['title'], $encode, $long).'</a></li>'."\n";
                }
            }
            $content .= '</ul>';
        }
        // affichage site, url, description 
        $content .=  '<p align = 'right'><a href="'. $channel['link'].'" target="_blank"> Lire la suite ...</a></p>';
    } // fin if $rss
    
    $fd = fopen($file_cache, "w");
    fputs($fd, $content);
    fclose($fd);
} else {
        //Ouverture du fichier en lecture seule
        $handle = fopen($file_cache, 'r');
        //Si on a réussi à ouvrir le fichier
        if ($handle)
        {
            $content = '';
            //Tant que l'on est pas à la fin du fichier
            while (!feof($handle))
            {
                //On lit la ligne courante    
                $content .= fgets($handle);
            }
            //On ferme le fichier
            fclose($handle);
        } else {
            $content = '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