begin process at 2012 02 15 04:13:56
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Divers

 > RSSREADER 2.0

RSSREADER 2.0


 Information sur la source

Note :
Aucune note
Catégorie :Divers Classé sous :flux rss, rss reader, lecteur rss, partage news Niveau :Initié Date de création :01/12/2008 Date de mise à jour :01/12/2008 13:47:49 Vu / téléchargé :2 427 / 178

Auteur : tex73

Ecrire un message privé
Site perso
Ce membre participe au partage de revenus publicitaires
Commentaire sur cette source (8)
Ajouter un commentaire et/ou une note


 Description

RssReader 2.0 est un module permettant d'afficher en temps reel des fils d'actualité ou tout autre contenu d'un site tiers sur le votre. pour de plus amples explications, lire la doc.

Source

  • <?php
  • // ------------------------------------------------------
  • // RssReader - classe pour lire des fichiers RSS/RDF/Atom
  • // Alfred Timagni <http://www.j2hm.fr>
  • // Distribué sous GNU General Public License.
  • //
  • // Version 2.0
  • // -------------------------------------------------------
  • class RssReader
  • {
  • var $class_version;
  • var $rss_channel;
  • var $rss_image;
  • var $rss_items;
  • var $rss_textinput;
  • var $rss_encoding;
  • var $to_replace;
  • var $replace_with;
  • var $mode_agrege;
  • /*
  • ** initialisation de la classe
  • */
  • function RssReader()
  • {
  • $this -> class_version = '2.0';
  • $this -> rss_channel = array();
  • $this -> rss_image = array();
  • $this -> rss_items = array();
  • $this -> rss_textinput = array();
  • $this -> rss_encoding = '';
  • $this -> to_replace = array();
  • $this -> replace_with = array();
  • $this -> mode_agrege = true;
  • }
  • /*
  • ** initialise le mode
  • */
  • function mode_brut()
  • {
  • $this -> mode_agrege = false;
  • }
  • /*
  • ** initialise les tableau pour remplacement de caractères avant traitement du flux
  • */
  • function to_replace_with($avant, $apres)
  • {
  • if (!empty($avant)) {
  • $this -> to_replace = $avant;
  • }
  • if (!empty($apres)) {
  • $this -> replace_with = $apres;
  • }
  • }
  • /*
  • ** analyse les entêtes pour trouver Last-Modified
  • ** retourne la donnée sous forme timestamp ou telle quelle
  • */
  • function header_last_modified($headers, $format = true) {
  • if (preg_match('/HTTP\/1.1 404/', $headers)) {
  • return false;
  • }
  • else if (preg_match("/Last-Modified: ([^\r]*)\r/i", $headers ,$temp)) {
  • $date_modif = $temp[1];
  • }
  • else {
  • $date_modif = '';
  • }
  • if ($format == true) {
  • if (empty($date_modif)) {
  • return 0;
  • }
  • else {
  • return strtotime($date_modif);
  • }
  • }
  • else {
  • return $date_modif;
  • }
  • }
  • /*
  • ** date de modification avec fsockopen
  • */
  • function get_last_modified($url = '', $format = true) {
  • $url_array = parse_url($url);
  • $host = $url_array['host'];
  • $path = $url_array['path'];
  • if (empty($url) or empty($host) or empty($path)) {
  • return false;
  • }
  • $fp = @fsockopen($host, 80);
  • if (!$fp) {
  • return false;
  • }
  • $out = 'HEAD '.$path.' HTTP/1.1'."\r\n".
  • 'Host: '.$host."\r\n".
  • 'Connection: Close'."\r\n\r\n";
  • $lines = '';
  • fwrite($fp, $out);
  • while (!feof($fp)) {
  • $lines .= fgets($fp, 1024);
  • }
  • fclose($fp);
  • if (empty($lines)) {
  • return false;
  • }
  • else {
  • return $this -> header_last_modified($lines, $format);
  • }
  • }// fin gest_last_modified
  • /*
  • ** date de modification avec bibliotheque curl
  • */
  • function curl_get_last_modified($url = '', $format = true) {
  • if (empty ($url)) {
  • return false;
  • }
  • $ch = curl_init($url);
  • // curl_setopt($ch, CURLOPT_URL, $url);
  • curl_setopt($ch, CURLOPT_HEADER, true);
  • curl_setopt($ch, CURLOPT_NOBODY, true);
  • curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  • $lines = curl_exec ($ch);
  • curl_close ($ch);
  • if (empty($lines)) {
  • return false;
  • }
  • else {
  • return $this -> header_last_modified($lines, $format);
  • }
  • }
  • /*
  • ** analyse le flux
  • */
  • function parse_data($data, $max_item = 0)
  • {
  • if (preg_match('/encoding="([^"]*)"/i', $data ,$temp)) {
  • $this -> rss_encoding = strtolower($temp[1]);
  • }
  • // remplacement eventuel
  • if (!empty($this -> to_replace) and !empty($this -> replace_with)) {
  • $data = str_replace($this -> to_replace, $this -> replace_with, $data);
  • }
  • $xml_parser = xml_parser_create();
  • xml_parse_into_struct($xml_parser, $data, $vals);
  • $parent = array();
  • $n_item = 0;
  • // RSS ou FEED
  • $fil_type = $vals[0]['tag'];
  • // $vals = tableau associatif déterminé par la structure du fil
  • //print_r($vals);
  • foreach ($vals as $row) {
  • // $row = tableau associatif correspondant à une ligne de $vals
  • // 4 indices : tag, type, level, value
  • foreach ($row as $key => $val) {
  • ${$key} = $val;
  • }
  • $tag = strtolower($tag);
  • switch ($type) {
  • case 'open' :
  • $parent[$level] = $tag ;
  • if (($tag == 'item') or ($tag == 'entry')) {
  • $n_item++;
  • }
  • break;
  • case 'close' :
  • if ($parent[$level] == $tag) {
  • $parent[$level] = '';
  • }
  • break;
  • case 'complete' :
  • // cas specifiques à atom
  • if (($fil_type == 'FEED') and ($tag == 'link')) {
  • $value = $attributes['HREF'];
  • }
  • if (($fil_type == 'FEED') and ($tag == 'category')) {
  • $value = $attributes['label'];
  • }
  • // cas non spécifiques
  • if ($this -> mode_agrege) {
  • switch ($tag) {
  • case 'dc:subject' :
  • $tag = 'category';
  • break;
  • case 'date':
  • case 'dc:date':
  • case 'published':
  • case 'issued':
  • $tag = 'pubdate';
  • break;
  • case 'updated':
  • $tag = 'modified';
  • break;
  • case 'dc:description':
  • case 'summary':
  • case 'content:encoded':
  • $tag = 'description';
  • break;
  • case 'dc:rights':
  • case 'rights':
  • $tag = 'copyright';
  • break;
  • case 'dc:creator':
  • $tag = 'author';
  • break;
  • } // fin switch
  • } // fin if mode agrege
  • switch ($parent[$level - 1]) {
  • case 'feed':
  • case 'channel':
  • $this -> rss_channel[$tag] = $value;
  • break;
  • case 'entry':
  • case 'item':
  • if(($n_item <= $max_item) or ($max_item == 0)) {
  • $this -> rss_items[$n_item - 1][$tag] = $value;
  • }
  • break;
  • case 'image':
  • $this -> rss_image[$tag] = $value;
  • break;
  • case 'textinput':
  • $this -> rss_textinput[$tag] = $value;
  • break;
  • } // fin switch $parent
  • break;
  • } // fin switch $type
  • } // fin foreach
  • xml_parser_free($xml_parser);
  • } // fin parse_data
  • /*
  • ** ouvrir et lire le flux avec fopen
  • */
  • function parsefile($filename, $max_item = 0) {
  • if(!$fp = @fopen($filename, 'r')) {
  • return false;
  • }
  • $lines = '';
  • while (!feof($fp)) {
  • $lines .= fread($fp, 4096);
  • }
  • @fclose($fp);
  • // ou php >= 4.3
  • // $lines = file_get_contents($filename);
  • if (empty($lines)) {
  • return false;
  • }
  • else {
  • $this -> parse_data($lines, $max_item, $mode);
  • return true;
  • }
  • } // fin parsefile
  • /*
  • ** ouvrir et lire le flux avec bibliotheque curl
  • */
  • function curl_parsefile($filename ='', $max_item = 0) {
  • if (empty($filename)) {
  • return false;
  • }
  • $lines = '';
  • $ch = curl_init($filename);
  • // curl_setopt($ch, CURLOPT_URL, $filename);
  • curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  • $lines = curl_exec ($ch);
  • curl_close ($ch);
  • if (empty($lines)) {
  • return false;
  • }
  • else {
  • $this -> parse_data($lines, $max_item, $mode);
  • return true;
  • }
  • } // fin curl_parsefile
  • // encoding
  • function get_encoding() {
  • return $this -> rss_encoding;
  • }
  • // channel
  • function exist_channel() {
  • return (!empty($this -> rss_channel) and
  • !empty($this -> rss_channel['title']) and
  • !empty($this -> rss_channel['link']));
  • }
  • function get_channel() {
  • return $this -> rss_channel;
  • }
  • // image
  • function exist_image() {
  • return (!empty($this -> rss_image['url']));
  • }
  • function get_image() {
  • return $this -> rss_image;
  • }
  • // items
  • function exist_items() {
  • return (count($this -> rss_items) > 0);
  • }
  • function get_items() {
  • return $this -> rss_items;
  • }
  • function get_num_items() {
  • return count($this -> rss_items);
  • }
  • // input
  • function exist_textinput() {
  • return (!empty($this -> rss_textinput) and
  • !empty($this -> rss_textinput['title']) and
  • !empty($this -> rss_textinput['link']) and
  • !empty($this -> rss_textinput['description']) and
  • !empty($this -> rss_textinput['name']));
  • }
  • function get_textinput() {
  • return $this -> rss_textinput;
  • }
  • }
  • ?>
