Lecteur de fil rss (xml) simple en un seul fichier source.

Soyez le premier à donner votre avis sur cette source.

Snippet vu 26 281 fois - Téléchargée 27 fois

Contenu du snippet

Lecteur de Fil RSS (XML) :

Si vous disposez d'un Blog (par exemple chez ublog.com) vous pouvez récupérer le contenu de votre fil RSS et le publier directement sur votre site en PHP en important les données de votre fichier RSS.
Pour les utilisateurs de UBlog l'adresse de votre fichier RSS ou fil RSS s'obtient en cliquant sur l'icone rouge "XML". Je suppose que c'est pareil pour les autres blogger.

On notera au passage que c'est justement l'objectif de la norme RSS de permettre la syndication simple de données ;-).

De ce fait, vous pouvez aussi bien utiliser le programme pour afficher n'importe quel fil RSS : il suffit d'avoir l'adresse

Voici un exemple d'importation de notre fil RSS sur notre Blog vers notre site Web :

<a href="http://www.itcom3.com/PHPRSSReader.php?rssurl=http://ublog.com/itcom3/rss">http://www.itcom3.com/PHPRSSReader.php?rssurl=http://ublog.com/itcom3/rss</a>



Comment procéder :

Avec votre éditeur préféré, créez un fichier PHP par exemple "PHPRSSReader.php" vide.

Copiez et collez le code source ci-dessous. Modifier juste la variable $rssurl pour pointer sur votre fil RSS au cas ou il n'y aurait pas d'argument "rssurl" de renseigné dans l'adresse.

Sauvegardez votre page et placer la sur votre site avec votre outil FTP préféré.

A+

Pierre

Source / Exemple :


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<?php
/////////////////////////////////////////////////////////////////////////////////
// PHPRSSReader.php - d'après HTML Reader par  Jorge Solis 
// traduit et simplifié par Pierre Rouarch pour tenir en un fichier
////////////////////////////////////////////////////////////////////////////////

class xml {
 var $parser;
 function parse($xmlstring){
  $this->parser = xml_parser_create();
  xml_set_object($this->parser, $this);
  xml_parser_set_option($this->parser, XML_OPTION_CASE_FOLDING, false);
  xml_set_element_handler($this->parser, "tag_open", "tag_close");
  xml_set_character_data_handler($this->parser, "cdata");

  // Initialisation
        $this->node_stack = array();
        $this->tag_open(null, "root", array());

        xml_parse($this->parser, $xmlstring);
        xml_parser_free($this->parser);

        $rnode = array_pop($this->node_stack);
 
        return($rnode);
 }

 function tag_open($parser, $tag, $attributes){
        // creation d'un nouveau node...
        $node = array();
        $node["_NAME"]      = $tag;
        foreach ($attributes as $key => $value) {
            $node[$key] = $value;
        }
        $node["_DATA"]      = "";
        $node["_ELEMENTS"]  = array();

        // ajouter le nouveau node à la fin de la pile de node
        array_push($this->node_stack, $node);  
 }

 function cdata($parser, $cdata){
  // ajouter les données au dernier node de la pile
        $lastnode = count($this->node_stack);
        $this->node_stack[$lastnode-1]["_DATA"] .= $cdata;
 }

 function tag_close($parser, $tag){
  // suppression de la pile 
        $node = array_pop($this->node_stack);
        $node["_DATA"] = trim($node["_DATA"]);

        // and ajout comme élément à la fin de la pile...
        $lastnode = count($this->node_stack);
        array_push($this->node_stack[$lastnode-1]["_ELEMENTS"], $node);
 }
} // end of class xml

 

// recupération de l' adresse du RSS avec le paramètre rssurl
$rssurl = $HTTP_GET_VARS["rssurl"];
//////////////////////////////////////////////////////////////////////////////////////////////////
//Modifiez ici pour mettre l'adresse URL de votre RSS au cas ou aucun argument n'est passé:
// exemple :
// http://www.votresite.com/PHPRSSReader.php?rssurl=http://www.votresite.com/votrefichierrss
/////////////////////////////////////////////////////////////////////////////////////////////
if (!$rssurl ) $rssurl = "http://www.u-blog.net/itcom3/rss";

