Il est possible d'ajouter à DotClear une interface Webservices pour accéder aux fonctionnalités principales de la classe Blog. Ceci dans le but de pouvoir piloter son blog DotClear depuis un téléphone portable supportant le J2ME.

Pour cela je vais utiliser la librairie Php NuSoap, facile d'utilisation et simple à mettre en place. NuPhp est constituée que d'un seul fichier, cette librairie est donc très facile d'utilisation et d'intégration.

Après avoir téléchargé ce fichier, vous pouvez créer un nouveau répertoire dans le répertoire 'ecrire/tools/' dans le répertoire de DotClear, celui-ci va accueillir notre WebService de test.

Commençons le codage du WebService 'test.php':

// Insert the NuSOAP code
 require_once("nusoap.php");
 
 // Insert dotclear classes
 require_once("../../../inc/prepend.php");
 require_once("../../../layout/class.xblog.php");
 
 
 // Connexion à la base de données
 $con = new connection(DB_USER,DB_PASS,DB_HOST,DB_DBASE);
 
 if($con->error()) {
 	header('Content-Type: text/plain');
 	echo 'MySQL Error : '.$con->error();
 	exit;
 }
 
 // Instanciation de l'objet Blog
 $blog = new xblog($con,DB_PREFIX,1,dc_encoding);

Je reconnais que les Includes ne sont pas vraiment propres :) .... Maintenant que nous avons une instance de la classe Blog, nous pouvons donc l'exploiter :

// Register the method to expose
 $server->register('statusPost',               // method name
     array('id' => 'xsd:string'),          	  // input parameters
     array('return' => 'xsd:boolean'), 	       // output parameters
     'urn:dotclearwsdl',                           // namespace
     'urn:dotclearwsdl#statusPost',            // soapaction
     'rpc',                                             // style
     'encoded',                                      // use
     'Return the status of a post'             // documentation
 );
 
 // This is the method
 function statusPost($id) {
 
     return $blog->statusPost($id);
 }
 
 // This returns the result
 $server->service($HTTP_RAW_POST_DATA);
 
 // Déconnexion à la base de données
 $con->close();

Voilà, pour la partie serveur.

Maintenant pour tester, il vous suffit de vous rendre sur l'URL :

http://votreblog/ecrire/tools/votrerepertoire/test.php

Vous devriez avoir une belle fenêtre, vous proposant à la fois d'obtenir la signature du service, mais aussi un lien qui vous propose de visualiser le WSDL.

Désormais, des clients peuvent obtenir le statut d'un post à partir de son Id. Il est vrai que ce n'est pas vraiment utile, des fonctions comme l'ajout d'un post, et la visualisation des derniers commentaires seraient beaucoup plus pratique, mais cependant, beaucoup plus complexes à comprendre.

Maintenant que nous avons la partie Serveur du WebService, nous pouvons nous attaquer à la partie Cliente. Nous allons nous amuser à coder un client en J2ME. Un très bon tutoriel est présenté ici.

Je vais donc le reprendre et l'adapter à notre exemple :