<?php
// ------------------------------------------------------
// RssReader - classe pour lire des fichiers RSS/RDF/Atom
// Alfred Timagni <http://www.j2hm.fr>
// Distribué sous GNU General Public License.
// 
// Version 2.0
// -------------------------------------------------------

class RssReader
{
	var $class_version;
	var $rss_channel;
	var $rss_image;
	var $rss_items;
	var $rss_textinput;
	var $rss_encoding;
	var $to_replace;
	var $replace_with;
	var $mode_agrege;
	
	/*
	** initialisation de la classe
	*/
	function RssReader()
	{
		$this -> class_version = '2.0';
		$this -> rss_channel = array();
		$this -> rss_image = array();
		$this -> rss_items = array();
		$this -> rss_textinput = array();
		$this -> rss_encoding = '';
		$this -> to_replace = array();
		$this -> replace_with = array();
		$this -> mode_agrege = true;
	}
	
	/*
	** initialise le mode
	*/	
	function mode_brut()
	{
		$this -> mode_agrege = false;
	}

	/*
	** initialise les tableau pour remplacement de caractères avant traitement du flux
	*/	
	function to_replace_with($avant, $apres)
	{
		if (!empty($avant)) {
			$this -> to_replace = $avant;
		}

		if (!empty($apres)) {
			$this -> replace_with = $apres;
		}
	}
	
