jeudi 12 novembre 2009

Présentation de PubSubHubbub

J'ai récemment découvert PubSubHubbub : un protocole simple et redoutable permettant d'apporter du temps réel à la publication de flux RSS / Atom.

Brad Fitzpatrick, l'un des concepteurs de ce protocole, propose une description assez imagée du principe, dont voici l'adaptation en français :

Imaginez vos enfants à l'arrière de la voiture en train de demander sans cesse "Quand est-ce qu'on arrive ? Quand est-ce qu'on arrive ?". La ferme les enfants ! je vous dirais quand on y sera !

Ce phénomène, on l'appelle Hubbub en anglais (a confused noise of many voices). Sauf que dans notre cas, les enfants, ce sont en fait des sites Web en train de se parler. La façon dont les sites se parlent de nos jours ressemble à ça : "Du nouveau ? Non. Du nouveau ? Non. Du nouveau ? Non. Du nouveau ? Non".

PubSubHubbub corrige ce problème : les sites se parlent uniquement lorsqu'il y a du changement.

Dans ce système, on peut distinguer trois type d'acteurs :
  • Les "publishers" : ils publient du contenu (sous forme de flux Atom ou RSS)
  • Les "subscriber" : ils s'abonnent à des flux et sont informés à chaque mise à jour (sous forme de web hooks)
  • Les "hub" : c'est l'intermédiaire, qui s'occupe de transmettre aux subscriber les notifications de mise à jour des flux auxquels ils sont abonnés

Comme je le disais en introduction, cela permet d'ajouter une touche de temps réel à ce monde de flux ! Voyons voir maintenant comment cela fonctionne dans la vraie vie ;-)

On va commencer par une bonne nouvelle : vous n'êtes pas obligés d'héberger votre propre Hub pour jouer avec PubSubHubbub. Voici une liste de hubs publiques. Les deux plus populaires sont :

En tant que publisher, c'est extrêmement simple.
  1. Selectionnez un ou plusieurs hubs auxquels vous allez déléguer la distribution de votre flux. Je vous conseille d'en prendre plusieurs, en cas d'indisponibilité de l'un d'entre eux.
  2. Indiquez dans votre flux RSS ou Atom l'url de votre hub. Si vous avez un flux RSS, modifiez le de cette façon pour ajouter le namespace atom et un element <atom:link> :
    <?xml version="1.0"?>
    <rss xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
    <atom:link rel="hub" href="http://pubsubhubbub.appspot.com"/>
    ...
    </channel>
    </rss>
    
    Si vous avez un flux Atom, il suffit de rajouter un element link a votre feed :
    <?xml version="1.0" encoding="utf-8"?>
    <feed xmlns="http://www.w3.org/2005/Atom">
    <link rel="hub" href="http://myhub.example.com/endpoint" />
    ...
    </feed>
    
  3. A chaque modification de votre flux, informez votre hub avec la librairie PubSubHubbub de votre language préféré. Voyons à quel point c'est difficile en PHP :
    $p = new Publisher('http://superfeedr.com/hubbub');
    $p->publish_update('http://example.com/url-de-mon-flux.rss');
    

Pour la partie subscriber que je n'ai pas encore abordé, je vous invite à consulter un exemple d'implémentation en PHP sur le repository de PubSubHubbub. Pour cette partie, méfiez vous car ce n'est pas si simple qu'il n'y parait : touts souscription à un flux possède une date d'expiration. Il faut relancer une requête de souscription avant expiration afin de renouveller son abonnement. Je vous invite à consulter les spécifications du protocole pour plus de détails.

Prochainement (dans moins d'un an cette fois-ci, promis !) j'aborderais un problème que j'ai rencontré avec PHP pour mettre ce système en place.

Edit (11/02/2009) : Bonne nouvelle : Google Buzz, le nouveau service de Google, est un subscriber PubSubHubbub ! Si vos flux sont publiés sur un hub, leur contenu pourra donc apparaitre instantanément dans Google Buzz !

1 commentaire:

Patrick KIRI a dit…

Bien Bien, merci pour le tuyau!