begin process at 2012 05 27 19:38:41
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Application

 > PETIT LECTEUR DE RSS SANS PRÉTENTION ...

PETIT LECTEUR DE RSS SANS PRÉTENTION ...


 Information sur la source

 Description

Salut à tous,
Je poste juste cette petite classe de lecture de flux RSS sans prétention. Elle est sans prétention dans le sens ou elle n'est pas très fiable (si par exemple le flux est mal écrit ou si l'URL du flux est fausse, et bah ... Je ne sais pas ce qui va se passer !). Mais par contre, son point fort est qu'elle est complémètement orientée objet et ainsi très simple à faire évoluer (par exemple, la faire évoluer pour qu'elle puisse aussi écrire et générer les flux ...).

Source

  • <?php
  • /* -------------------- */
  • function utf2iso($string, $quotes = ENT_COMPAT, $slashesstriping = TRUE, $nl2brshape = TRUE)
  • {
  • if ($slashesstriping)
  • $string = stripslashes($string);
  • // Contrôle le charset réel (UTF-8 -> ISO-8859-15)
  • $first = (!preg_match('`é`i', mb_convert_encoding($string.'é', 'UTF-8', 'ISO-8859-15'))) ? 'UTF-8, ISO-8859-15' : 'ISO-8859-15, UTF-8';
  • // Teste s'il y a besoin d'une transformation (Optimisation)
  • if (!mb_check_encoding($string,'ASCII'))
  • $string = htmlentities(strip_tags($string), $quotes, mb_detect_encoding($string,$first) );
  • // Convertit les \r\n
  • return ($nl2brshape) ? nl2br($string) : strtr($string,chr(10).chr(13),'');
  • }
  • /* -------------------- */
  • function getTextFromNode($node)
  • {
  • if($node -> nodeType == 3)
  • {
  • $text = $node -> wholeText;
  • }
  • else
  • {
  • $childs = $node -> childNodes;
  • for($i = 0; $i < $childs -> length; $i++)
  • {
  • $child = $childs -> item($i);
  • $text .= getTextFromNode($child);
  • }
  • }
  • return $text;
  • }
  • /* -------------------- */
  • class RssReader
  • {
  • private $Path = '';
  • private $Content = '';
  • private $Channels = array();
  • public function __construct($path)
  • {
  • $this -> Path = $path;
  • $this -> loadRss();
  • $this -> parse();
  • }
  • private function loadRss()
  • {
  • $path = $this -> Path;
  • if(!@$handle = fopen($path, 'r'))
  • throw new Exception("Le fichier $path n'existe pas ! ");
  • $content = &$this -> Content;
  • while (!feof($handle))
  • {
  • $content .= fgets($handle);
  • }
  • fclose($handle);
  • }
  • private function parse()
  • {
  • $content = $this -> Content;
  • $xml = new DOMDocument();
  • $xml -> loadXml($content);
  • $this -> Content = '';
  • $rss = $xml -> getElementsByTagName('rss') -> item(0);
  • $xml_channels = $xml -> getElementsByTagName('channel');
  • for($i = 0; $i < $xml_channels -> length; $i++)
  • {
  • $xml_channel = $xml_channels -> item($i);
  • $title = utf2iso(getTextFromNode($xml_channel -> getElementsByTagName('title') -> item(0)));
  • $link = utf2iso(getTextFromNode($xml_channel -> getElementsByTagName('link') -> item(0)));
  • $description = utf2iso(getTextFromNode($xml_channel -> getElementsByTagName('description') -> item(0)));
  • $channel = new RssChannel($title, $link, $description);
  • $xml_items = $xml_channel -> getElementsByTagName('item');
  • for($j = 0; $j < $xml_items -> length; $j++)
  • {
  • $xml_item = $xml_items -> item($j);
  • $title = utf2iso(getTextFromNode($xml_item -> getElementsByTagName('title') -> item(0)));
  • $link = utf2iso(getTextFromNode($xml_item -> getElementsByTagName('link') -> item(0)));
  • //echo '<pre>'.$link.'</pre>';
  • $description = utf2iso(getTextFromNode($xml_item -> getElementsByTagName('description') -> item(0)));
  • $item = new RssItem($title, $link, $description);
  • $channel -> addItem($item);
  • }
  • $this -> addChannel($channel);
  • }
  • }
  • public function addChannel($channel)
  • {
  • $channels = &$this -> Channels;
  • array_push($channels, $channel);
  • }
  • public function getChannelByNumber($i)
  • {
  • return $this -> Channels[$i];
  • }
  • public function getNumberOfChannels()
  • {
  • return count($this -> Channels);
  • }
  • }
  • /* -------------------- */
  • class RssChannel
  • {
  • private $Title = '';
  • private $Link = '#';
  • private $Description = '';
  • private $Items = array();
  • public function __construct($title, $link, $description)
  • {
  • $this -> Title = $title;
  • $this -> Link = ((substr($link, 0, 7) == 'http://') ? '' : 'http://').$link;
  • $this -> Description = $description;
  • /*echo '<pre>';
  • echo strip_tags($description);
  • echo '</pre>';*/
  • }
  • public function getTitle()
  • {
  • return $this -> Title;
  • }
  • public function getLink()
  • {
  • return $this -> Link;
  • }
  • public function getDescription()
  • {
  • return $this -> Description;
  • }
  • public function addItem($item)
  • {
  • $items = &$this -> Items;
  • array_push($items, $item);
  • }
  • public function getNumberOfItems()
  • {
  • return count($this -> Items);
  • }
  • public function getItemByNumber($i)
  • {
  • return $this -> Items[$i];
  • }
  • }
  • /* -------------------- */
  • class RssItem
  • {
  • private $Title = '';
  • private $Link = '';
  • private $Description = '';
  • public function __construct($title, $link, $description)
  • {
  • $this -> Title = $title;
  • $this -> Link = ((substr($link, 0, 7) == 'http://') ? '' : 'http://').$link;
  • $this -> Description = $description;
  • }
  • public function getTitle()
  • {
  • return $this -> Title;
  • }
  • public function getLink()
  • {
  • return $this -> Link;
  • }
  • public function getDescription()
  • {
  • return strip_tags($this -> Description);
  • }
  • }
  • /* -------------------- */
  • ?>
