Tout le monde écrit un blog aujourd'hui. L'interface Web des moteurs de blogs autorise une mise à jour simple, même par des personnes non informaticiennes. Mais une mise à jour par un programme est-elle possible ? Aujourd'hui, la plupart des moteurs de blogs le permettent, en général avec XML-RPC.
Tout le monde, et son chien, écrit un
Il y a de nombreuses raisons pour une mise à jour par un programme
et non pas par un humain. Par exemple, on peut souhaiter publier ses
nouveaux signets
En effet, si les durs de dur peuvent toujours écrire un tel
programme en allant directement modifier la base de données
Notons que le catalogue des API ne s'arrête pas là. Pour tenter de
normaliser ce paysage, l'
Laquelle choisir ? Elles sont assez proches et il n'existe pas de
raison radicale d'en prendre une ou l'autre. Le moteur de blog que j'ai choisi (pas pour
ce blog ci mais pour tous les
autres dont je m'occupe),
Les spécifications des trois API sont assez floues (c'était une des
motivations pour la création de
Commençons par créer un nouvel article sur le blog. Nous
utiliserons le langage
#!/usr/bin/python
import xmlrpclib, sys, os, socket
server = "http://blog.example.com/rpc/"
handle = xmlrpclib.ServerProxy (server, verbose=debug)
data = {'title': "Test XML-RPC",
'description': "Test depuis *Python* %s" % sys.version,
'category': []}
# Le premier paramètre est la section TextPattern, "article" par défaut.
reply = handle.metaWeblog.newPost("article", "bortzmeyer", "tropsecret",
data, True)
print "Created, id = %s" % reply
L'exécution de ce programme affiche :
% python metaWeblog-newPost.py
Created, id = 17
Les astérisques de part et d'autre de « Python » seront interprétés
par le
On peut ensuite regarder l'article
Si je veux maintenant récupérer des informations sur un article,
l'API metaWeblog le permet également :
handle = xmlrpclib.ServerProxy (server, verbose=debug)
# Warning: the postid must be a *string*
reply = handle.metaWeblog.getPost("17", "bortzmeyer", "tropsecret")
print reply
qui donne (c'est l'affichage par défaut d'une structure Python, on
aurait évidemment pu la formater plus joliment) :
,
'link': 'http://blog.example.com/article/17/test-xml-rpc',
'mt_allow_comments': 1,
'postid': '17', 'categories': ['', '']}
]]>
On voit que l'API permet de récupérer les métadonnées, comme la date
de création et le contenu (le champ
Cette API n'a pas de notion de
Si j'avais voulu utiliser l'API Blogger, le code aurait été très
proche (on notera que je n'ai pas trouvé de moyen de définir le titre
de l'article avec Blogger, le contenu étant une seule chaîne de
caractères ) :
server = "http://blog.example.com/rpc/"
handle = xmlrpclib.ServerProxy (server, verbose=debug)
content = "Test depuis *Python*"
reply = handle.blogger.newPost("", "article", "bortzmeyer", "tropsecret",
content, True)
print "Created, id = %s" % reply
Traditionnellement, les méthodes XML-RPC sont préfixées par le nom de
l'application, ici
L'usage de cette API n'est évidemment pas limité au cas où on a
installé son propre moteur de blog. Si, par exemple, je suis client de
Continuons avec l'interface metaWeblog, voici une création
d'article (on a un peu amélioré les programmes précédents en traitant
les exceptions) :
Ce n'est qu'un test sans réelle valeur.
try:
result = server.blogger.getRecentPosts("", "1",
"AR41-GANDI", "tropsecret",
15)
for post in result:
print "At %s by %s: id=%s" % (post["dateCreated"], post["userid"],
post["postid"])
L'intérêt de XML-RPC est qu'il existe des mise en œuvre de ce
protocole dans à peu près tous les langages de programmation, y
compris