Aug 152009
 

Pour ce premier post parlant d’XMPP, je ne vais pas faire trop compliqué, je vais me contenter de faire un petit tour des possibilités qui s’offre au gentil et innocent développeur python qui, ayant découvert le monde merveilleux d’XMPP se décide à utiliser ce joli protocole dans un de ces programmes python.

Il faut dire, que lorsque j’ai commencé à m’intéresser à ce sujet, il y a un peu plus d’un an, j’ai été surpris par le peu de librairies maintenues et proposant un peu plus que la simple paire réception/envoi de message. Aujourd’hui, la situation n’a pas vraiment changé. C’est, je trouve, assez étrange, surtout que cette situation ne se retrouve pas dans d’autre langages qui ont pléthore de librairie (un seul exemple, en Java).

1- Les mortes, ou presque.

Parmi les librairies zombies, je vais en citer deux Zymb  ou jabber.py

Il semble ne plus avoir eu un seul mouvement sur leur deux sites respectifs depuis 2007 ou 2003. La doc est quasiment inexistante, les exemples de même. A ne surtout pas choisir donc, si vous voulez commencer à bidouiller avec XMPP.

2- La  librairie sans code

Sleekxmpp est une petite librairie hébergé sur google code. Je n’ai pas l’impression qu’elle bouge beaucoup au niveau du code, même si des bugs ont été commentés très récemment. Mais, il y a comme un problème. Impossible de récupérer le code source de la dite lib, le svn est vide.

3- La plus complète

Celle qui est, sans aucun doute, la plus complète, celle la version modifié de xmpppy qui est utilisée par gajim. Elle gère énormément de XEP, son développent est continue, le rêve quoi. Sauf que.. j’ai essayé de l’utiliser et le faire sans devoir utiliser tout le code de gajim, c’est un peu (voir beaucoup) mission impossible. Sans compter qu’elle existe en de multiple version (quand je l’ai testé, le support du BOSH était dans une version bien spécifique de la lib, une des branches SVN, je ne sais pas si c’est toujours le cas).

4- Les autres

Xmpppy en version originale ou pyxmp. Elles gèrent un certain nombre de XEP, pas une panacée mais un peu plus que le simple envoi/réception de message. La doc a au moins le mérite d’exister. Une doc API avec même quelques petits exemple de code. J’ai un peu utilisé Xmpppy et elle est pas mal, surtout quand on veut utiliser une librairie légère (sans être ridicule) dans un prog où le XMPP n’est pas central mais une partie, au milieu des autres.

5- Celle que j’utilise.

La librairie que j’utilise actuellement est en fait, au final, presque celle avec laquelle j’ai commencé à faire joujou avec XMPP en python. J’ai commencé en utilisant Twisted words qui est la partie consacré aux Instants Messaging (et IRC) dans Twisted. Autant dire que c’est le parent pauvre de Twisted, peu de doc, peu d’exemple (mais relativement, par rapport aux autres lib, beaucoup), aucune gestion de XEP. Le concept de twisted words xmpp était simple :
Vous avez la puissance de twisted, on vous fournit un moyen de vous connecter et de brancher des callback sur des cheminx XPATH, à vous de faire le reste. D’une simplicité magnifique.

Sauf que, même si le concept est élégant, avoir quelque XEP de gérer, out of the box, c’est un peu mieux, quand on veut juste utiliser le XMPP et pas devenir développeur de lib XMPP.

C’est pour cela que j’utilise Wokkel, une surcouche à Twisted words qui gèrent quelques XEP (dont pubsub). J’ai ainsi quelques XEP (même si je pourrais en avoir plus en essayant d’utiliser la lib de gajim) et je bénéficie de toute la puissance de Twisted.

Une particularité de Twisted (et wokkel) c’est que ce sont des librairies qui sont prévues pour développer des clients ou des serveurs. Certaines fonctionnalités sont donc gérer pour les deux cotés, que pour le coté serveur ou que pour le coté client.

Une autre particularité, qui peut être ennuyeuse, c’est que twisted se fonde sur l’utilisation de ‘reactor’ et qu’il peut parfois être un peu difficile de concilier la façon de fonctionner de twisted avec celle de l’application dans laquelle on veut l’intégrer.

  5 Responses to “Xmpp en python, petit tour des possibilités”

  1. Et tu peux pas nous brosser quelques exemples d’utilisation ? quand et comment est-ce qu’un programme python a besoin d’envoyer via XMPP un message ?
    bug report ? log ? autres ?

    • je peux et je le ferais. (c’était prévu d’ailleurs). Je met ça dans ma todo list (qui est déjà trop longue 🙂 ).

  2. Bonjour,
    Je te conseille un fork de xmppy qui porte le nom de xmppony : http://xmppony.last-exile.org
    Pour la version 0.1, l’API est la même que celle que xmpppy, mais le code a été refait sur pas mal de choses (apparemment c’est bien cracra xmpppy). Contrairement à xmpppy, elle est maintenue, et sera mise à jour.
    De plus le développeur est français, tu peux venir sur son salon personnel : last-exile@muc.last-exile.org
    Voilà, et sinon n’hésite pas à poster quelques bouts de code 😉
    Bonne continuation

Sorry, the comment form is closed at this time.