{"id":131,"date":"2009-08-15T23:42:09","date_gmt":"2009-08-15T21:42:09","guid":{"rendered":"http:\/\/j-mad.com\/blog\/?p=131"},"modified":"2009-10-04T22:05:58","modified_gmt":"2009-10-04T20:05:58","slug":"xmpp-en-python-petit-tour-des-possibilites","status":"publish","type":"post","link":"https:\/\/j-mad.com\/blog\/2009\/08\/15\/xmpp-en-python-petit-tour-des-possibilites\/","title":{"rendered":"Xmpp en python, petit tour des possibilit\u00e9s"},"content":{"rendered":"<p>Pour ce premier post parlant d&#8217;XMPP, je ne vais pas faire trop compliqu\u00e9, je vais me contenter de faire un petit tour des possibilit\u00e9s qui s&#8217;offre au gentil et innocent d\u00e9veloppeur python qui, ayant d\u00e9couvert le monde merveilleux d&#8217;XMPP se d\u00e9cide \u00e0 utiliser ce joli protocole dans un de ces programmes python.<\/p>\n<p>Il faut dire, que lorsque j&#8217;ai commenc\u00e9 \u00e0 m&#8217;int\u00e9resser \u00e0 ce sujet, il y a un peu plus d&#8217;un an, j&#8217;ai \u00e9t\u00e9 surpris par le peu de librairies maintenues et proposant un peu plus que la simple paire r\u00e9ception\/envoi de message. Aujourd&#8217;hui, la situation n&#8217;a pas vraiment chang\u00e9. C&#8217;est, je trouve, assez \u00e9trange, surtout que cette situation ne se retrouve pas dans d&#8217;autre langages qui ont pl\u00e9thore de librairie (un seul exemple, en Java).<\/p>\n<h1>1- Les mortes, ou presque.<\/h1>\n<p>Parmi les librairies zombies, je vais en citer deux Zymb\u00a0 ou jabber.py<\/p>\n<p>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\u00eame. A ne surtout pas choisir donc, si vous voulez commencer \u00e0 bidouiller avec XMPP.<\/p>\n<h1>2- La\u00a0 librairie sans code<\/h1>\n<p>Sleekxmpp est une petite librairie h\u00e9berg\u00e9 sur google code. Je n&#8217;ai pas l&#8217;impression qu&#8217;elle bouge beaucoup au niveau du code, m\u00eame si des bugs ont \u00e9t\u00e9 comment\u00e9s tr\u00e8s r\u00e9cemment. Mais, il y a comme un probl\u00e8me. Impossible de r\u00e9cup\u00e9rer le code source de la dite lib, le svn est vide.<\/p>\n<h1>3- La plus compl\u00e8te<\/h1>\n<p>Celle qui est, sans aucun doute, la plus compl\u00e8te, celle la version modifi\u00e9 de xmpppy qui est utilis\u00e9e par gajim. Elle g\u00e8re \u00e9norm\u00e9ment de XEP, son d\u00e9veloppent est continue, le r\u00eave quoi. Sauf que.. j&#8217;ai essay\u00e9 de l&#8217;utiliser et le faire sans devoir utiliser tout le code de gajim, c&#8217;est un peu (voir beaucoup) mission impossible. Sans compter qu&#8217;elle existe en de multiple version (quand je l&#8217;ai test\u00e9, le support du BOSH \u00e9tait dans une version bien sp\u00e9cifique de la lib, une des branches SVN, je ne sais pas si c&#8217;est toujours le cas).<\/p>\n<h1>4- Les autres<\/h1>\n<p>Xmpppy en version originale ou pyxmp. Elles g\u00e8rent un certain nombre de XEP, pas une panac\u00e9e mais un peu plus que le simple envoi\/r\u00e9ception de message. La doc a au moins le m\u00e9rite d&#8217;exister. Une doc API avec m\u00eame quelques petits exemple de code. J&#8217;ai un peu utilis\u00e9 Xmpppy et elle est pas mal, surtout quand on veut utiliser une librairie l\u00e9g\u00e8re (sans \u00eatre ridicule) dans un prog o\u00f9 le XMPP n&#8217;est pas central mais une partie, au milieu des autres.<\/p>\n<h1>5- Celle que j&#8217;utilise.<\/h1>\n<p>La librairie que j&#8217;utilise actuellement est en fait, au final, presque celle avec laquelle j&#8217;ai commenc\u00e9 \u00e0 faire joujou avec XMPP en python. J&#8217;ai commenc\u00e9 en utilisant Twisted words qui est la partie consacr\u00e9 aux Instants Messaging (et IRC) dans Twisted. Autant dire que c&#8217;est le parent pauvre de Twisted, peu de doc, peu d&#8217;exemple (mais relativement, par rapport aux autres lib, beaucoup), aucune gestion de XEP. Le concept de twisted words xmpp \u00e9tait simple :<br \/>\nVous avez la puissance de twisted, on vous fournit un moyen de vous connecter et de brancher des callback sur des cheminx XPATH, \u00e0 vous de faire le reste. D&#8217;une simplicit\u00e9 magnifique.<\/p>\n<p>Sauf que, m\u00eame si le concept est \u00e9l\u00e9gant, avoir quelque XEP de g\u00e9rer, out of the box, c&#8217;est un peu mieux, quand on veut juste utiliser le XMPP et pas devenir d\u00e9veloppeur de lib XMPP.<\/p>\n<p>C&#8217;est pour cela que j&#8217;utilise Wokkel, une surcouche \u00e0 Twisted words qui g\u00e8rent quelques XEP (dont pubsub). J&#8217;ai ainsi quelques XEP (m\u00eame si je pourrais en avoir plus en essayant d&#8217;utiliser la lib de gajim) et je b\u00e9n\u00e9ficie de toute la puissance de Twisted.<\/p>\n<p>Une particularit\u00e9 de Twisted (et wokkel) c&#8217;est que ce sont des librairies qui sont pr\u00e9vues pour d\u00e9velopper des clients ou des serveurs. Certaines fonctionnalit\u00e9s sont donc g\u00e9rer pour les deux cot\u00e9s, que pour le cot\u00e9 serveur ou que pour le cot\u00e9 client.<\/p>\n<p>Une autre particularit\u00e9, qui peut \u00eatre ennuyeuse, c&#8217;est que twisted se fonde sur l&#8217;utilisation de &#8216;reactor&#8217; et qu&#8217;il peut parfois \u00eatre un peu difficile de concilier la fa\u00e7on de fonctionner de twisted avec celle de l&#8217;application dans laquelle on veut l&#8217;int\u00e9grer.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Pour ce premier post parlant d&#8217;XMPP, je ne vais pas faire trop compliqu\u00e9, je vais me contenter de faire un petit tour des possibilit\u00e9s qui s&#8217;offre au gentil et innocent d\u00e9veloppeur python qui, ayant d\u00e9couvert le monde merveilleux d&#8217;XMPP se d\u00e9cide \u00e0 utiliser ce joli protocole dans un de ces programmes python. <\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[34],"tags":[98,101],"class_list":["post-131","post","type-post","status-publish","format-standard","hentry","category-xmpp","tag-python","tag-xmpp"],"aioseo_notices":[],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_shortlink":"https:\/\/wp.me\/p12cdp-27","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/j-mad.com\/blog\/wp-json\/wp\/v2\/posts\/131","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/j-mad.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/j-mad.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/j-mad.com\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/j-mad.com\/blog\/wp-json\/wp\/v2\/comments?post=131"}],"version-history":[{"count":3,"href":"https:\/\/j-mad.com\/blog\/wp-json\/wp\/v2\/posts\/131\/revisions"}],"predecessor-version":[{"id":180,"href":"https:\/\/j-mad.com\/blog\/wp-json\/wp\/v2\/posts\/131\/revisions\/180"}],"wp:attachment":[{"href":"https:\/\/j-mad.com\/blog\/wp-json\/wp\/v2\/media?parent=131"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/j-mad.com\/blog\/wp-json\/wp\/v2\/categories?post=131"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/j-mad.com\/blog\/wp-json\/wp\/v2\/tags?post=131"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}