Comment syndiquer les autres sites
Comment ajouter un bloc de syndication
Supposons que l'on veuille syndiquer les
NOMBRE derniers items du fil
ADRESSE
On peut le faire sous 3 formats differents en utilisant 3
FONCTION differentes :
-
SyndicationListe cree une liste avec les derniers titres et l'auteur, c'est utile pour mettre un court bloc de syndication au milieu d'une page.
-
SyndicationColonne cree une liste sans pastilles avec les derniers titres et l'auteur, c'est utile pour mettre un court bloc de syndication dans la colonne de gauche par exemple.
-
SyndicationListeContenu cree une liste avec auteur titre et contenu, c'est utile pour reprendre non seulement les titres, mais aussi un resume du texte (a eviter dans une colonne fine).
Formule magique
<?php
require_once "/imc/sf-active/marseille/local/syndication/syndication.php";
echo FONCTION("ADRESSE", NOMBRE);
?>
Exemple Pour lister les 5 derniers titres de la colonne de droite du site global, il suffit de mettre :
<?php
require_once "/imc/sf-active/marseille/local/syndication/syndication.php";
echo SyndicationListe("http://indymedia.org/global.1-0.rss", 5);
?>
Dans une page de process ou dans la colonne de gauche
Il suffit d'utiliser la formule magique telle quelle
Dans la colonne centrale d'une categorie
Helas, il ne semble pas possible d'ajouter du php dans les templates ou dans le corps d'un texte de friture. Il faut donc atthacker certains fichiers, au risque de s'ecarter de sf-active. Allons-y gaiement
Supposons que l'on veuille faire une friture d'en-tete de la categorie monde avec une syndication des titres des derniers articles de la colonne de droite du site global
http://www.indymedia.org
On ne peut pas rediger cette friture via la methode classique, meme en creant un template special syndication
Du coup on va creer un nouveau fichier include (via la partie admin) dont le nom sera
index_center_monde.inc et qui sera une copie du fichier
index_center.inc
On rajoute au debut de ce fichier le contenu de la friture d'en-tete (du html de base comme pour une friture classique, avec titres, images...) et la formule magique la ou on veut que la syndication se fasse.
Ensuite, il faut editer le fichier
/imc/sf-active/marseille/website/features/monde/index.php et remplacer la ligne
include(SF_INCLUDE_PATH. '/index_center.inc'); par
include(SF_INCLUDE_PATH. '/index_center_monde.inc');
Le probleme est que ce fichier appartient a
apache:marseille mais y'a que apache qui a le droit de le modifier, donc en gros il faut se connecter sur le chat d'indymedia au salon #ahimsa pour demander que les droits de ce fichier soient changes en
-rw-rw-r-- (ca a ete fait pour les categories existantes mais le probleme se reposera pour les categories crees ulterieurement).
Et si le serveur distant demande a ce qu'on s'identifie
Il se peut que la page que l'on veut syndiquer ne soit visible que si un
UTILISATEUR s'est identifie avec son
PASS pour cela, il suffit de remplacer l'
ADRESSE http://blablabla par
http://UTILISATEUR:PASS@blablabla dans la formule magique.
Exemple Pour lister les 10 dernieres pages qui ont ete modifiees sur l'espace collaboratif de fonctionnement du collectif, il suffit de mettre :
<?php
require_once "/imc/sf-active/marseille/local/syndication/syndication.php";
echo SyndicationListe("http://MarseilleGuest:guest@docs.indymedia.org/viewauth/Local/ImcMarseilleRss?contenttype=text/xml&skin=rss"", 10);
?>
Le cas du site de Nice
Le flux genere par le site de Nice n'est pas compris par le parseur (il presente des caracteres qui ressemblent a
’ ;), donc on a fait un petit programme qui le remet en forme (le fichier source se trouve
ici).
Concretement, si on vaut faire un bloc de syndication du site de Nice, il suffit de remplacer l'adresse
http://nice.indymedia.org/backend.php3 par
http://marseille.indymedia.org/syndicationnice.php dans la formule magique. Noter que les articles de colonne centrale sont listees dans le meme fichier avant les contributions (il faudra donc modifier un peu le syndication.php pour permettre de selectionner les contributions).
Qu'est-ce qui a ete fait techniquement
Il est important d'avoir une trace de ca quelque part pour pouvoir evoluer et migrer sans douleur lorsque la syndication sera une fonctionalite de sf-active.
Sources
Importation des sources
Les lignes suivantes ont ete tapees :
Creation des fonctions qui facilitent l'utilisation
Un fichier
syndication.php (dont le contenu est copie plus bas) a ete cree et ajoute au repertoire
/imc/sf-active/marseille/local/syndication/
Gestion du cache
Le cache permet de sauvegarder les fils rss pour ne pas avoir a les retelecharger a chaque requete (cela consomme de la bande passante inutilement (ainsi que du temps de calcul pour des pages generees par twiki)).
Choix du repertoire de cache
Par defaut, magpierss cree un repertoire cache dans le meme repertoire a partir duquel il a ete appelle (par exemple; si on met un bloc de syndication dans la page
liens.php, un repertoire
cache sera cree dans
/imc/sf-active/marseille/website/process). Un probleme de cette configuration est que ca cree plein de repertoires un peu partout. Un autre probleme est que la ou apache n'a pas le droit de creer de repertoire, le cachene marche pas.
Pour eviter tout ca, on fait en sorte que tous les fichiers de cache soient regroupes dans
/tmp/marseillesyndicationcache en ajoutant la ligne
define('MAGPIE_CACHE_DIR', '/tmp/marseillesyndicationcache');
au debut de la fonction
init dans le fichier
/imc/sf-active/marseille/local/syndication/rss_fetch.inc
Temps d'attente
Par defaut, l'intervalle de temps entre 2 mises a jour des fils de syndication est une heure, on peut le
changer dans le fichier
/imc/sf-active/marseille/local/syndication/rss_cache.inc
var $MAX_AGE = 3600; // when are files stale, default one hour
Sources du fichier /imc/sf-active/marseille/local/syndication/syndication.php
C'est pas forcement une copie exacte dans la mesure ou y'a pas mal de modifications qui vont y etre faites, en esperant que cette page sera mise a jour regulierement :
syndication.php.txt
to top