	/*
	** analyse les entêtes pour trouver Last-Modified
	** retourne la donnée sous forme timestamp ou telle quelle
	*/
	function header_last_modified($headers, $format = true) {
		if (preg_match('/HTTP\/1.1 404/', $headers)) {
			return false;
		}
		else if (preg_match("/Last-Modified: ([^\r]*)\r/i", $headers ,$temp)) {
			$date_modif = $temp[1];
		}
		else {
			$date_modif = '';
		}
		
		if ($format == true) {
			if (empty($date_modif)) {
				return 0;
			}
			else {
				return strtotime($date_modif);
			}
		}
		else {
			return $date_modif;
		}
	}
	
	/*
	** date de modification avec fsockopen 
	*/
	function get_last_modified($url = '', $format = true) {
		
		$url_array = parse_url($url);
		$host = $url_array['host'];
		$path = $url_array['path'];
		
		if (empty($url) or empty($host) or empty($path)) {
			return false;
		}
		$fp = @fsockopen($host, 80);
		if (!$fp) {
		   return false;
		}
		
		$out = 'HEAD '.$path.' HTTP/1.1'."\r\n".
			'Host: '.$host."\r\n".
			'Connection: Close'."\r\n\r\n";
		
		$lines = '';
		fwrite($fp, $out);
		while (!feof($fp)) {
			$lines .= fgets($fp, 1024);
		}
		fclose($fp);
		
		if (empty($lines)) {
			return false;
		}
		else {
			return $this -> header_last_modified($lines, $format);
		}
	}// fin gest_last_modified
	
