Générateur de flux rss 2.0

Soyez le premier à donner votre avis sur cette source.

Vue 12 138 fois - Téléchargée 1 199 fois

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 / Exemple :


<?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.

Codes Sources

A voir également

Ajouter un commentaire Commentaires
Messages postés
126
Date d'inscription
samedi 28 novembre 2009
Statut
Membre
Dernière intervention
9 juin 2013

je v voir ca
Messages postés
1
Date d'inscription
mercredi 6 juin 2007
Statut
Membre
Dernière intervention
6 juin 2007

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!
Messages postés
564
Date d'inscription
jeudi 21 février 2002
Statut
Membre
Dernière intervention
7 novembre 2008

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 ;)
Messages postés
1
Date d'inscription
dimanche 13 avril 2003
Statut
Membre
Dernière intervention
24 septembre 2006

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
Messages postés
137
Date d'inscription
lundi 10 janvier 2005
Statut
Membre
Dernière intervention
28 août 2007

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...
Afficher les 14 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.