JeuxWeb

Menu
Accueil
News
Qui Sommes Nous ?
Créateur de Jeu ?
Jeux de Plateau
Aider JeuxWeb
Forums
Nous contacter
Liens
Les Guides
Codes et Scripts
Articles
Nos Jeux
MountyHall
Monde de Thäanis
Braldahim
Divers
Photos
Actu MountyHall
Actu Thäanis
Actu Braldahim
Login





Mot de passe oublié ?
Pas encore de compte ? Enregistrez-vous

 Accueil arrow Codes et Scripts arrow Scripts php/mysql arrow Générer un flux rss (2e partie)

Générer un flux rss (2e partie)
Écrit par [VYS]   
26-06-2007
Nous avons vu, dans un autre article, comment générer un flux rss de nouvelles pour notre site.
Mais les flux rss ne se limitent pas aux nouvelles du site et il est tout aussi intéressant de proposer un flux par thème du forum ou par type d'événement.

Plutot que de répéter à chaque fois le script de génération du fichier rss, je vous propose d'utiliser une classe plus générique qui va formater nos données de flux en un XML prévu à cet effet.

La classe Rss et la classe RssElement

 
class Rss{
  var $gs_title;
  var $gs_url;
  var $gs_description;
  var $gs_titreImage;
  var $gs_urlImage;
  var $gs_urlElement;
  var $gb_isImage;
  var $ga_elements;
 
  function Rss($as_titre, $as_url, $as_description)
  {
    $this->gs_title = $as_titre;
    $this->gs_url = $as_url;
    $this->gs_description = $as_description;
    $this->gb_isImage = false;  
  }
  function setImage($as_titre, $as_urlImage, $as_urlElement)  {
    $this->gs_titreImage = $as_titre;
    $this->gs_urlImage = $as_urlImage;
    $this->gs_urlElement = $as_urlElement;
    $this->gb_isImage = true;  
  }    
  function addElement($as_title,$as_email,$as_link,$as_description,$ats_date)
  {
    $lo_element = new RssElement($as_title,$as_email,$as_link,$as_description,$ats_date);
    $this->ga_elements[] = $lo_element;
    return $lo_element->getXML();
  }
  function getXML()  
  {
    $ls_return = "<"."?xml version=\"1.0\" encoding=\"iso-8859-1\" ?".">";
    $ls_return.= "\n<rss version=""></rss>";
    $ls_return.= "\n<channel>";
    $ls_return.= "\n<title>".$this->gs_title."</title>";
    $ls_return.= "\n<link />".$this->gs_url."";
    $ls_return.= "<description>".$this->gs_description."</description>";
    $ls_return.= "\n<language>fr</language>";
    $ls_return.= "\n<pubdate>".date('r')."</pubdate>";
    $ls_return.= "\n<lastbuilddate>".date('r')."</lastbuilddate>";
    if($this->gb_isImage)
    {
      $ls_return.= "\n<image>";
      $ls_return.= "\n<title>".$this->gs_titreImage."</title>";
       $ls_return.= "\n<url>".$this->gs_urlImage."</url>";
      $ls_return.= "\n<link>".$this->gs_urlElement."</link>";
         $ls_return.= "\n</image>";
    }
    foreach($this->ga_elements as $lo_element)
    {
      $ls_return .= $lo_element->getXML();
    }
    $ls_return.= "\n</channel>";
    $ls_return.= "\n</rss>";
    
    return $ls_return;
  }
  
  function saveXML($as_file)
  {
    $lo_rss = fopen($as_file, 'w');
    fwrite($lo_rss, $this->getXML());
    fclose($lo_rss);
  }
}
 
class RssElement
{
  var $gs_title;
  var $gs_email;
  var $gs_link;
  var $gs_description;
  var $gts_date;
  
  function RssElement($as_title,$as_email,$as_link,$as_description,$ats_date)
  {
    $this->gs_title = $as_title;
    $this->gs_email = $as_email;
    $this->gs_link = $as_link;
    $this->gs_description = $as_description;
    $this->gts_date = $ats_date;
  }
  function getXML()
  {
    $ls_return.= "\n<item>";
    $ls_return.= "\n<title>".htmlspecialchars($this->gs_title)."</title>";
    $ls_return.= "\n<author>".$this->gs_email."</author>";
    $ls_return.= "\n<link>".$this->gs_link."</link>";
    $ls_return.= "\n<description>".htmlspecialchars($this->gs_description)."</description>";
    $ls_return.= "\n<pubdate>".date('r', $this->gts_date)."</pubdate>";
    $ls_return.= "\n</item>";        
      return $ls_return;  
  }
}
La classe Rss() permet de générer un objet qui va regrouper toutes les propriétés du flux rss à générer. Elle contient, entre autres, un array de RssElement() qui est une classe décrivant un élément du flux (une nouvelle au sein d'un flux de nouvelles par exemple).

Elle dispose de deux propriétés intéressantes : getXML et saveXML qui vont permettre respectivement de retourner le XML du flux (si le flux a une finalité dynamique) ou de le sauver dans un fichier (si le flux a une finalité statique).

Utilisr l'objet

Tout d'abord construisez votre objet avec ses propriétés de base

 
$lo_rss = new Rss("Mes Forums - Derniers sujets"  , "http://forum.monsite.com"  , "Monsite : Derniers Sujets du Forum");
Ensuite parcourez un recordset d'éléments (ici des sujets de forums) pour peupler l'array d'éléments.
 
while($la_rs=mysql_fetch_array($lo_rs))
{
  $lo_rss->addElement($la_rs["Subject"],$la_rs["Username"] 
  , "http://urlDuSujet?ID=".$la_rs["ID"], $la_rs["Message"]
  , strtotime($la_rs["Date"]));
}
Enfin, soit vous enregistrez le flux obtenu dans un fichier :
 
  $lo_rss->saveXML("lastTopics.xml");
soit vous le retournez directement au client :
 
 echo $lo_rss->getXML();

Discuter de cet article dans les forums. (0 Messages)

 
Suivant >
 
© 2010 JeuxWeb.org asbl