PHP – Class – De l’importance du Flux RSS

Le Flux RSS est rentré dans les mœurs des internautes depuis un petit moment déjà, mais aujourd’hui une majeure partie des néophytes savent ce qu’est un Flux RSS et surtout l’utilisent. Sans compter les internautes assidus qui l’utilisent couramment pour se tenir informé.

Il est donc important, voir indispensable d’avoir un flux rss sur son propre site, surtout si ce dernier propose des actualités ou des rentrées de contenus qui peuvent intéresser les lecteurs du site. C’est un atout non négligeable et vraiment utile pour les internautes qui resteront ainsi connecté à votre site via un agrégateur de flux rss. C’est un moyen de plus de fidéliser vos lecteurs.

flux-rss-class-php

Ce n’est pas pour rien que la majorité des cms récents proposent du flux rss d’office. Dans un premier temps parce que ce n’est pas le plus complexe à mettre en place (pour un système basique), et parce que ça a forcément son utilité !

Quelques exemples, sans ordre, ni préférence, de ces cms : wordpress, joomla, drupal, phpbb, spip, bilboplanet (agrégateur de flux rss), dotclear, pluxml etc…

En agrégateur, il existe multitude de moyens de se tenir informé via RSS, mais pour les plus utilisés on retrouve tout simplement les navigateurs (firefox, opéra, safari, chrome, ie etc…), google reader, netvibes etc…

De plus le rss est un bon moyen d’envoyer nos actualités sur les réseaux sociaux (facebook, twitter, friendfeed, viadeo etc…), alors pourquoi l’éviter ?

Pour cela je vous propose une petite classe php toute simple pour gérer vos flux rss :

<?php 
/** 
* @package Ludik_FrameWork 
* @subpackage Ludik_FrameWork_1.0 - Evolucion 
* @author Franck Pertegas 
* @copyright LudiKreation 
* @link http://www.ludikreation.com 
* @license http://www.gnu.org/licenses/lgpl.html GNU General Lesser Public Licence, see LICENCE file 
* @divers Issu du développement pour des sites :: ludikreation de Franck Pertegas 
* @version 1.0.0 
* @Date 22/03/2010 
*/ 

/** 
* ludikrss 
* Classe (plugin) de gestion des fluxrss 
*/ 

class ludikrss{ 
	
	/** 
	* L'encodage du flux 
	* @var string 
	* @access private 
	*/ 
	private $encoding; 
	
	/** 
	* Le titre du flux 
	* @var string 
	* @access private 
	*/ 
	private $title; 
	
	/** 
	* Le lien du site du flux 
	* @var string 
	* @access private 
	*/ 
	private $link; 
	
	/** * Description du flux 
	* @var string 
	* @access private */ 
	private $description; 
	
	/** 
	* La langue utilisée 
	* @var string 
	* @access private 
	*/ 
	private $lang; 
	
	/** 
	* La concaténation des items 
	* @var string 
	* @access private 
	*/ 
	private $items; 
	
	/** 
	* Constructeur 
	* Initialisation des variables 
	* @param string $title :: Le titre du flux 
	* @param string $link :: Le lien du site du flux 
	* @param string $description :: une description du flux (default='Flux RSS') 
	* @param string $lang :: La langue du flux (default='fr') 
	* @param string $encoding :: L'encodage du flux (default='UTF-8') 
	* @return void */ 
	public function __construct($title, $link, $description = 'Flux RSS', $lang = 'fr', $encoding = 'UTF-8'){ 
		
		$this->items = '';
		$this->title = $title;
		$this->link = $link;
		$this->description = $description;
		$this->lang = $lang;
		$this->encoding = $encoding;
	
	}
	
	/**<br ?--> 
	* Méthode static private (escape_cdata([...])) Converts the CDATA end sequence ]]> into ]]>
	* @param string $str :: la chaine à traiter
	* @return $string
	*/
	private static function escape_cdata($str){

		return str_replace(']]>', ']]>', $str);

	}

	/**
	* Méthode public static (pun_htmlspecialchars([...])) Equivalent to htmlspecialchars(), but allows &#[0-9]+ (for unicode)
	* @param string $str :: la chaine à traiter
	* @return $string
	*/
	private static function htmlSpecialChars($str){

		$str = preg_replace('/&(?!#[0-9]+;)/s', '&', $str);
		$str = str_replace(array('<', '>', '"'), array('<', '>', '"'), $str);

		return $str;

	}

