begin process at 2012 02 12 19:10:09
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Class et Objet ( POO )

 > GÉNÉRATEUR DE FLUX RSS 2.0

GÉNÉRATEUR DE FLUX RSS 2.0


 Information sur la source

Note :
8,67 / 10 - par 3 personnes
8,67 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Class et Objet ( POO ) Niveau :Initié Date de création :26/11/2004 Date de mise à jour :26/11/2004 17:57:59 Vu / téléchargé :10 038 / 1 083

Auteur : lumesh

Ecrire un message privé
Site perso
Commentaire sur cette source (14)
Ajouter un commentaire et/ou une note

 Description

Cette classe sous licence GNU/GPL de ma conception permet de générer des flux RSS en version 2.0 suiavnt le modèle XML version 1.0 et encodé en UTF8.

Ci dessous un exemple d'utilisation.

Source

  • <?php
  • # fonction adaptée de la source ici présente:
  • # http://www.nexen.net/scripts/details.php%3Fscripts%3D682+php+taille+d%27un+fichier+distant&hl=fr
  • # permet de récupérer le type et la taille d'un fichier distant en HTTP
  • function GetDistantFileInfos($host , $port , $path)
  • {
  • $infos = array();
  • $size = -1;
  • $type = '';
  • if ($fp = fsockopen($host, $port))
  • {
  • $req = "HEAD $path HTTP/1.1\r\n";
  • $req .= "Host: ".$host."\r\n\r\n";
  • fputs($fp, $req, strlen($req));
  • while (!feof($fp))
  • {
  • $buffer = fgets($fp, 1024);
  • $split = explode(' ', $buffer);
  • if ($split[0] == "Content-Length:")
  • {
  • $size = (int) $split[1];
  • }
  • if ($split[0] == "Content-Type:")
  • {
  • $type = trim($split[1]);
  • }
  • }
  • fclose($fp);
  • }
  • $infos[0] = $type;
  • $infos[1] = $size;
  • return $infos;
  • }
  • # inclut la classe
  • include('class.rss20.php');
  • # charge une nouvelle instance
  • $rss = new rssChannel();
  • # donne un titre à la syndication
  • $rss->feedTitle('essai'); // obligatoire
  • # donne le lien vers lequel se refère cette syndication
  • $rss->feedLink('http://textbox.free.fr'); // obligatoire
  • # donne une description de cette syndication
  • $rss->feedDescription('essai d\'un feed rss 2.0'); // obligatoire
  • # le language utilisé (respect obligatoire de la norme ISO-639)
  • $rss->feedLanguage('fr'); // optionnel
  • # a qui appartiend cette publication
  • $rss->feedCopyright('Copyright (c)2004 LEMOINE Christophe'); // optionnel
  • # nombre de minutes pendant lesquels la syndication restera dans le cache du client
  • $rss->feedTtl(60); // optionnel
  • # le nom du générateur de cette syndication
  • $rss->feedGenerator('PHP-RSS2'); // optionnel
  • # adresse email de la personne chargée de l'édition
  • $rss->feedEditor('a@a.a'); // optionnel
  • # adresse email du responsable technique
  • $rss->feedWebmaster('a@a.a'); // optionnel
  • # date de publication (renseigner un timestamp)
  • $rss->feedPubdate(time()); // optionnel
  • # date de la dernière mise à jour de cette syndication
  • $rss->feedLastbuiltdate(time()); // optionnel
  • # categorie dans laquelle classer votre syndication
  • $rss->feedCategory('essai'); // optionnel
  • # logo correspondant à la syndication
  • $rss->feedImage('http://textbox.free.fr/IMPORTANT/Logo_GOOGLE.gif', 'le logo de google é à à &', 'http://textbox.free.fr'); // optionnel
  • # charge la classe de gestion des éléments
  • $item = new rssItem();
  • # initialise les valeures
  • $item->Clean();
  • # donne un titre à cet élément
  • $item->itemTitle('item essai'); // obligatoire
  • # donne une description
  • $item->itemDescription('description de l\'élément'); // obligatoire
  • # donne le lien direct vers l'élément HTML correspondant
  • $item->itemLink('http://textbox.free.fr/article.php?id=1'); // obligatoire
  • # adresse email de l'auteur de cet élément (pas le nom mais seulement l'email)
  • $item->itemAuthor('christophe.lemoine1@tiscali.fr'); // optionnel
  • # categorie en rapport avec cet élément
  • $item->itemCategory('essai 1');
  • # url de la page des commentaires
  • $item->itemComments('http://textbox.free.fr/article.php?id=1');
  • # chaine de caractère d'identification unique
  • $item->itemGuid((string) time());
  • # date de publication de cet élément
  • $item->itemPubdate(time());
  • # format XML de cet element avec son titre
  • $item->itemSource('http://textbox.free.fr/element.xml', 'Mon site personnel');
  • # ajoute un media par son url, sa taille exacte en octet et son type MIME
  • $media_host = 'textbox.free.fr';
  • $media_path = '/IMPORTANT/Logo_GOOGLE.gif';
  • $media_infos = GetDistantFileInfos($media_host, 80, $media_path);
  • $item->itemEnclosure('http://'.$media_host.$media_path, $media_infos[1], $media_infos[0]);
  • # met en forme l'élément et l'ajoute à la syndication
  • $rss->AddItem($item->Create());
  • # commentaires identiques pour l'élément du dessous
  • $item->Clean();
  • $item->itemTitle('item essai 2');
  • $item->itemDescription('description de l\'élément 2');
  • $item->itemLink('http://textbox.free.fr/article.php?id=2');
  • $rss->AddItem($item->Create());
  • # met en forme le flux RSS 2.0
  • $rss->Create();
  • # sauvegarde le flux dans un fichier XML (optionnel)
  • $rss->Save('feed.xml');
  • # affiche sur la fenetre du naviguateur le flux XML (optionnel)
  • $rss->Show();
  • ?>