	/*
	** date de modification avec bibliotheque curl 
	*/
	function curl_get_last_modified($url = '', $format = true) {
		if (empty ($url)) {
			return false;
		}
		$ch = curl_init($url);
		// curl_setopt($ch, CURLOPT_URL, $url);
		curl_setopt($ch, CURLOPT_HEADER, true);
		curl_setopt($ch, CURLOPT_NOBODY, true);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
		
		$lines = curl_exec ($ch);
		curl_close ($ch);
		
		if (empty($lines)) {
			return false;
		}
		else {
			return $this -> header_last_modified($lines, $format);
		}
	}
	
	/*
	** analyse le flux
	*/
	function parse_data($data, $max_item = 0)
	{		
		if (preg_match('/encoding="([^"]*)"/i', $data ,$temp)) {
			$this -> rss_encoding = strtolower($temp[1]);
		}
		
		// remplacement eventuel
		if (!empty($this -> to_replace) and !empty($this -> replace_with)) {
			$data = str_replace($this -> to_replace, $this -> replace_with, $data);
		}

		$xml_parser = xml_parser_create();
		xml_parse_into_struct($xml_parser, $data, $vals);
		
		$parent = array();
		$n_item = 0;
		// RSS ou FEED
		$fil_type = $vals[0]['tag'];
		// $vals = tableau associatif déterminé par la structure du fil
		//print_r($vals);
		foreach ($vals as $row) {
			// $row = tableau associatif correspondant à une ligne de $vals
			// 4 indices : tag, type, level, value
			foreach ($row as $key => $val) {
				${$key} = $val;
			}
			
			$tag = strtolower($tag);
			
			switch ($type) {	
			case 'open' :
				$parent[$level] = $tag ;
				if (($tag == 'item') or ($tag == 'entry')) {
					$n_item++;
				}
			break;
			
			case 'close' :
				if ($parent[$level] == $tag) {
					$parent[$level] = '';
				}
			break;
			
			case 'complete' :
				// cas specifiques à atom
				if (($fil_type == 'FEED') and ($tag == 'link')) {
					$value = $attributes['HREF'];
				}
				
				if (($fil_type == 'FEED') and ($tag == 'category')) {
					$value = $attributes['label'];
				}
				// cas non spécifiques
				if ($this -> mode_agrege) {
				switch ($tag) {
					case 'dc:subject' :
						$tag = 'category';
					break;
					
					case 'date':
					case 'dc:date':
					case 'published':
					case 'issued':
						$tag = 'pubdate';
					break;
					
					case 'updated':
						$tag = 'modified';
					break;
					
					case 'dc:description':
					case 'summary':
					case 'content:encoded':
						$tag = 'description';
					break;
					
					case 'dc:rights':
					case 'rights':
						$tag = 'copyright';
					break;
					
					case 'dc:creator':
						$tag = 'author';
					break;
				} // fin switch
				} // fin if mode agrege
				
				switch ($parent[$level - 1]) {
					case 'feed':
					case 'channel':
						$this -> rss_channel[$tag] = $value;
					break;
					
					case 'entry':
					case 'item':
						if(($n_item <= $max_item) or ($max_item == 0)) {
							$this -> rss_items[$n_item - 1][$tag] = $value;
						}
					break;
					
					case 'image':
						$this -> rss_image[$tag] = $value;
					break;
					
					case 'textinput':
						$this -> rss_textinput[$tag] = $value;
					break;
				} // fin switch $parent
			break;
			} // fin switch $type
		} // fin foreach
		
		xml_parser_free($xml_parser);
	} // fin parse_data
	