// récupération du fichier par paquets de 4096
  $fp = fopen($rssurl, "r");
  while (!feof ($fp)) $data .= fgets($fp, 4096);
  fclose ($fp);
  $initPos = strpos($data, "<channel>"); // Saut de l'entête

 //parse les données
 
 $xml_parser = new xml();
 $data = substr($data, $initPos);
 $root_node = $xml_parser->parse($data);
 $channel    = array_shift($root_node["_ELEMENTS"]);

 //Récupération  de certaines données du RSS (Voir les specifications rss 0.91, 0.92 et  2.0)
 ////// Récupération entête de channel  /////////////////////////////////////////////////////////
 foreach ($channel["_ELEMENTS"] as $item){ 
// suppression des antislashs
 if($item[_NAME]=="title") $base_name=stripslashes($item[_DATA]);
 if($item[_NAME]=="link") $base_url=stripslashes($item[_DATA]);
 if($item[_NAME]=="description") $base_desc=stripslashes($item[_DATA]);
}
  $base = "<b>Web: </b><a href=\"$base_url\" target=\"_new\">$base_name</a><br>$base_desc<br>";
 /////////////////////////////////////////////////////////////////////////
 ////////// Récupération de chaque Item  --> titre, adresse url, date de publication, description //////////////////////////////////////////////////////
 foreach ($channel["_ELEMENTS"] as $item){ 
 
 if($item[_NAME]=="item") {
  // suppression des antislashs  
  foreach ($item["_ELEMENTS"] as $tag){
    if($tag["_NAME"]=="title") $news_title=stripslashes($tag[_DATA]);
    if($tag["_NAME"]=="link") $news_url=stripslashes($tag[_DATA]);
    if($tag["_NAME"]=="pubDate") $news_pubDate=stripslashes($tag[_DATA]);
     if($tag["_NAME"]=="description") $news_desc=stripslashes($tag[_DATA]);
  }
  $news .= "<p>$news_pubDate<br><b>$news_title</b><br>$news_desc<br><a href=\"$news_url\" target=\"_new\">$news_url</a><hr></p>";  
 }
 }
 ////////////////////////////////////////////////////////////////////////////////
?>
<html>
<head>
<title>Sample RSS Reader in PHP</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<body>

 

<?php print($news) ?>
<?php print($base) ?>

</body>
</html>

Conclusion :


Voilà c'est pas compliqué !

Remerciements à Free pour l'hébergement PHP et à Ublog pour l'hébergement de mon Blog.

A voir également

Ajouter un commentaire

Commentaires

ennery
Messages postés
39
Date d'inscription
mercredi 15 janvier 2003
Statut
Membre
Dernière intervention
27 octobre 2008

re,

je pense que le probleme est ailleurs parce que cela fonctionne sur php4
if (!$rssurl ) $rssurl = "http://www.lemonde.fr/rss/sequence/0,2-3208,1-0,0.xml";

en php4 : echo $channel["_ELEMENTS"] ; me renvoie bien Array
tandis qu'en php5 rien
GREGGRAPH
Messages postés
63
Date d'inscription
dimanche 14 novembre 2004
Statut
Membre
Dernière intervention
21 avril 2010

Hello,

je suis en sous PHP5
mon erreur provenait de l'adresse du flux RSS que j'avais mal paramétré
vérifie la ligne:
if (!$rssurl ) $rssurl =" "
ennery
Messages postés
39
Date d'inscription
mercredi 15 janvier 2003
Statut
Membre
Dernière intervention
27 octobre 2008

Salut,

Marche parfaitement en php4, mais en php5 j'ai l'erreur comme GREGGRAPH "Invalid argument supplied for foreach()"

comment résoudre svp ?
Shinji49
Messages postés
18
Date d'inscription
mardi 17 août 2004
Statut
Membre
Dernière intervention
25 juin 2009

Salut Greggraph. Vas voir du coté de la fonction utf8_decode() dans la doc php !
GREGGRAPH
Messages postés
63
Date d'inscription
dimanche 14 novembre 2004
Statut
Membre
Dernière intervention
21 avril 2010

Désolé pour le déranement, mon PB est résolu, j'ai juste une petite erreur avec les accents etlas caractères spéciaux. J'ai essayé la méthode décrite plus haut, mais ça ne fonctionne pas!!!

Merci tout de même pour le code, il est nickel !
Afficher les 56 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.