package org.geeek.wsblog.dotclear;
 
 import javax.microedition.lcdui.Command;
 import javax.microedition.lcdui.CommandListener;
 import javax.microedition.lcdui.Display;
 import javax.microedition.lcdui.Displayable;
 import javax.microedition.lcdui.TextBox;
 import javax.microedition.midlet.MIDlet;
 
 import org.ksoap.SoapObject;
 import org.ksoap.transport.HttpTransport;
 
 public class DotClear extends MIDlet implements CommandListener {
 
     private Command exitCommand; // The exit command
     private Display display;    // The display for this MIDlet
 
     // URL for PHP / NuSOAP
     private String phpUrl = "https://www.geeek.org/ecrire/tools/wsblog/test.php";
 
     public DotClear() {
     	
         display = Display.getDisplay(this);
         exitCommand = new Command("Exit", Command.SCREEN, 2);
 
         try {
 
           // Create new Soap Client, specifiy the Service and method to call
           SoapObject client = new SoapObject ( "urn:getLastNews", "getLastNews");
 
           // Add the requied parameter,
           // if you look at either the PHP or Java server side code
           // one input parameter is required
           client.addProperty("name","J2MEBuilder.com");
 
           // Make the Method Call
           HttpTransport ht = new HttpTransport(phpUrl,"getLastNews");
 
           // Display the PHP NuSOAP result
           System.out.println("RESULT: " + ht.call(client));
 
 
         } catch (Exception ex) {
           System.out.println(ex);
           ex.printStackTrace();
         }
     }
 
     public void startApp() {
         TextBox t = new TextBox("WebService Client MIDlet",
                                 "See Command Console for results",
                                 256,
                                 0);
         t.addCommand(exitCommand);
         t.setCommandListener(this);
         display.setCurrent(t);
     }
 
     public void commandAction(Command c, Displayable s) {
       if (c == exitCommand) {
          destroyApp(false);
          notifyDestroyed();
       }
     }
 
     public void pauseApp() { }
     public void destroyApp(boolean unconditional) { }
 }

Pour que le client puisse être compilé il vous faut KSoap, le J2ME Toolkit, et pour vous faciliter le développement du client : Eclipse et son plugin pour J2ME.

Je n'ai pas encore fini mes tests, mais tout ceci devrait fonctionner rapidement. Et j'espère rapidement fournir un plugin et peut être un client J2ME si j'ai un peu de temps.

En attendant, il est possible d'utiliser ce plugin pour poster des billets depuis son mobile :)

1. Le , 21:41 par JS
d41d8cd98f00b204e9800998ecf8427e

Terrible !!!
Bonne idée d'utiliser les webservices, mais je ne vois pas ce que ca apporte de plus...

Ajouter un billet ne demande pas de traitement de la part du client... alors pourquoi ?

Bon, c'est clair que technologiquement c'est plutot coolos...

2. Le , 09:01 par Ludovic
d41d8cd98f00b204e9800998ecf8427e

C'est vrai que cela n'apporte pas grand chose de plus, juste :

* Une économie de bande passante (l'IHM est en dur dans le portable).
* Possibilité d'envoyer automatiquement les photos prises à partir du téléphone.


3. Le , 10:58 par JS
d41d8cd98f00b204e9800998ecf8427e

Ouais, c'est vrai... du ne renvoi que les infos utiles...

Han ! tu peux browser les fichiers de ton mobile ??? Là oui, c'est un vrai plus...

zut, mon portable supporte pas java !!!!

4. Le , 19:49 par Ludovic
d41d8cd98f00b204e9800998ecf8427e

Le mien non plus :)

Le J2ME ToolKit dispose d'un émulateur de portable.

En ce qui concerne les WebServices, on pourrait imaginer:

- L'échange comptes de rédacteurs entre blogs.
- La diffusion de Billet sur plusieurs blogs en même temps.
- ...




5. Le , 18:07 par JS
d41d8cd98f00b204e9800998ecf8427e

Ha ouais, pas bete tout ca !!!
ca avance sinon ?

6. Le , 21:03 par Ludovic
d41d8cd98f00b204e9800998ecf8427e

Je vais commencer à déposer les sources sur un CVS.

Je vais déja développer la partie WebService.. Ensuite je vais changer de portable .. et enfin je vais voir pour le client J2ME.

7. Le , 13:09 par tiger
d41d8cd98f00b204e9800998ecf8427e

C'est vrai,le J2ME ToolKit dispose d'un émulateur de portable.

8. Le , 18:46 par arrangeurs
3d1ba02d8ad31f0c1fd9e520699370c0

mercià Ludovic pour l'img ;)

Ajouter un commentaire

Le code HTML est affiché comme du texte et les adresses web sont automatiquement transformées.