	/*
	** ouvrir et lire le flux avec fopen
	*/
	function parsefile($filename, $max_item = 0) {
		if(!$fp = @fopen($filename, 'r')) {
			return false;
		}
		
		$lines = '';
		
		while (!feof($fp)) {
			$lines .= fread($fp, 4096);
		}
		@fclose($fp);
		// ou php >= 4.3
		// $lines = file_get_contents($filename);
		
		if (empty($lines)) {
			return false;
		}
		else {
			$this -> parse_data($lines, $max_item, $mode);
			return true;
		}
	} // fin parsefile
	
	/*
	** ouvrir et lire le flux avec bibliotheque curl
	*/
	function curl_parsefile($filename ='', $max_item = 0) {
		if (empty($filename)) {
			return false;
		}
		
		$lines = '';
		$ch = curl_init($filename);
		// curl_setopt($ch, CURLOPT_URL, $filename);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
		
		$lines = curl_exec ($ch);
		curl_close ($ch);

		if (empty($lines)) {
			return false;
		}
		else {
			$this -> parse_data($lines, $max_item, $mode);
			return true;
		}
	} // fin curl_parsefile

	
	// encoding
	function get_encoding() {
		return $this -> rss_encoding;
	}
	
	// channel
	function exist_channel() {
		return (!empty($this -> rss_channel) and 
			!empty($this -> rss_channel['title']) and 
			!empty($this -> rss_channel['link']));
	}
	
	function get_channel() {
		return $this -> rss_channel;
	}
	
	// image
	function exist_image() {
		return (!empty($this -> rss_image['url']));
	}
	
	function get_image() {
		return $this -> rss_image;
	}
		
	// items
	function exist_items() {
		return (count($this -> rss_items) > 0);
	}
	
	function get_items() {
		return $this -> rss_items;
	}
	
	function get_num_items() {
		return count($this -> rss_items);
	}
	
	// input
	function exist_textinput() {
		return (!empty($this -> rss_textinput) and 
			!empty($this -> rss_textinput['title']) and 
			!empty($this -> rss_textinput['link']) and
			!empty($this -> rss_textinput['description']) and
			!empty($this -> rss_textinput['name']));
	}
	
	function get_textinput() {
		return $this -> rss_textinput;
	}
}

?>


 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Historique

01 décembre 2008 13:47:50 :
correction des erreurs de frappe dans la description. vos commentaires sont les bienvenues

 Sources du même auteur

OPERATING SYSTEM DETECTION
VÉRIFIER SI VOS PARTENAIRES ONT GARDÉ VOS LIENS SUR LEUR SIT...
CLASSE CHMOD
UPLOAD MULTIPLE OU SIMPLE DES FICHIERS
Source avec Zip DATE COMPLETE EN FRANÇAIS

 Sources de la même categorie

