lundi 24 septembre 2007
Invoquer le webservice XML/RPC de Dotclear avec Flex
Actionscript/Flash/Flex - Lien permanent
Voici un petit tutorial rapide pour apprendre à communiquer avec un webservice XML/RPC en Actionscript 3.
XML/RPC est un protocole utilisé notamment par les principales plate-formes de blog pour permettre d'administrer ceux-ci sans devoir se connecter à l'interface d'administration. Nous allons justement dans l'exemple suivant nous connecter au webservice fourni par Dotclear pour afficher la liste des derniers billets.
Dotclear implémente les principales API de blog, à savoir blogger, Movable Type et MetaWeblog. Nous allons donc pouvoir invoquer les méthodes fournies par ces 3 API. Pour info ce même exemple peut servir pour les autres plate-formes de blog comme Wordpress, qui implémente également ces API. J'ai choisi Dotclear uniquement parce que c'est ce que j'utilise :)
Avant de commencer, pensez à activer l'interface XML/RPC de votre blog dans l'interface d'administration. Pour Dotclear cela se situe dans les paramètres du blog.
Création du projet
Coté client, la librairie qui va nous simplifier le travail s'appelle As3 RPC lib, disponible sur Google Code.
Après avoir crée un nouveau projet Flex, téléchargez la librairie as3 RPC lib et copiez le fichier as3-rpclib.swc dans votre dossier projet. Allez ensuite dans les propriétés du projet puis dans "Flex Build Path", onglet "Library Path", et importez le fichier SWC en cliquant sur "Add SWC...".

Utilisation de l'objet XMLRPCObject
Cette librairie nous permet de créer un objet XMLRPCObject qui appelera les fonctions du webservice avec la méthode "call()". L'url du webservice est précisée avec les propriétés endpoint et destination :
<ak33m:XMLRPCObject id="blogapi" endpoint="http://www.burnyourbrowser.net/" destination="index.php/xmlrpc/default" />
Après invocation de la méthode "call()", l'évenement ResultEvent permet de réceptionner les données directement sous forme d'objet.
Voici le code final de l'application, composée pour l'affichage d'un DataGrid et d'un texte destiné à recevoir les eventuels messages d'erreur.
L'objet XMLRPCObject est ici instancié en MXML, mais vous pouvez évidemment le faire en actionscript.
Enfin les résultats retournés sont stockés dans un ArrayCollection "bindable", ce qui nous permet de mettre à jour automatiquement le DataGrid :
<?xml version="1.0" encoding="utf-8"?>
<mx:Application
xmlns:mx="http://www.adobe.com/2006/mxml"
xmlns:ak33m="http://ak33m.com/mxml"
layout="vertical"
horizontalAlign="left"
creationComplete="init()">
<mx:Script>
<![CDATA[
import mx.rpc.events.FaultEvent;
import mx.rpc.events.ResultEvent;
import mx.collections.ArrayCollection;
private var login:String = "******";
private var password:String = "******";
[Bindable]
private var recentPosts:ArrayCollection;
private function init():void{
blogapi.call("mt.getRecentPostTitles","1",login,password,10);
blogapi.addEventListener(ResultEvent.RESULT, showRecentPosts);
blogapi.addEventListener(FaultEvent.FAULT, faultHandler);
}
private function showRecentPosts(e:ResultEvent):void{
recentPosts = new ArrayCollection(e.result as Array);
}
private function faultHandler(e:FaultEvent):void{
errorMessage.text = e.fault.faultCode+": "+e.fault.faultString;
}
]]>
</mx:Script>
<ak33m:XMLRPCObject id="blogapi" endpoint="http://www.burnyourbrowser.net/" destination="index.php/xmlrpc/default" />
<mx:DataGrid dataProvider="{recentPosts}" width="100%">
<mx:columns>
<mx:DataGridColumn headerText="ID" dataField="postid" width="30"/>
<mx:DataGridColumn headerText="Title" dataField="title"/>
<mx:DataGridColumn headerText="Date" dataField="dateCreated"/>
</mx:columns>
</mx:DataGrid>
<mx:Text id="errorMessage"/>
</mx:Application>
Et voilà le résultat :

Je vous laisse continuer, en vous aidant de la documentation des API, pour vous créer votre propre interface de gestion de blog en Flex :)
Commentaires
Merci pour l'article.
Existe-t'il une librairie AS3 pour se connecter à un web service SOAP ?
lulu.
Hello,
il existe l'objet WebService pour ça, mais sous Flex uniquement, sinon tu peux aussi voir du coté d'AMFPHP pour communiquer directement avec des classes PHP : http://www.amfphp.org/
Ok.
Merci pour ta réponse. Je vais compiler mon projet avec Flex et utiliser les classes natives.
Toujours en tentative de connexion : je ne comprend pas à quoi correspond la propriété destination de XMLRPCObject.
Je viens d'installer un DotClear sur mon serveur et j'avoue ne pas trop savoir à quoi me référer.
Merci de ton aide.
la propriété destination est l'url relative du webservice XML/RPC, dans mon exemple c'est celle de Dotclear 2, pour un Dotclear 1 c'est "ecrire/xmlrpc.php" il me semble.
Où la trouves-tu cette URL ? Dans la doc de DotClear, je ne crois pas qu'il en soit fait mention.