D'origine le logiciel propose des flux pour :
- les derniers billets du blog
rss.php - les derniers billets d'une catégorie
rss.php?cat=catégorie - les derniers commentaires du blog
rss.php?type=co - les derniers commentaires d'une catégorie
rss.php?type=co&cat=catégorie - les derniers commentaires d'un billet
rss.php?type=co&post=billet
Pour l'ensemble de ces flux, il est possible de restreindre la génération aux seules informations disponibles dans une langue données en ajoutant dans l'URL le paramètre lang ( codification sur deux lettres ISO639 ).
Quelques idées d'améliorations
J'avais il y a quelques temps ajouté la possibilité de générer un flux par tag. Ce mécanisme permet aux utilisateurs de suivre un sujet en fonction d'un tag défini. Alexandre Passant à repris l'idée en l'améliorant. Il propose une simplification de l'URL en distinguant les flux générant des items de type 'commentaire' de ceux générant des items de type 'article'. Là ou j'introduisais un type 'tag', il ne reprend cette notion de tag que pour assurer la sélection des items de type 'article'. Sa démarche est plus juste que la mienne, je l'adopte.
Aujourd'hui David semble un peu perdu, lors de l'adaptation de ces codes sur sa nouvelle version de Dotclear, la 1.2.4. Alors je fais le ménage pour présenter un joli code tout propre adapté à cette version.
A la réflexion, pour compléter le mécanisme de génération des flux RSS dans Dotclear, il faut explorer plusieurs pistes.
- La possibilité d'étendre la sélection des items par des combinaisons variées. Le mécanisme devrait pouvoir combiner des sélections d'ensembles d'items intégrant union, intersection, exclusion. Ces sélections devrait pouvoir être faite sur la base des catégories, des tags définis, de l'auteur. En langage simple pouvoir générer le flux RSS des articles portant les tags 'truc' et 'machin', ou générer le flux RSS des articles de la catégorie 'truc' et portant le tag 'machin', ou encore générer le flux RSS des articles rédigé par 'untel'
- La meilleur prise en compte des ajouts de plugin lors de l'exécution du fichier rss.php. En effet si Dotclear dans sa version 1.x, intègre un mécanisme permettant d'étendre ses fonctionnalités par plugin, ceux-ci ne sont actifs que lors de la génération des pages visibles par les visiteurs. Cela peut poser des problèmes pour les plugins de type Spamplemouse, ou gestion de droit d'accès.
- L'utilisation plus complète des
spécifications de RSS. En effet actuellement si des
flux sont générés en
sélectionnant un tag particulier, rien ne l'indique
dans le flux. Le champ dc.subjet est systématiquement
rempli avec l'intitulé de la catégorie auquel
appartient le billet. Nulle trace des tags dans le flux
RSS. Or l'utilisation des balises adéquat, combinées à la définition du vocabulaire via des extrait RDF, permettrai d'attacher les items entre eux.
Autre exemple d'utilisation partiel du format, les informations de syndication définisant la frequence de lecture du flux sont fixées en dur dans le code. - L'amélioration de la publication des informations permettant la découverte automatique des flux par les navigateurs. Et oui à force de tout changer, et de permettre la génération de flux divers et varié, la publication des informations n'est plus vraiment à jour. De plus avec la multiplication des flux, je m'interroge sur l'opportunité de publier la liste de ces flux sous un format OPML (Outline Processor Markup Language).
Bref il reste encore beaucoup à faire.
Comment implanter ces améliorations
Avant de proposer des solutions clef en main, je vais détailler le fonctionnement actuel.
La génération du flux est déclenchée par l'appel au fichier rss.php, lors de cet appel les opérations suivantes sont successivement exécutées :
( Désolé, je n'ai pas fait un joli dessin en couleur, mais vous pourrez en trouver sur la cinématique de Dotclear chez Franck )
- appel de /inc/prepend.php pour le chargement des classes génériques de base et de la configuration
- initialisation du cache
- Chargement des classes class.xblog, class.xblogpost, class.xblogcomment
- Analyse de l'URL
- vérification du cache
- connexion à la base de données
- création de l'objet $blog
- Génération de la liste des items :
- Si il s'agit d'un flux de commentaires
- recherche des nouveaux commentaires via $blog->getComments()
- Parcourt de ces commentaires et génération des items via $comments->getRSSItem()
- Si il ne s'agit pas d'un flux de commentaires
- recherche des nouveaux articles via $blog->getLastNews()
- Parcourt de ces articles et génération des items via $news->getRSSSeq()
- Si il s'agit d'un flux de commentaires
- Fermeture de la connexion à la base de données
- Génération du flux encodé
Alors comment, et où, insérer les modifications souhaitées ?
Les modifications touchent plusieurs points :
-
l'analyse de l'URL.
Il est possible comme je l'ai fait en introduisant les flux par tag de modifier seulement le fichier rss.php. Faut-il introduire des tests sur les paramètres passé, pour les nettoyer et pour éventuellement renvoyer un code erreur ( « catégorie inexistante » par exemple ) ? Pour garder un cohérence avec l'ensemble du logiciel, il faut penser à adapter les fonction de publication des liens RSS dans la partie visible du site.
-
la recherche des nouveaux commentaires et des nouveaux articles.
Ces fonctions étant normalement définies dans la classe blog ( inc/classes/class.blog.php ), si il est possible de modifier ce source, cela n'est pas souhaitable pour des raisons de maintenance. Il est par contre possible de définir une classe étendant les possibilité de la classe blog en redéfinissant uniquement les deux fonctions incriminées et en héritant de l'ensemble des autres fonctions ainsi que des attributs.
-
la génération des items 'commentaire' et 'article'.
Ces fonctions font appel aux classes class.xblogpost ou class.xblogcomment. Je ferais la même suggestion que précédemment, et je préconise une surcharge de ces classes.
-
l'amélioration de la découverte des flux
Cette partie concernant la partie visible du site, je la traiterai séparément plus tard.
-
La prise en compte des plugins.
Déjà petite remarque : je pense qu'il faut faire le tri. Soit le plugin est utile à la génération du flux, dans ce cas la question ne se pose pas il faut l'intégrer. Soit le plugin n'est pas utile à la génération du flux mais introduit un nouvel usage du fichier rss.php (c'est le cas de spamplemouse, qui permet la génération de flux de type 'spam'). Et là j'aurai tendance à considérer que si l'usage n'est pas à vocation publique, ces modification n'ont pas à être prises en compte. Mais ce n'est que mon avis et certains voudrons quand même voir sur leur agrégateur la longue litanie des spam.
Donc si tous les plugins ne sont pas utiles, il faut pouvoir distinguer ceux à prendre en compte et ceux à ignorer. Ensuite il faut lister les plugins à intégrer et lancer leur script d'initialisation. Enfin utiliser les fonctions dans la génération du flux.
La suite, et le code des modifications
J'ai des idées sur ce sujet, vous n'en doutez pas, mais je les développerai plus tard.
Quelques lectures complémentaires
- http://web.resource.org/rss/1.0, les spécifications du format
- http://web.resource.org/rss/1.0/modules/syndication/, es spécifications de l'extension de syndication
- http://web.resource.org/rss/1.0/modules/dc/, un exemple avec l'extension DublinCore
- http://dublincore.org/documents/dces/, les spécifications de l'extension DublinCore
- http://dublincore.org/documents/dcmi-type-vocabulary/, le vocabulaire de l'extension DublinCore
- (edit:20060517)http://developpeur.journaldunet.com/tutoriel/xml/060511-xml-opml.shtml, Un article recent sur le format OPML on l'on pourra lire :
Le format OPML est aujourd'hui encore décrié pour sa mauvaise utilisation de XML (données dans des attributs, utilisation d'un format de date obsolète, interopérabilité douteuse, spécification informelle...), mais il est largement utilisé par les agrégateurs RSS, car c'est le seul format reconnu de partage de liste de flux. Aussi limité soit-il, il remplit son office correctement dans ce contexte.
Commentaires
Alors là, bravo pour tout ce travail de mise à plat. Ça me dépasse encore un peu (j’ai tout compris au survol, mais pas au microscope), mais l'heure tardive et la quantité de travail abattue aujourd'hui doivent y être pour quelque chose.
David LatapieLa question de la sémantique et de DC dans DC (Dublin Core dans DotClear - faut vraiment que j'aille me coucher) est très pertinente. Aussi, peut-être pourrais-t-on envisager un formulaire (du type des formulaire de comparaison des prix) avec plusieurs variables sous forme de menus déroulants. Quand toutes les options sont choisies, un code est généré, soit pour le client, soit pour le serveur.
Example de ce que ça donne au niveau de l’apparence : affiner la recherche de disques durs www.presence-pc.com/prix/...
- je voudrais lire tous les articles avec le tags Firefox chez standblog.org
- je voudrais générer un fil dynamique permettant à mes lecteur de s’abonner aux articles sur une catégorie donnée
- je voudrais obtenir tous les billets en français sur padawan.info
Même là, on en reste à de l'actualité. Mais on en reste aussi à ce qui est faisable.
Quelque chose d'intéressant mais qui me semble hors de portée du DotClear actuel :
« je dois faire des recherches sur la karstologie. Je veux tous les billets en slovène sur les mots-clés karst et karstologie »
Les deux contraintes sont ici :
-- opérateur booléen
-- hors actualité (on ne recherche pas sur les vingt derniers billets, mais sur l'ensemble du blog)
Peut-être une fonction "force deep search" ou un truc du genre. Ainsi, les billets sont toujours pensés pour les lecteurs occasionnels qui cherchent "quoi de neuf", mais si quelqu'un veut aller plus loin, il peut, sans aller à l'extrême qui est de mettre le nombre de billets à 9999 (ce qui casserait tant les agrégateurs que les serveurs, à mon sens). Il me semble que ceci peut aussi se voir en collaboration avec le greffon table des matières, ou bien les greffons de recherche. Au niveau de l'interface, je trouve que Mac OS X fait pas mal du tout, sauf pour l'absence de nested boolean
blog.empyree.org/?1722-le...
blog.empyree.org/?1261-le...
Bref, des tas d’idées que je ne serais jamais capable de mettre moi-même en œuvre. Espérons que ça en intéressera d’autres.
Pour l'instant je ne pense pas permettre la constitution libre d'une requete. Mais pourquoi pas dans le futur etendre le mode d'intégoration avec les spécifications d'extension au format RSS : Simple Sharing Extensions (SSE), ou Simple List Extension (SLE), qui sont toutes les deux sous license créative common. Mais pas tout d'un coup, pour l'instant le programme c'est :
Et puis un autre truc : optimiser la bande passante et le nombre de requetes, malgrés l'augmentation des flux.
jlauriolOK, je reste à l'écoute.
David LatapieBon billet, merci pour votre aide et notez en 1er lieu que je partage moi aussi votre point de vue. Euh, oui votre blog est sincèrement bien bon, j'aime votre style d'écriture, belle maturité.
dessin en ligne