<?php

# fonction adaptée de la source ici présente:
# http://www.nexen.net/scripts/details.php%3Fscripts%3D682+php+taille+d%27un+fichier+distant&hl=fr
# permet de récupérer le type et la taille d'un fichier distant en HTTP
function GetDistantFileInfos($host , $port , $path)
{
    $infos = array();
	$size = -1;
	$type = '';
    if ($fp = fsockopen($host, $port))
    {
    	$req = "HEAD $path HTTP/1.1\r\n";
    	$req .= "Host: ".$host."\r\n\r\n";
    	fputs($fp, $req, strlen($req));
        while (!feof($fp))
        {
        	$buffer = fgets($fp, 1024);
            $split = explode(' ', $buffer);
            if ($split[0] == "Content-Length:")
            {
            	$size = (int) $split[1];
            }
            if ($split[0] == "Content-Type:")
            {
            	$type = trim($split[1]);
            }
        }
        fclose($fp);
    }
    $infos[0] = $type;
    $infos[1] = $size;
    return $infos;
}

# inclut la classe
include('class.rss20.php');

# charge une nouvelle instance
$rss = new rssChannel();

# donne un titre à la syndication
$rss->feedTitle('essai');  // obligatoire

# donne le lien vers lequel se refère cette syndication
$rss->feedLink('http://textbox.free.fr');   // obligatoire

# donne une description de cette syndication
$rss->feedDescription('essai d\'un feed rss 2.0');    // obligatoire

# le language utilisé (respect obligatoire de la norme ISO-639)
$rss->feedLanguage('fr');    // optionnel

# a qui appartiend cette publication
$rss->feedCopyright('Copyright (c)2004 LEMOINE Christophe');    // optionnel

# nombre de minutes pendant lesquels la syndication restera dans le cache du client
$rss->feedTtl(60);    // optionnel

# le nom du générateur de cette syndication
$rss->feedGenerator('PHP-RSS2');    // optionnel

# adresse email de la personne chargée de l'édition
$rss->feedEditor('a@a.a');    // optionnel

# adresse email du responsable technique
$rss->feedWebmaster('a@a.a');    // optionnel

# date de publication (renseigner un timestamp)
$rss->feedPubdate(time());    // optionnel

# date de la dernière mise à jour de cette syndication
$rss->feedLastbuiltdate(time());    // optionnel

# categorie dans laquelle classer votre syndication
$rss->feedCategory('essai');    // optionnel

# logo correspondant à la syndication
$rss->feedImage('http://textbox.free.fr/IMPORTANT/Logo_GOOGLE.gif', 'le logo de google é à à &', 'http://textbox.free.fr');    // optionnel

