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.
34 visiteur(s) et 0 membre(s) en ligne.
Activité du Site

Pages vues depuis 25/05/2001 : 108 395 363

  • Nb. de membres 8 693
  • Nb. d'articles 1 695
  • Nb. de forums 26
  • Nb. de sujets 8
  • Nb. de critiques 92

Top 10  Statistiques

Index du forum »»  Le coin des codeurs »» mettre un fil RSS dans un bloc

mettre un fil RSS dans un bloc#25384

3Contributeur(s)
PhilGuenjpbdeveloppeur
3 Modérateur(s)
developpeurjpbJireck
PhilGuen PhilGuenicon_post
Bonjour à tous,

headlines ne fonctionnant pas correctement, je suis en train de tester d'autres moyens d'obtenir un fil RSS.

J'ai adapté le code suivant, issu de la bibliothèque "fil_le".



<?php
// --------------------------------------------------------
// d'après parse_flux-2 pour lire des fichiers RSS/RDF/Atom
// Dominique WOJYLAC < <a href=" <a href="http://wojylac.free.fr>"" target="_blank" class="noir">http://wojylac.free.fr>"</a> target="_blank" class="noir"> <a href="http://wojylac.free.fr></a>" target="_blank" class="noir">http://wojylac.free.fr></a></a>
// 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
function clean_text($text$encodage '') {
    if ($encodage == 'utf-8') {
        $text = utf8_decode($text);
    }
    $avant = array(
        '<',
        '>',
        '"',
        '&',
        '|@|' // pour traitement correct des caractères spéciaux préalablement remplacés (voir plus bas)
        );
    $apres = array(
        '<',
        '>',
        '"',
        '&',
        '&#'
        );
    $text = str_replace($avant, $apres, $text);
    return $text;
}

function lit_RSS($flux,$delai,$nbnews,$affichage) {

!include!_once 'rss_read.inc.php'; 
$rss = new rss_read();

    // il est considéré comme n'étant pas en cache on le génére
    $data = '';
    
    // 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('&#','•');
    $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();
        
        // affichage site, url, description 
        $data =  '<p  class='flux-RSS'><a href="'. $channel['link'].'" target="_blank">'. clean_text($channel['title'], $encode). ' - RSS fead</a></p>';
        
        // nombre d'items 
        //$nbnews = $rss -> get_num_items();
        
        // recup array des données 
        $items = $rss -> get_items();
        
        $data .= '<dl  class='flux-RSS'>';
        for($i = 0; $i < $nbnews; $i++) { 
            if ($affichage == '1') {
                $data .= '<dt>- '.clean_text($items[$i]['link'], $encode).'</dt>'."\n";  
            } else {
                $data .= '<dt>- <a href="'.$items[$i]['link'].'" target="_blank">'.clean_text($items[$i]['title'], $encode).'</a></dt>'."\n"; 
            }
        }
        
        $data .= '</dl>';
    } // fin if $rss
return $data;        
}
$content = "";
$content .= lit_RSS(' <a href=" <a href="http://www.pedigreedatabase.com/german_shepherd_dog/rss.classified_latest','600','5','1');"" target="_blank" class="noir">http://www.pedigreedatabase.com/german_shepherd_dog/rss.classified_latest','600','5','1');"</a> target="_blank" class="noir"> <a href="http://www.pedigreedatabase.com/german_shepherd_dog/rss.classified_latest','600','5','1');</a>" target="_blank" class="noir">http://www.pedigreedatabase.com/german_shepherd_dog/rss.classified_latest','600','5','1');</a></a> 
//echo $content; // débug
?>




et je l'appelle en faisant



!include!#modules/fil_le/lecteurRSS.php 



dans le contenu d'un bloc.

ca c'est OK.

L'idéal serait d'appeler ce code comme une fonction en passant les paramètres adéquat

J'ai donc fait ceci

dans header_before.inc



if (file_exists("./modules/fil_le/lecteurRSS.php")) !include!_once("./modules/fil_le/lecteurRSS.php");



et modifié le code comme suit