Source avec Zip COMPTEUR DE CLIQUE PHP AVEC JQUERY par devgoneti
Source avec Zip LIVRE D'OR SIMPLE (POUR DÉBUTANT) par devgoneti
Source avec Zip SCRIPT TRAVAUX POUR VOTRE SITE par FleuryK
Source avec Zip Source avec une capture EL COYOTOS LIVRE D'OR PHP 5 par elcoyotos
COMPTEUR DE VISITE - FICHIER TXT - CODE MINIMAL par SuperChouquette

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture GENERE XML DE BASE, RSS, RSS READER, WEB SERVICE par sadoknet

Commentaires et avis

Commentaire de webdeb le 01/12/2008 13:39:32

Quel intérêt de faire du PHP 4 ? Pourquoi ta classe n'est-elle pas codée en PHP 5 ?

Commentaire de tex73 le 01/12/2008 13:57:33

ceci est une source que j'utilise sur le site de l'ambassade de mon pays depuis plus d'1 an . j'ai voulu en faire profiter au autres. une nouvelle version en php5 (reader & writer) est en cours de realisation et je diffuserai le moment venu. Mais l'important n'est-il pas qu'il soit fonctionnel.

Commentaire de tex73 le 02/12/2008 05:16:53

Webdev j'ai comme l'impression que vous avez deja signé l'arret de mort du php4. à ce que je sache tous les serveurs php5 supportent du php4; c'est l'inverse qui n'est pas vrai! ce n'est pas parce qu'on c'est offert une ferrari qu'on va desavoué la 4x4 qui nous a toujours promenner partout!

Commentaire de Teclis01 le 02/12/2008 12:08:17

PHP4 est mort... Ma voiture est vieille et dépassée, je la change.
http://www.nexen.net/actualites/php/17327-php_4_:_chronique_dune_mort_annoncee.php
On vit avec son temps ou on devient Denver ;)
Plus sérieusement, même les distrib "lente" propose du 5 alors a quoi bon? Quand la config du serveur est en 4 et qu'on a pas le droit de changer je dis pas mais là... c'est de la mauvaise foi si tu réfutes :p

Commentaire de OlivierH le 02/12/2008 20:28:21

Je trouve ce source génial, merci beaucoup.
Oui mon serveur est aussi en php4. Et oui ça existe encore. J'avais décidé de le migrer en php5 mais finalement j'ai décidé de le laisser comme cela, parce que je n'ai pas les moyens temps-argent pour le faire pour le moment.
Bref, merci encore.

Commentaire de tex73 le 02/12/2008 21:52:54

Merci OlivierH pour ton post; au moins une personne qui trouve de l'interet pour cette source. dommage que certains ne jurent que par la version du langahe plutot que par la qualite du script.

Commentaire de Teclis01 le 03/12/2008 11:25:10

Alors soyons clair...
Je ne critique en rien la qualité du script (même si je me suis arrêté a var ...), je critique la pérénité de ce script pour 3 raisons
1/PHP 4 est (je vous le rapelle) mort.
2/Des reader de flux RSS ça date... pour preuve ... http://magpierss.sourceforge.net/ qui a bien plus de fonctionnalité et dont la dernière release est du ... 05/11/2005 donc il y a 3 ans...
3/Après lecture ... la qualité du script est assez mauvaise ...

empty pour tester un String avec '' par défaut je te conseille la doc =>http://www.php.net/manual/fr/function.empty.php

switch sans default... aucun logs

PHP4 et son unique portée public très utile ... je peux faire n'importe quoi de toute façon il n'y a pas de doc juste des exemples (génial pour suivre les sources) :) (raté pour le côté pédagogue quoique ... au moins on sait certaines choses qu'il faut pas faire!)

Côté positif... la source fonctionne quand on l'a lit et qu'on la met en œuvre (outil inutile pour un débutant).
Je ne suis pas médisant juste réaliste.

Commentaire de simoshows le 24/04/2009 11:23:52

Merçi pour ton code

 Ajouter un commentaire




Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
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 : 2,184 sec (3)

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