# charge la classe de gestion des éléments
$item = new rssItem();

# initialise les valeures
$item->Clean();

# donne un titre à cet élément
$item->itemTitle('item essai');    // obligatoire

# donne une description
$item->itemDescription('description de l\'élément');    // obligatoire

# donne le lien direct vers l'élément HTML correspondant
$item->itemLink('http://textbox.free.fr/article.php?id=1');    // obligatoire

# adresse email de l'auteur de cet élément (pas le nom mais seulement l'email)
$item->itemAuthor('christophe.lemoine1@tiscali.fr');    // optionnel

# categorie en rapport avec cet élément
$item->itemCategory('essai 1');

# url de la page des commentaires
$item->itemComments('http://textbox.free.fr/article.php?id=1');

# chaine de caractère d'identification unique
$item->itemGuid((string) time());

# date de publication de cet élément
$item->itemPubdate(time());

# format XML de cet element avec son titre
$item->itemSource('http://textbox.free.fr/element.xml', 'Mon site personnel');

# ajoute un media par son url, sa taille exacte en octet et son type MIME
$media_host = 'textbox.free.fr';
$media_path = '/IMPORTANT/Logo_GOOGLE.gif';
$media_infos = GetDistantFileInfos($media_host, 80, $media_path);
$item->itemEnclosure('http://'.$media_host.$media_path, $media_infos[1], $media_infos[0]);

# met en forme l'élément et l'ajoute à la syndication
$rss->AddItem($item->Create());

# commentaires identiques pour l'élément du dessous
$item->Clean();
$item->itemTitle('item essai 2');
$item->itemDescription('description de l\'élément 2');
$item->itemLink('http://textbox.free.fr/article.php?id=2');
$rss->AddItem($item->Create());

# met en forme le flux RSS 2.0
$rss->Create();

# sauvegarde le flux dans un fichier XML (optionnel)
$rss->Save('feed.xml');

# affiche sur la fenetre du naviguateur le flux XML (optionnel)
$rss->Show();

?>

 Conclusion

Bon c'est long mais il y a plus de commentaires que de 2 codes (ou autant).
Le principe est simple, le tout c'est de ne pas jouer l'exubérant de maniere a respecter les standards.

 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

26 novembre 2004 17:57:59 :

 Sources du même auteur

Source avec Zip [PHP5] LIMÉA XSLT TEMPLATE ENGINE
Source avec Zip Source avec une capture PHP4 - TREEVIEW POUR LES DOSSIERS
Source avec Zip GERER SES FORMULAIRES
Source avec Zip CLASSE POUR LES TEMPLATES TOUTE SIMPLE
CALENDRIER TOUT SIMPLE

 Sources de la même categorie

CLASSE DE GESTION DE "VARIABLES GLOBALES D'ENVIRONNEMENT" par pifou25
Source avec Zip COLLECTION.CLASS.MIN.PHP par thunderhunter
Source avec Zip SIMPLETEMPLATE par thunderhunter
Source avec Zip Source avec une capture VOIR QUI VISITE VOTRE SITE par Dariumis
Source avec Zip CLASS SIMPLE CBASEDONNEE par smag42

Commentaires et avis

Commentaire de quiaimeflash le 04/12/2004 00:00:41

Je crois qu'il va faloir tous si mettre au RSS !!

Commentaire de marc06 le 05/12/2004 00:21:46

C'est quoi RSS ?

Commentaire de quiaimeflash le 05/12/2004 00:26:25

hahahahhaha... C'est ce que je disais faut s'y mettre...

Nan, plus sérieusement sa permet de partager du contenu, enfaite c'est un peut comme si tu avait une base de donnée (du texte brut) et chacun personnalise comme il a envi sur son site..
Sauf que dans la réalité ce sont fichier et non une base de donnée, et c'est un peut dur parcequ'il y a plein de norme..

On parle de Fil RRS, mais va sur commentcamarche.net, il y a un article pas mal..

Ps : Il existe un fil RSS sur le site..

Commentaire de marc06 le 05/12/2004 00:34:12

Super ! Merci.

Commentaire de cyberbenfr le 31/01/2005 13:10:11

Très bon exemple ! Merci :)

Commentaire de hugolaf le 09/07/2005 13:22:59

