Astuces php
Accueil
  News 
 Scripts 
 Bouquins 
 Newsletter 
  Emplois 
 Annuaire 
 Forum 
 
Offres d'emplois
Développeur PHP/MySQL
Start-up basée à Chantilly (60) à 35 minutes de Paris, recrute développeur PHP/MySQL confirmé en CDI, pour accompagner sa forte croissance. Comp...
 
 C'est ici
 
Avez vous lu ?
PHP 5 et MySQL 5
Avez vous lu ? -> PHP 5 et MySQL 5 : Présentation de l'éditeur
Ce livre explique comment se servir de PHP et de MySQL pour construire des sites Web dynamiques, interactifs et pratiques. Ce livre pratique inclut de nombreux exemples illustrant des tâches courantes comme l’authentification d’utilisateurs, la construction d’un caddie,...
 
 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...
 


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