Ajouter à DotClear des fonctionnalités WebServices
Par Ludovic Toinel le lundi 28 mars 2005, 01:56 - DotClear - Lien permanent
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é que d'un seul fichier, il 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 :
///////////////////////////////////////////////////////////////////////////
// WebService
// 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 tutorial 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 = "http://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 
Dernières News
Nuage de Tags
Archives
RSS des articles
Souscrire par email



Commentaires
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...
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.
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 !!!!
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.
- ...
Ha ouais, pas bete tout ca !!!
ca avance sinon ?
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.
C'est vrai,le J2ME ToolKit dispose d'un émulateur de portable.