Question: j'ai une date dans ma base de données... mais quand je veux la mettre ça marche pas et ça m'affiche :

Thu, 01 Jan 1970 01:00:00 +0100

au lieu de normalement :

Sat, 9 Jul 2005 12:59:00 +0200

Pour l'item j'ai mis :

$item->itemPubdate($newsinfo['RSSDATE']);

$newsinfo['RSSDATE'] contient la date. Sa valeur est "Sat, 9 Jul 2005 12:59:00 +0200"

D'où peut venir le problème : je n'ai aucune erreur sql, mais mes autres news déjà postées n'ont pas la valer rssdate de renseigné: est-ce la cause de mon soucie ? ( Théoriquement non car chaque  affichage de l'item d'une news est indépendant de chaque enregistrement dans la table )

Merci de votre aide ++

Commentaire de lumesh le 09/07/2005 15:53:40

regarde le flux RSS, et mate si la date est bien enregistrée.
Si oui alors compare d'autres flux RSS 2.0 et dit moi si tu as une différence.
Sur NewsPan (un lecteur de flux RSS sous nux) ca marche au poil enfin ca me sort corretement la bonne date.

Si l'enregistrement merde, dans ce cas verifie ce que te sort mysql: ya til des espaces en trop des majuscule en moins enfin etc etc etc.

Tiens moi au courant STP car j'utilise cette classe PHP4 dans tous mes développements !

Commentaire de lumesh le 09/07/2005 19:05:31

erf regarde mon exemple:

$rss->feedPubdate(time());  <- c'est un timestamp qu'il faut passer par une date préformatée.
J'ai fait ce de maniere a simplifier l'integration dans le code de chacun sans pour autant se soucier de la RFC.

si tu as une date en jour mois annee et etc utilise mktime()

Commentaire de ov6rmind le 05/11/2005 16:31:58

Bonjour,

Le script est super sauf la partie concernant le type et la taille de lobjet (code du site Nexen) qui ne marche apparament pas, ni en local, ni sur le web. Aurai-je oublié qqch ?

Merci,

JMD

Commentaire de spyro666 le 09/04/2006 18:35:04

Salut, le tout ne m'a l'air pas trop mal par contre la classe  n'est pas très optimisée en certains endroit. Par exemple la fonction Convert pourrais être abrégée par htmlspecialchars et un str_replace plutot que de faire 4 str_replace...

Ensuite la fonctoin RSSChannel n'est pas vraiment utile vu qu'on pourrait très bien déclaré les variables à la création de l'objet.

Bref... le script et les idée sont bonnes par contre pour l'optimisation je ne te mettrais même pas un 2...

Commentaire de lolo3129 le 24/09/2006 17:27:49

Salut,

classe pratique, merci pour le code :). Par contre, petit bug, je pense. Tu testes la longueur le fTtl qui renvoi donc 1 (>0) et donc cette info est tout le temps affichée (non conforme au standard) ; fct Create de rssChannel

ensuite, une question : pourquoi ajouter des chaînes dans via le AddItem alors qu'il serait peut être plus pratique d'ajouter les objets item pour pouvoir faire ce que tu veux avec ensuite ?

++,
  lolo3129

Commentaire de lumesh le 25/09/2006 09:21:10

Alors oui effectivement un bug...
ceci:
if (strlen($this->fTtl) > 0) { .....
n'est pas bon!

$this->fTtl est un entier pas une chaine de caractere. il faut retirer le strLen comme ceci:
if ($this->fTtl > 0) { .....

Pour ne pas ajouter le TTL il faut le mettre a 0.

Pour le passage d'une chaine de caracteres, je pense que j'ai prefere le coté pratique. Deplus chaque item d'un flux RSS possede une taille reduite, un nombre de caractere negligeable donc niveau memoire ca ne changera pas grand chose de passer le contenu formatté de l'item ou de passer un objet a reformater.

spyro666> oui pour la fonction convert, bien venu dans le oldSchool LOL un peu barbare limite efficace mais ca marche ;)

Commentaire de fmerloz le 06/06/2007 12:41:59

Perso je suis une burne en dev, a part le html et le copier/coller, il semble bien votre script mais on l'utilise comment!

Commentaire de nossoctoruss le 28/02/2010 20:48:30

je v voir ca

 Ajouter un commentaire




Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

 
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 : 1,139 sec (4)

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