<?php
// --------------------------------------------------------
// d'après parse_flux-2 pour lire des fichiers RSS/RDF/Atom
// Dominique WOJYLAC < <a href=" <a href="http://wojylac.free.fr>"" target="_blank" class="noir">http://wojylac.free.fr>"</a> target="_blank" class="noir"> <a href="http://wojylac.free.fr></a>" target="_blank" class="noir">http://wojylac.free.fr></a></a>
// 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
function clean_text($text$encodage '') {
    if ($encodage == 'utf-8') {
        $text = utf8_decode($text);
    }
    $avant = array(
        '<',
        '>',
        '"',
        '&',
        '|@|' // pour traitement correct des caractères spéciaux préalablement remplacés (voir plus bas)
        );
    $apres = array(
        '<',
        '>',
        '"',
        '&',
        '&#'
        );
    $text = str_replace($avant, $apres, $text);
    return $text;
}

function lit_RSS($flux,$delai,$nbnews,$affichage) {

!include!_once 'rss_read.inc.php'; 
$rss = new rss_read();

    // 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('&#','•');
    $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();
        
        // affichage site, url, description 
        $content =  '<p  class='flux-RSS'><a href="'. $channel['link'].'" target="_blank">'. clean_text($channel['title'], $encode). ' - RSS fead</a></p>';
        
        // nombre d'items 
        //$nbnews = $rss -> get_num_items();
        
        // recup array des données 
        $items = $rss -> get_items();
        
        $content .= '<dl  class='flux-RSS'>';
        for($i = 0; $i < $nbnews; $i++) { 
            if ($affichage == '1') {
                $content .= '<dt>- '.clean_text($items[$i]['link'], $encode).'</dt>'."\n";  
            } else {
                $content .= '<dt>- <a href="'.$items[$i]['link'].'" target="_blank">'.clean_text($items[$i]['title'], $encode).'</a></dt>'."\n"; 
            }
        }
        
        $content .= '</dl>';
    } // fin if $rss
return $content;        
}
?>




que j'appelle en mettant dans le bloc



function#lit_RSS
params#' <a href=" <a href="http://www.pedigreedatabase.com/german_shepherd_dog/rss.classified_latest','600','5','1'"" target="_blank" class="noir">http://www.pedigreedatabase.com/german_shepherd_dog/rss.classified_latest','600','5','1'"</a> target="_blank" class="noir"> <a href="http://www.pedigreedatabase.com/german_shepherd_dog/rss.classified_latest','600','5','1'</a>" target="_blank" class="noir">http://www.pedigreedatabase.com/german_shepherd_dog/rss.classified_latest','600','5','1'</a></a>



pour le coup, le bloc ne s'affiche même pas. Pas de message d'erreur

Qu'ai-je commis comme erreur?

Merci de votre aide

Message édité par : PhilGuen / 23-02-2012 14:39

jpb jpbicon_post
yo
comprend pas. dans ta fonction tu as 4 paramètres ... dans le blocs tu en appelles (les paramètres ) une ribambelle ??... ça
risque pas de fonctionner
PhilGuen PhilGuenicon_post
Citation : jpb 

yo
comprend pas. dans ta fonction tu as 4 paramètres ... dans le blocs tu en appelles (les paramètres ) une ribambelle ??... ça
risque pas de fonctionner 


Non ... ca c'est l'éditeur sur NPDS.org qui merde ... il ajoute tout un tas de balise (dont les liens et target) même à l'intérieur des balises de codes.

j'ai bien 4 paramètres de passés dans l'appel de la focntion.

Message édité par : PhilGuen / 23-02-2012 18:56

PhilGuen PhilGuenicon_post
Bon, j'avance ... et ca fonctionne (presque)en me servant des scripts "fil_le"

Inconvénient de ce que j'ai fait: chaque flux RSS doit être appelé dans un bloc spécifique.

Problème : je n'arrive pas à "récupérer" et donc afficher le titre du bloc.

J'ai essayé avec un global block_title sans succès.

voici mon code sans aucun doute bidouillé et donc perfectible mais au moins ca fonctionne :
je peux enfin avoir TOUS les flux que je souhaite (voir http://guenet.net)



<?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) {
// 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 
        //$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
?>


PhilGuen PhilGuenicon_post
Sur http://guenet.net j'ai résolu le problème du titre en la passant en paramètre.

Mais si on pouvait trouver mieux !!!

Bien évidement sur FREE ca ne marche toujours pas ... je vais donc transférer tous mes sites sur c-webhosting
developpeur developpeuricon_post
Fait un topic dans futur version SVP / faut que l'on regarde plus avant cette librairie pour remplacer la gestion actuelle qui n'est plus OK
PhilGuen PhilGuenicon_post
ok - j'y vais
developpeur developpeuricon_post
Merci