Astuces php
Accueil
  News 
 Scripts 
 Bouquins 
 Newsletter 
  Emplois 
 Annuaire 
 Forum 
 
Offres d'emplois
Développeur PHP+MySQL+CSS
Dans le cadre du (re)développement de son site velovert.com, Riverside Publication (leader français de la Presse VTT, établi depuis 1989) cherche u...
 
 C'est ici
 
Avez vous lu ?
Site Web Marchand
Avez vous lu ? -> Site Web Marchand : Destiné à tous ceux qui souhaitent créer une boutique complète en ligne, cet ouvrage développe la méthodologie pour créer un site de e-commerce. Dans une première partie, il explique comment créer l’architecture du site, des 10 questions à se poser au choix du système de paiement. Puis il guide l...
 
 Commander
 
 Chapitres - RSS
PHP 5 Astuces d'experts -> RSS -> Une classe pour récupérer les flux RSS Une classe pour récupérer les flux RSS
PHP 5 Astuces d'experts -> RSS -> Générer des flux RSS Générer des flux RSS
 Une classe pour récupérer les flux RSS
<?php

class RSS {
  
// --- variables de cache
  
var $cache_actif 0;
  var 
$repertoire_cache './cacheRSS/';
  var 
$duree_cache 3600;
  
// --- nombre maximum d'items à lire (0:pas de limite)
  
var $max_items 0;
  
// --- suppression des tags html dans les infos
  
var $stripHTML False;
  
// --- format de date
  
var $format_date '';
  
// --- jeu de caractères à utiliser
  
var $charset '';
  
// --- balises concernant le canal
  
var $tag_canal = array ('title''link''description',
   
'language''copyright''managingEditor''webMaster',
   
'lastBuildDate''rating''docs');
  
// --- balises concernant les items
  
var $tag_item = array('title''link''description',
   
'author''category''comments''enclosure''guid',
   
'pubDate''source');
  
// --- balises concernant les images
  
var $tag_image = array('title''url''link''width',
   
'height');
  
// --- balises concernant les zone de texte
  
var $tag_textinput = array('title''description''name',
   
'link');

  
// --- fonction de récupération des infos
  
function lecture_flux($url) {
    
// --- récupération du flux
    
$contenu $this->recupere_flux($url);
    
// --- traitement
    
if ($contenu) {
      
$resultats $this->traitement_flux($contenu);
    }
  }

  
// --- récupération des infos
  // dans le cache ou sur le site
  
function recupere_flux($url) {
    
$contenu '';
    
// --- lecture dans le cache
    
if ($this->cache_actif == 1) {
      
$fichier $this->nom_cache($url);
      
$timedif = @(time() - filemtime($fichier));
      if (
$timedif $this->duree_cache) {
        
$contenu join(''file($fichier));
        return(
$contenu);
      }
    }
    
// --- récupération sur le site
    
if ($f = @fopen($url'r')) {
      while (!
feof($f)) {
        
$contenu .= fgets($f4096);
      }
      
fclose($f);
      return(
$contenu);
      
// --- écriture dans le cache
      
if ($this->cache_actif == 1) {
        
$fichier $this->nom_cache($url);
        if (
$f = @fopen($fichier'w')) {
          
fputs($f,$contenu);
          
fclose($f);
        }
      }
    }
    return 
FALSE;
  }

  
// --- traitement du flux
  // les infos sont stockées dans un tableau associatif
  
function traitement_flux($contenu) {
    
$result = array();
    
// --- encodage du document
    
$result['encoding'] = $this->extraction_infos(
      
"'encoding=[\'\"](.*?)[\'\"]'si",
      
$contenu);
    
// --- informations sur le canal
    
preg_match("'<channel.*?>(.*?)</channel>'si"$contenu$tmp);
    foreach(
$this->tag_canal as $tag) {
      
$txt $this->extraction_infos(
        
"'<$tag.*?>(.*?)</$tag>'si"$tmp[1]);
      if (
$txt != ''$result[$tag] = $txt;
    }
    
// --- informations de la zone textinput
    // l'expression régulière permet de chercher les balises
    // <textinput> avec ou sans attribut mais pas les balises
    // <textinput />
    
preg_match("'<textinput(|[^>]*[^/])>(.*?)</textinput>'si",
      
$contenu$tmp);
    if (isset(
$tmp[2])) {
      foreach(
$this->tag_textinput as $tag) {
        
$txt $this->extraction_infos(
          
"'<$tag.*?>(.*?)</$tag>'si"$tmp[2]);
        if (
$txt != ''$result['textinput_'$tag] = $txt;
      }
    }
    
// --- conversion du format de date de publication
    
if ($this->format_date != '' && 
      (
$timestamp 
      
strtotime($result['lastBuildDate'])) !==-1) {
      
$result['lastBuildDate'] = 
      
date($this->format_date$timestamp);
    }
    
// --- image du canal
    
preg_match("'<image.*?>(.*?)</image>'si"
    
$contenu$tmp);
    if (isset(
$tmp[1])) {
      foreach(
$this->tag_image as $tag) {
        
$txt $this->extraction_infos(
          
"'<$tag.*?>(.*?)</$tag>'si"$tmp[1]);
        if (
$txt != ''$result['image_'.$tag] = $txt;
      }
    }
    
// --- items
    
preg_match_all("'<item(| .*?)>(.*?)</item>'si"
    
$contenu$items);
    
$rss_items $items[2];
    
$result['nb_items'] = 0;
    
$result['items'] = array();
    foreach(
$rss_items as $rss_item) {
    
// --- lecture des items
     
if ($result['nb_items'] < $this->max_items 
     
|| $this->max_items == 0) {
       foreach(
$this->tag_item as $itemtag) {
         
$tmp 
         
$this->extraction_infos("'(.*?)</$itemtag>'si"$rss_item);
         if (
$tmp != ''$result['items'][$i][$itemtag] = $tmp;
       }
       
// --- conversion du format de date
       
if ($this->format_date != '' 
       
&& ($timestamp 
       
strtotime($result['items'][$i]['pubDate'])) !==-1) {
        
$result['items'][$i]['pubDate'] = 
        
date($this->format_date$timestamp);
       }
       
// --- compteur
       
$result['nb_items']++;
     }
   }
   
// --- fin du traitement
   
return($result);
 }

 
// --- extraction des infos
 
function extraction_infos ($pattern$texte) {
   
preg_match($pattern$texte$tb);
   if(isset(
$tb[1])) {
     
// --- suppression éventuelle des tags HTML
     
if ($this->stripHTML) {
       
$tb[1] = 
       
strip_tags($this->unhtmlentities(strip_tags($tb[1])));
     }
     
// --- conversion éventuelle du jeu de caractères
     
if ($this->charset != '' && $this->rss_charset != '') {
       
$tb[1] = iconv($this->rss_charset$this->charset
       
'//TRANSLIT'$tb[1]);
     }
     return(
$tb[1]);
   }
   return (
'');
 }

 
// --- remplace les variables html (&xx;) par des caractères
 
function unhtmlentities ($string) {
   
// --- table des codes html
   
$trans_tbl 
   
get_html_translation_table (HTML_ENTITIESENT_QUOTES);
   
// --- inversion clés <--> valeurs
   
$trans_tbl 
   
array_flip ($trans_tbl);
   
// --- traitement des apostrophes
   
$trans_tbl += 
   array(
'&apos;' => "'");
   
// --- remplace le caractère codé par le caractère standard
   
return strtr ($string$trans_tbl);
 }

 
// --- nom donné au fichier de cache
 
function nom_cache($url) {
   
$fichier $this->repertoire_cache 'cache_' md5($url);
   return(
$fichier);
 }
}
?>
 Rechercher
Tapez un mot ou une phrase clé
 

 Téléchargement
Téléchargez les sources de l'ouvrage
PHP 5 solutions et composants open-source
Téléchargez les sources de l'ouvrage  -> PHP 5 solutions et composants open-source : Boostez et améliorez vos sites PHP avec des composants et extensions !

Voici enfin l'ouvrage pour améliorer votre site sans tout réécrire. Pourquoi réinventer la roue puisqu'il existe une multitude de composants indépendants à intégrer à votre site ou même des extensions au langage PHP qui peu...
 


Derniers tickets
  • bandeaux publicita... ()
  • Mail avec liste de... ()
  • pb install wamp ()
  • Bouton recalculer ()
  •  

    copyright astuces-php.info - Plan du site - Mylinea.org : l'annuaire des annuaires - échange de liens - Faites du fric