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

Soyez le premier à donner votre avis sur cette source.

Snippet vu 26 730 fois - Téléchargée 29 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
20 janv. 2008 à 03:54
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 62 Date d'inscription dimanche 14 novembre 2004 Statut Membre Dernière intervention 21 avril 2010
20 janv. 2008 à 01:32
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
20 janv. 2008 à 01:10
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
27 déc. 2007 à 15:02
Salut Greggraph. Vas voir du coté de la fonction utf8_decode() dans la doc php !
GREGGRAPH Messages postés 62 Date d'inscription dimanche 14 novembre 2004 Statut Membre Dernière intervention 21 avril 2010
27 déc. 2007 à 06:04
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.