dilluns, 30 d’abril del 2007

XML-RPC

Ja he investigat una mica sobre com fer anar el XML-RPC sobre php i python.


Primer de tot farem una mica d'introducció de que és el XML-RPC, com que tampoc és una cosa molt difícil d'entendre el millor que podeu fer és anar a la següent web i llegir una mica.

Anem a la xixa, sobre php farem ús de la llibreria xml-rpc que inclou php5. Aquesta llibreria es basa en una de C, per a més informació podeu consultar la seva web.

He fet un petit exemple de com seria un servidor/client de xml-rpc, en php tindria aquesta pinta:

server.php


function coursesList($method, $params) {
//params[0]
$reply=array("CURS1","CURS2","CURS3","CURS4");
return $reply;
}

$server = xmlrpc_server_create();
xmlrpc_server_register_method($server, "coursesList", "coursesList");

$request = $HTTP_RAW_POST_DATA;

$options = array('output_type' => 'xml',
'verbosity' => 'pretty',
'escaping' => array('markup', 'non-ascii', 'non-print'),
'version' => 'xmlrpc',
'encoding' => 'utf-8');
xmlrpc_server_call_method($server, $request, $response, $options);
if ($response = xmlrpc_server_call_method($server, $request, $response, $options)){
header('Content-Type: text/xml');
echo $response;
}
xmlrpc_server_destroy($server);
?>


client.php



function do_call($host, $port, $request, $path, $agent) {
$fp = fsockopen($host, $port, $errno, $errstr);
$query = "POST ".$path." HTTP/1.0\n User_Agent: ".$agent."\nHost: ".$host."\nContent-Type: text/xml\nContent-Length: ".strlen($request)."\n\n".$request."\n";

if (!fputs($fp, $query, strlen($query))) {
$errstr = "Write error";
return 0;
}

$contents = '';
while (!feof($fp)) {
$contents .= fgets($fp);
}

fclose($fp);
return $contents;
}
$host = 'kuduk.no-ip.org';
$port = 80;
$path = '/xml-rpc/server.php';
$agent = 'OOwiki';
$request = xmlrpc_encode_request('coursesList', 'egg2');
$response = do_call($host, $port, $request, $path, $agent);
$xml=(substr($response, strpos($response, "\r\n\r\n")+4));
$result = xmlrpc_decode ($xml,'utf-8');
print_r($result);
?>
El que faria el client és fer una crida al servidor per a que retornes una llista de cursos ( a falta de tenir la nova API feta doncs ho hardcodejo com un campió) i el client rep la resposta i la transforma en un variable de php.

Ara bé, el client del servidor xml-rpc haurà de ser en python, és per això que també he hagut de cercar informació de com programar xml-rpc sobre pyhton. El resultat ha estat el següent: hi ha una llibreria que també ens facilita molt les coses.

I evidentment el codi del client és una delícia!

client.py

import xmlrpclib

server = xmlrpclib.ServerProxy("http://kuduk.no-ip.org/xml-rpc/server.php")
courses = server.coursesList()
print courses

Conclusió, ara falta que la API estigui enllestida i mirar de si funciona la xmlrpclib amb el pyuno d'OpenOffice.

Aviam amb quins problemes ens trobarem......

Etiquetes de comentaris: ,

0 comentaris:

Publica un comentari a l'entrada

Subscriure's a Comentaris del missatge [Atom]

<< Inici