Help to compare PHP/Python with XML-RPC library

Anything beyond the basics in using the LiveCode language. Share your handlers, functions and magic here.

Moderators: FourthWorld, heatherlaine, Klaus, kevinmiller, robinmiller

Post Reply
bangkok
VIP Livecode Opensource Backer
VIP Livecode Opensource Backer
Posts: 937
Joined: Fri Aug 15, 2008 7:15 am

Help to compare PHP/Python with XML-RPC library

Post by bangkok » Tue Aug 27, 2013 11:06 am

I've got a PHP and a Python script (both working fine) to call a webservice.

I've managed (to some extend) to emulate those scripts with a LiveCode script with the XML-RPC library (everything is fine the "login" method).

But i have an error with another method that involves arrays and/or "struct" [it seemst that revXMLRPC_AddParam doesn't support "struct"]

Is there any PHP or Python guru that could help me to find a solution ?

The XML-RPC library is a wild beast !

************** PHP SCRIPT

Code: Select all

<?
include('xmlrpc.inc');

$arrayVal = array(
'name'=>new xmlrpcval('My Partner', "string") ,
'lang'=>new xmlrpcval('en_US' , "string")
);

$client = new xmlrpc_client("http://localhost:8069/xmlrpc/object");

$msg = new xmlrpcmsg('execute');
$msg->addParam(new xmlrpcval("mydb", "string"));
$msg->addParam(new xmlrpcval("1", "int"));
$msg->addParam(new xmlrpcval("admin", "string"));
$msg->addParam(new xmlrpcval("res.partner", "string"));
$msg->addParam(new xmlrpcval("create", "string"));
$msg->addParam(new xmlrpcval($arrayVal, "struct"));

$resp = $client->send($msg);

if ($resp->faultCode())

    echo 'Error: '.$resp->faultString();

else

    echo 'Partner '.$resp->value()->scalarval().' created !';

?>
****************** PYTHON SCRIPT

Code: Select all

import xmlrpclib

sock = xmlrpclib.ServerProxy('http://localhost:8069/xmlrpc/object')
uid = 1
pwd = 'admin'
dbname='mydb'

partner = {
    'name': 'My Partner',
    'lang': 'en_US',
}

partner_id = sock.execute(dbname, uid, pwd, 'res.partner', 'create', partner)
**************** LIVECODE VERSION

Code: Select all

   put "execute" into method

  put "mydb" into dbname
 put "admin" into pwd

   put "name" into partner[1] [1]
   put "my Partner" into partner[1] [2]
   
   put "lang" into partner[2] [1]
   put "en_US" into partner[2] [2]
   
put revXMLRPC_CreateRequest("localhost","8069","xmlrpc/object","http") into rpc_id -- Create the initial connection.
   
   revXMLRPC_AddParam rpc_id, "string", dbname
   revXMLRPC_AddParam rpc_id, "int", 1
   revXMLRPC_AddParam rpc_id, "string", pwd
   revXMLRPC_AddParam rpc_id, "string", "res.partner"
   revXMLRPC_AddParam rpc_id, "string", "create"
   
   revXMLRPC_AddParam rpc_id, "array:string", partner[1]
   revXMLRPC_AddParam rpc_id, "array:string", partner[2]
   
   revXMLRPC_SetMethod rpc_id, method -- Specify the method to call.
   
   put revXMLRPC_Execute(rpc_id) into result_id -- Submit & get the results.

bangkok
VIP Livecode Opensource Backer
VIP Livecode Opensource Backer
Posts: 937
Joined: Fri Aug 15, 2008 7:15 am

Re: Help to compare PHP/Python with XML-RPC library

Post by bangkok » Tue Aug 27, 2013 11:24 am

Holly molly. I was desesperate when i created this thread (after several hours of hallucinated work).

However (you know this feeling)... I found the light... a few minutes later !
:D :D

My mistake was to stick to the "array" type for revXMLRPC_AddParam.

Eventhough in PHP I could see it was "struct" (I'm a newbie with XML and XMLRPC)

So... the solution is to use the "xml" type. I found it by browsing the XMLRPC official specs.
http://xmlrpc.scripting.com/spec.html

So in my example, here is the solution :

Code: Select all

 
 put "execute" into method
  put "mydb" into dbname
 put "admin" into pwd

 put "<struct><member><name>name</name><value><string>My Partner</string></value></member>" into tXML
   put "<member><name>lang</name><value><string>en_US</string></value></member>" after tXML
   put "</struct>"after tXML

 put "execute" into method
   put "xmlrpc/object" into path
   
put revXMLRPC_CreateRequest("localhost","8069","xmlrpc/object","http") into rpc_id -- Create the initial connection.
   
   revXMLRPC_AddParam rpc_id, "string", dbName
   revXMLRPC_AddParam rpc_id, "int", 1
   revXMLRPC_AddParam rpc_id, "string", pwd
   revXMLRPC_AddParam rpc_id, "string", "res.partner"
   revXMLRPC_AddParam rpc_id, "string", "create"
   revXMLRPC_AddParam rpc_id, "xml", tXML

   revXMLRPC_SetMethod rpc_id, method -- Specify the method to call.
   
   put revXMLRPC_Execute(rpc_id) into result_id -- Submit & get the results.
Anyway. It's a good way to see that using the XML-RPC library in LiveCode is much more verbose/complicated than in Python.

razvan
Posts: 19
Joined: Tue Feb 24, 2015 10:16 am

Re: Help to compare PHP/Python with XML-RPC library

Post by razvan » Fri Aug 12, 2016 7:46 am

Did you try this method on mobile?
Is it working properly?
Thanks,
Razvan.

Post Reply

Return to “Talking LiveCode”