	/**
	* Méthode public (addItem([...])) ajoute des items au flux
	* @param string $title :: balise title
	* @param string $link :: balise link
	* @param string $description :: balise description
	* @param string $pubdate :: ajoute pubdate à la balise description (default = '')
	* @param string $auteur :: ajoute auteur à la balise description (default = '')
	* @param string $content :: ajoute du contenu complet (img etc ...) à la balise content:encoded (default = '')
	* @param array $array_categories :: un tableau de catégories liées à l'article (default = NULL)
	* @param string $comment_link :: lien vers les commentaires de l'élément (default = '')
	* @return $string
	*/
	public function addItem($title, $link, $description, $pubdate = '', $auteur = '', $content = '', $array_categories = NULL, $comment_link = ''){

		$this->items .= "\t".''."\r\n";

		$this->items .= "\t\t".''.self::htmlSpecialChars($title).''."\r\n";

		$this->items .= "\t\t".''.$link.''."\r\n";

		if($comment_link != '')
			$this->items .= "\t\t".'Lien vers les commentaires'."\r\n";

		if($pubdate != '')
			$this->items .= "\t\t".''.date('r', $pubdate).''."\r\n";

		if($auteur != '')
			$this->items .= "\t\t".self::escape_cdata(''.$auteur.'')."\r\n";

		if($array_categories != NULL AND is_array($array_categories)){

			foreach($array_categories as $cle=>$valeur){

				$this->items .= "\t\t".'<![CDATA['.self::escape_cdata($valeur).']]>'."\r\n";

			}

		}

		$this->items .= "\t\t".'<![CDATA['; if($auteur != '') $this->items .= self::escape_cdata('Auteur : '.$auteur.'');

		if($pubdate != '')
			$this->items .= self::escape_cdata("\r\n".'Ecrit le : '.date('r', $pubdate).'');

		$this->items .= self::escape_cdata($description);

		$this->items .= ']]>'."\r\n";

		if($content != '')
			$this->items .= "\t\t".'<![CDATA['.self::escape_cdata($content).']]>'."\r\n";

		$this->items .= "\t".''."\r\n";

		return $this->items;

	}

	/**
	* Méthode public (headerFlux()) ajoute le header au flux
	* @return void
	*/
	public function headerFlux(){

		// Send XML/no cache headers
		header('Content-Type: text/xml');
		header('Expires: '.gmdate('D, d M Y H:i:s').' GMT');
		header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
		header('Pragma: public');

	}

	/**
	* Méthode public (sendFlux()) ajoute le flux
	* @return string
	*/
	public function sendFlux(){

		// It's time for some syndication!
		$out = '<!--?xml version="1.0" encoding="'.$this->encoding.'"?-->'."\r\n";
		// $out .= ''."\r\n";
		//$out .= ''."\r\n";

		$out .= '
		';

		$out .= ''."\r\n";
		$out .= "\t".''.self::htmlSpecialChars($this->title).''."\r\n";

		$out .= "\t".''."\r\n";

		$out .= "\t".''.$this->link.'/'."\r\n";
		$out .= "\t".''.$this->description.''."\r\n";
		$out .= "\t".''.date('r', time()).''."\r\n";

		$out .= "\t".'http://www.ludikreation.com'."\r\n";

		$out .= "\t".''.$this->lang.''."\r\n";

		$out .= "\t".'hourly'."\r\n";
		$out .= "\t".'1'."\r\n";

		$out .= $this->items;

		$out .= ''."\r\n";
		$out .= ' ';

		return $out;

	}

	/**
	* Méthode public (writeFlux()) écrit le flux
	* @return string
	*/
	public function writeFlux(){

		$this->headerFlux();

		echo $this->sendFlux();

	}

}

?>

 

Son utilisation reste simple :

<?php
// APPEL DE LA CLASS
include('class/rss.class.php');

// Instanciation pour la future sortie du rss
$rss = new ludikrss('Actualité LudiKreation', 'http://www.ludikreation.com');

$result = mysql_db_query("database", "select * from actu");

while($row = mysql_fetch_array($result)) {

$rss->addItem( $row['title'],
'http://www.ludikreation.com/articles/view.php?id='.$row["id_article"],
substr($row['content'], 200),
$row['pubdate'],
'LudiKreation',
$row['content'],
array('Web', 'Internet', 'Référencement'));

}
$rss->writeFlux();
exit();
?>

Et vous avez une sortie rss propre.

Bien entendu cette classe PHP reste améliorable et modifiable, je reste à votre écoute et accepte avec plaisir les remarques et améliorations 🙂

Bon code à tous !

EDIT DU 26.09.2010
Pour compléter cet article, voilà l’explication sur l’utilisation de cette classe (des notions de php sont nécessaires) :

1/ Incluez le fichier de la classe sur la page ou vous souhaitez l’utiliser.

2/ Créer une instance de ludikrss, comme suis :

$rss = new ludikrss('Titre de mon flux rss', 'http://liendemonsite.fr');

3/ Créez la requête qui ira chercher vos données dans la BDD.

4/ Créez une boucle qui permettra de récupérer les sorties de la bdd, et utiliser addItem de la classe, comme ceci :

<?php
$rss->addItem( 'Titre de mon article',
'http://lienversmonarticle.com?article=id',
'Une courte description de l\'article...',
'Date de publication au format mktime',
'Auteur',
'Contenu de l\'article',
array('un','tableau','des','différentes','catégories','de','l\'article'));
?>

5/ Une fois que vous avez rajouté tous les éléments que vous souhaitiez, vous pouvez afficher la sortie :

<?php
$rss->writeFlux();
exit();
?>

Articles pouvant vous intéresser :

Author: Franck Pertegas

Share This Post On

3 Comments

  1. Merci, pourrions nous avoir un petit process pour compléter ces deux fichiers svp ?

    merci

    Post a Reply
  2. Salut DC,

    J’ai rajouté un edit en fin d’article, en espérant éclaircir l’utilisation de cette petite classe php 😉

    ++

    Post a Reply
  3. Hello LudiKadmin,

    Grand merci 🙂

    Post a Reply

Trackbacks/Pingbacks

  1. PHP – Installer XDebug sous WAMP | LudiBlog - [...] PHP – Class – De l’importance du Flux RSS [...]
  2. PHP – Favilink – Afficher le favicon d’un site avec son lien | LudiBlog - [...] PHP – Class – De l’importance du Flux RSS [...]

Submit a Comment

Votre adresse e-mail ne sera pas publiée.