Wikini

ProduireDesFilsRSS

PagePrincipale :: DerniersChangements :: DerniersCommentaires :: ParametresUtilisateur :: Vous êtes ec2-34-236-152-203.compute-1.amazonaws.com
(page recopiée depuis WikiniEtLesFluxRSS)

Page en cours de remaniement par DavidDelon

Plan à l'étude :


Définition


Un "flux" ou "fil" RSS est un simple fichier texte, comprenant du contenu (en général une succession d'actualités) et des balises délimitant les champs de ce contenu (titres, dates, auteurs). En quelque sorte, c'est un "résumé propre", formatté dans une syntaxe précise, de ce qu'il y a de nouveau sur un site Web (d'après http://www.pointblog.com/abc/rss_et_syndication_1.htm).


Etat des lieux production fils RSS dans Wikini 0.4.3


Wikini produit un fil RSS à partir des derniers changements effectués sur le site. Cette fonctionnalité :


Utilisation


Fonctionnement


Problèmes techniques et limitations fonctionnelles

Utilisation
Etendue
Contenu
Mise en oeuvre

Propositions


Etendue

Pour les autres pages, c'est-à-dire les pages "traditionnelles", un fils RSS n'a de sens que si l'utilisateur indique en clair, dans un champ prévu à cet effet, le changement effectué sur la page : par exemple : "Ajout d'un lien vers XXXX" ; "amélioration de la définition des CSS" ; "correction d'orthographe sans importance" ; etc. A ce titre la page RecentChanges de WikiTikkiTavi? illustre bien cet exemple (bien que les gens ne renseignent pas systématiquement le champ prévu).

Mise en oeuvre proposée : Génération d'un flux RSS de l'historique de la page courante, appel au moyen de l'handler revisionsrss. Exemple : http://www.x-arn.org/w/PagePrincipale/revisionsrss

<?php
/*
Exemple de handler pour WikiNi version WikiNi 0.4.1rc et 0.4.1.
Développé par Charles Népote.
Version 0.02 du 03/07/2004.
Licence GPL.
modification par ActionsReseauxNumeriques
04/11/2004
Genere un flux RSS de l'historique de la page courante
Licence GPL.
*/
// On teste si le script n'est pas appelé en direct
if (!defined("WIKINI_VERSION"))
{
  die (
"accès direct interdit");
}
// On teste si l'utilisateur peut lire la page
if (!$this->HasAccess("read"))
{
    return;
}
else
{
    
// On teste si la page existe
    
if (!$this->page)
    {
        return;
    }
    else
    {
        
header("Content-Type: application/rss+xml");
        
$output "<?xml version=\"1.0\" encoding=\"iso-8859-1\"?>\n";
        if (
$pages $this->LoadRevisions($this->tag))
        {
            
$output .= "<rss version=\"2.0\" xmlns:dc=\"http://purl.org/dc/elements/1.1/\">\n";
            
$output .= "  <channel>\n";
            
$output .= "      <title>".$this->config["wakka_name"].": ".$this->tag."</title>\n";
            
$output .= "      <link>".$this->config["base_url"].$this->tag."</link>\n";
            
$output .= "      <description></description>\n";
            
$output .= "      <language>fr</language>\n";

            foreach (
$pages as $page)
            {
                
$url $this->href("show")."&amp;time=".urlencode($page["time"]);
            
                
$output .= "      <item>\r\n";
                
$output .= "          <title>".$page["time"]  ." by ".$page["user"]. "</title>\r\n";
                
$output .= "          <link>" $url "</link>\r\n";
                
$output .= "          <description></description>\r\n";
                
$output .= "          <dc:creator>by ".$page["user"]."</dc:creator>\r\n"
                
$output .= "          <dc:date>".ereg_replace(" ","T",$page["time"])."-01:00</dc:date>\r\n"
                
$output .= "      </item>\r\n";

            }
            
$output .= "  </channel>\r\n";
            
$output .= "</rss>";
            print(
$output);
        }
    }
}
?>




> --YannLeGuennec -- CharlesNepote


Contenu



Utilisation

Mise en oeuvre proposée :
Script à placer dans le fichier footer.php après <div class="copyright"> .
// FidelioEspoir - 2004
<a href=<?php echo $this->GetConfigValue("base_url") ?>DerniersChangementsRSS"> <img src=
"<?php echo $this->GetConfigValue("image_url") ?>/xml.gif" title="Copiez ce lien et collez le dans votre lecteur de news."> </a> ::

Utilise d'un nouveau paramètre indiquant l'endroit d'un dossier "image" où est installée l'image xml.gif représentant le petit rectangle xml orange ( et toutes les autres images d'ailleurs)

Contenu

RSS 2.0
Un flux RSS au format 2.0, inspiré de phpBB et DotClear). :

Mise en oeuvre proposée :
Exemple : http://fsa.notredomaine.org/wiki/DerniersChangementsRSS/xml .
<?php
//  LordFarquaad - 2004
if ($user $this->GetUser())
{
    
$max $user["changescount"];
}
else
{
    
$max 50;
}

if (
$pages $this->LoadRecentlyChanged($max))
{
    if (!(
$link $this->GetParameter("link"))) $link=$this->config["root_page"];
    
$output "<?xml version=\"1.0\" encoding=\"iso-8859-1\" ?>\n";
    
/*
    $output .= "<!-- RSS v0.91 generated by Wikini -->\n";
    $output .= "<rdf:RDF\n";
    $output .= "xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\"\n";
    $output .= "xmlns=\"http://my.netscape.com/publish/formats/rss-0.91.dtd\">\n";
    */
     
$output .= '<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">' "\n";
    
$output .= "<channel>\n";
    
$output .= "<title> Derniers changements sur "$this->config["wakka_name"]  . "</title>\n";
    
$output .= "<link>" $this->config["base_url"] . $link "</link>\n";
    
$output .= "<description> Derniers changements sur " $this->config["wakka_name"] . " </description>\n";
    
$output .= "<language>fr</language>\n";
    
$output .= '<generator>WikiNi ' WIKINI_VERSION "</generator>\n";
    foreach (
$pages as $i => $page)
    {
        
/*
        list($day, $time) = explode(" ", $page["time"]);
        $day= preg_replace("/-/", " ", $day);
        list($hh,$mm,$ss) = explode(":", $time);
        */
        
$output .= "<item>\n";
        
$output .= "<title>" $page["tag"] . "</title>\n";
        
$output .= '<dc:creator>' $page["user"] . "</dc:creator>\n";
        
$output .= '<pubDate>' $page['time'] . "</pubDate>\n";
        
$output .= "<description> Modification de " $page["tag"] . " --- par " .$page["user"/* . " le " . $day ." - ". $hh .":". $mm */ "</description>\n";
        
$output .= "<link>" $this->config["base_url"] . $page["tag"] . "&amp;time=" rawurlencode($page["time"]) . "</link>\n";
        
$output .= "</item>\n";
    }
    
$output .= "</channel>\n";
    
$output .= "</rss>\n";
    
// $output .= "</rdf:RDF>\n";
    
echo $output ;
}
?>



Fonctionnement interne





solution pour réduire la charge sur le serveur lors de la lecture du fil des DerniersChangements : enregistrer un fichier .xml statique lors de l'enregistrement d'une page (et non appeler la base pour générer le fil à chaque requête HTTP)


<?php
/*
update_rss.php

Copyright 2003  David DELON
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA


--
x-arn / 2004
*/



$max 10;

if (
$pages $this->LoadRecentlyChanged($max))
{
    if (!(
$link $this->GetParameter("link"))) $link=$this->config["root_page"];
    
$output "<?xml version=\"1.0\" encoding=\"iso-8859-1\" ?>\n";
    
$output .= "<!-- RSS v0.91 generated by Wikini -->\n";
    
$output .= "<rdf:RDF\n";
    
$output .= "xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\"\n";
    
$output .= "xmlns=\"http://my.netscape.com/publish/formats/rss-0.91.dtd\">\n";
 
    
$output .= "<channel>\n";
    
$output .= "<title> Derniers changements sur "$this->config["wakka_name"]  . "</title>\n";
    
$output .= "<link>" $this->config["base_url"] . $link "</link>\n";
    
$output .= "<description> Derniers changements sur " $this->config["wakka_name"] . " </description>\n";
    
$output .= "<language>fr</language>\n";
    
$output .= "</channel>\n";

    foreach (
$pages as $i => $page)
    {
        list(
$day$time) = explode(" "$page["time"]);
        
$daypreg_replace("/-/"" "$day);
        list(
$hh,$mm,$ss) = explode(":"$time);
        
$output .= "<item>\n";
        
$output .= "<title>" $page["tag"] . "</title>\n";//. " --- par " .$page["user"] . " le " . $day ." - ". $hh .":". $mm .
        
$output .= "<description> Modification de " $page["tag"] . " --- par " .$page["user"] . " le " $day ." - "$hh .":"$mm "</description>\n";
        
$output .= "<link>" $this->config["base_url"] . $page["tag"] . "&amp;time=" rawurlencode($page["time"]) . "</link>\n";
        
$output .= "</item>\n";
    }
    
$output .= "</rdf:RDF>\n";
    
    
$f = @fopen("x/rss.xml","w"); // fichier RSS statique dans le dossier 'x'
    
if($f) {
        
fputs($f,$output) ;
        
fclose($f);
    }
}
?>


Il s'agit d'une simple modification de l'action RSS de DavidDelon, placé à la racine du wiki (pour l'include) et non dans les actions.
Dans le cas présenté, le fichier statique rss.xml est placé dans le même dossier que les styles .css (dossier 'x' dans l'exemple) because ReEcritureURL? et pour que ça marche en SafeMode? ...



question par RobinMeier:

mais comment il faut faire pour inclure une partie du contenu d'une page qui a été changé dans le fils RSS ? j'ai regardé le fichier recentchangesrss.php mais je m'y connais pas assez pour pouvoir l'éditer correctement...

Très bonne et interessante question, j'avais regardé un moment donné le calcul des diffs et ça m'avait semblé assez compliqué...Il serait en tout cas très intéressant d'avoir cette diff dans le RSS, le champ description est assez vide pour le moment. On pourrait aussi formater la date et l'auteur de la modife correctement dans les champs adhoc dc:date etc... --YannLeGuennec



On peut s'aider de :

Il n'y a pas de commentaire sur cette page. [Afficher commentaires/formulaire]