<?php
/* -------------------- */
   function utf2iso($string, $quotes = ENT_COMPAT, $slashesstriping = TRUE, $nl2brshape = TRUE)
   {
      if ($slashesstriping)
         $string = stripslashes($string);
      
      // Contrôle le charset réel (UTF-8 -> ISO-8859-15)
      $first = (!preg_match('`é`i', mb_convert_encoding($string.'é', 'UTF-8', 'ISO-8859-15'))) ? 'UTF-8, ISO-8859-15' : 'ISO-8859-15, UTF-8';
      
      // Teste s'il y a besoin d'une transformation (Optimisation)
      if (!mb_check_encoding($string,'ASCII'))
         $string = htmlentities(strip_tags($string), $quotes, mb_detect_encoding($string,$first) );

      // Convertit les \r\n
      return ($nl2brshape) ? nl2br($string) : strtr($string,chr(10).chr(13),'');
}
/* -------------------- */
   function getTextFromNode($node)
   {
      if($node -> nodeType == 3)
      {
         $text = $node -> wholeText;
      }
      else
      {
         $childs = $node -> childNodes;
         for($i = 0; $i < $childs -> length; $i++)
         {
            $child = $childs -> item($i);
            $text .= getTextFromNode($child);
         }
      }
      return $text;
   }
