0/5 (3 avis)
Snippet vu 7 969 fois - Téléchargée 21 fois
<?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); } } /* -------------------- */ ?>
7 juin 2007 à 19:19
- 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.
5 juin 2007 à 16:19
5 juin 2007 à 12:29
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
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.