/* -------------------- */
   class RssReader
   {
      private $Path = '';
      private $Content = '';
      
      private $Channels = array();
      
      public function __construct($path)
      {
         
         $this -> Path = $path;
         $this -> loadRss();
         $this -> parse();
      }
      
      private function loadRss()
      {
         $path = $this -> Path;
         if(!@$handle = fopen($path, 'r'))
            throw new Exception("Le fichier $path n'existe pas ! ");
            
         $content = &$this -> Content;
         while (!feof($handle))
         {
            $content .= fgets($handle);
         }
         
         fclose($handle);
      }
      
      private function parse()
      {
         $content = $this -> Content;
         
         $xml = new DOMDocument();
         $xml -> loadXml($content);
         
         $this -> Content = '';
         
         $rss = $xml -> getElementsByTagName('rss') -> item(0);
         
         $xml_channels = $xml -> getElementsByTagName('channel');
         
         for($i = 0; $i < $xml_channels -> length; $i++)
         {
            $xml_channel = $xml_channels -> item($i);
            
            $title = utf2iso(getTextFromNode($xml_channel -> getElementsByTagName('title') -> item(0)));
            $link = utf2iso(getTextFromNode($xml_channel -> getElementsByTagName('link') -> item(0)));
            $description = utf2iso(getTextFromNode($xml_channel -> getElementsByTagName('description') -> item(0)));
            
            $channel = new RssChannel($title, $link, $description);
            
            $xml_items = $xml_channel -> getElementsByTagName('item');
            
            for($j = 0; $j < $xml_items -> length; $j++)
            {
               $xml_item = $xml_items -> item($j);
               
               $title = utf2iso(getTextFromNode($xml_item -> getElementsByTagName('title') -> item(0)));
               $link = utf2iso(getTextFromNode($xml_item -> getElementsByTagName('link') -> item(0)));
               
               //echo '<pre>'.$link.'</pre>';
               
               $description = utf2iso(getTextFromNode($xml_item -> getElementsByTagName('description') -> item(0)));
               
               $item = new RssItem($title, $link, $description);
               
               $channel -> addItem($item);
               
            }
            
            $this -> addChannel($channel);  
         }
      }
      
      public function addChannel($channel)
      {
         $channels = &$this -> Channels;
         array_push($channels, $channel);
      }
      
      public function getChannelByNumber($i)
      {
         return $this -> Channels[$i];
      }
      
      public function getNumberOfChannels()
      {
         return count($this -> Channels);
      }
   }
/* -------------------- */
   class RssChannel
   {
      private $Title = '';
      private $Link = '#';
      private $Description = '';
      
      private $Items = array();  
      
      public function __construct($title, $link, $description)
      {
         $this -> Title = $title;
         $this -> Link = ((substr($link, 0, 7) == 'http://') ? '' : 'http://').$link;
         $this -> Description = $description;
         
         /*echo '<pre>';
         echo strip_tags($description);
         echo '</pre>';*/
      } 
      
      public function getTitle()
      {
         return $this -> Title;
      }
      
      public function getLink()
      {
         return $this -> Link;
      }
      
      public function getDescription()
      {
         return $this -> Description;
      }
      
      public function addItem($item)
      {
         $items = &$this -> Items;
         array_push($items, $item);
      }
      
      public function getNumberOfItems()
      {
         return count($this -> Items);
      }
      
      public function getItemByNumber($i)
      {
         return $this -> Items[$i];
      }
   }

/* -------------------- */
   class RssItem
   {
      private $Title = '';
      private $Link = '';
      private $Description = '';
      
      public function __construct($title, $link, $description)
      {
         $this -> Title = $title;
         $this -> Link = ((substr($link, 0, 7) == 'http://') ? '' : 'http://').$link;
         $this -> Description = $description;
      }
      
      public function getTitle()
      {
         return $this -> Title;
      }
      
      public function getLink()
      {
         return $this -> Link;
      }
      
      public function getDescription()
      {
         return strip_tags($this -> Description);
      }
   }
/* -------------------- */
?>

 Conclusion

Voilà ... Je sais que ce n'est pas très commenté, mais franchement,  ce n'est pas difficile à comprendre. Si vous avez des questions, remarques, etc., n'hésitez pas !
++ !
L.S.


 Sources du même auteur

Source avec Zip Source avec une capture MOTEUR D'ASPECT POUR PHP
Source avec Zip [PHPHOOK] UN PETIT SYSTÈME DE GESTION DES HOOKS DE SUBVERSIO...
Source avec Zip [PHP5] TASKSCHEDULER, UN PETIT PLANIFICATEUR DE TÂCHE EN PHP...
Source avec Zip [PHP5] NAVIGUER DANS UNE COLLECTION À L'AIDE D'UNE PSEUDO SY...
Source avec Zip Source avec une capture CLASSE D'ÉDITION DES FICHIERS DE CONFIGURATION D'APACHE

 Sources de la même categorie

Source avec une capture PHPREPOGENERATOR + REPO (WIN) par alvinp
Source avec Zip IPHONE - ICÔNE D'APPEL TÉLÉPHONIQUE SUR L'ÉCRAN D'ACCUEIL par Rainbow
Source avec Zip Source avec une capture [APP WEB]SERVEUREXPLOREUR par thematrix01
Source avec Zip Source avec une capture MY.BOOKMARKS par inwebo
Source avec Zip M.V.C M.E.D par faceme

 Sources en rapport avec celle ci

Source avec Zip [PHP5][CLASSE] GÉNÉRATION DE FLUX RSS 2.0 par webdeb
Source avec Zip AFFICHAGE DES LIENS RSS par charlyx
Source avec Zip Source avec une capture EDITEUR FLUX RSS 2 VIA UN FORMULAIRE par ben05
Source avec Zip Source avec une capture AGENDA BASÉ SUR FLUX RSS PRÉSENTÉ EN TABLEAU OU EN AGENDA ! par cedriclomb
Source avec Zip [PHP5/DOM] CLASSE DE CREATION DE FLUX RSS VIA UN FICHIER XML par jean84

Commentaires et avis

Commentaire de gwadarepresent le 05/06/2007 12:29:18

Slt, pas mal le générateur de CSS,
Mais il y a un pti beug, en fait, tu propose de renommer le préfixe des tables de ton éditeur RSS, mais ton script PHP ne les renommes pas, et les crè avec le préfixe par défaut "rsseditor_" en revanche, il est renommé dans ton script, donc biensure, le message d'erreur est retourné :
Table 'base.RSS_config' doesn't exist

Commentaire de LocalStone le 05/06/2007 16:19:46

Je pense que tu t'es trompé de source, là ...

Commentaire de opossum_farceur le 07/06/2007 19:19:51

Bravo pour ce code très clean, très clair : un modèle de POO.
- Un petit bémol, cependant, certain fichiers ne sont pas correctement traités, exemple :
http://www.dicodunet.com/definitions.xml
- Un deuxième petit bémol, c'est l'aspect inachevé du script, une petite démo n'aurait pas fait de mal, et tu aurais eu davantage de retours, souvent utiles pour faire évoluer un script.
- Une question : l'emploi de la récursivité est-il vraiment nécessaire, pour parcourir un arbre dont on connait à l'avance la structure?
- A l'intention des novices en matière de DOM, un tuto utile à potasser :
Gestion du XML en PHP 5 : utiliser DOM (http://eusebius.developpez.com/php5dom/)

Amicalement.

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

XML RSS [ par djamine ] Bonjour J'aimerais bien savoir comment utiliser les RSS sur mon site j'ai trouver pas mal des sites qui proposes des version XML surtout celle est new Problème avec une classe [ par massacr ] Cela fait&nbsp;3 heures que j'essaye de comprendre o&#249; est l'erreur.J'ai fait une classe :&nbsp; class creer_RSS {&nbsp;var $fichier_xml;<B Recherche de flux xml ou/et rss de prog tv sportif [ par bobganjx ] Pauvre de moi en stage, exploit&#233; par un employeur sans scrupule qui me paye pas (c'est beaux les &#233;tudes) ;<font color="#800080" Lecture de fichier XML [ par stigmate101 ] Bonjour,J'ai écris un code qui dois chercher un enregistrement dans un fichier XML. Ce code ne me m'affiche rien et ne me retourne pas d'erreur! Cl Besoin d'aide pour generer un Flux RSS [ par RuSSe_91 ] Salut tout le monde :) Je viens demander un coup de main pour g&#233;n&#233;rer un fichier RSS en XML. Mon site tourne sous mambo, e RSS Ajouter dans dase de donnée [ par Nexto ] Bonjour :) Je cr&#233;&#233; une petite page ou je voudrais mettre plein de RSS diff&#233;rent avec diff&#233;rentes categ et je voudrais aussi faire Problème avec générateur de flux rss [ par raks13 ] Bonjour,J'ai téléchargé le fichier php permettant de générer un flux rss à partir de ses news, disponible ici: http://www.phpcs.com/code.aspx?ID=22822 flux rss [ par atchoumen ] Bonjour,je suis en train de mettre un flux rss en place sur mon site et je me retrouve face à un problème bizarre. Lorsque je fais une requete sans co insérer contenu xml dans bdd mysql [ par indutec ] Bonjour à tous, Voilà, j'aimerais encoder le contenu d'un fichier xml, que je ne génère pas, vers une base de données mysql. Pour l'instant, il m'enc Parser du xml pour faire un lecteur RSS [ par shadow1779 ] Bonjour,je suis en train de développer un portail et j'aurai besoin de réaliser ma propre classe pour lire des flux RSS, actuellement j'ai trouvé une


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,406 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales