Hi,
By googling the Web for an XML-RPC implementation in Common Lisp, I
found S-XML-RPC and other one for Corman Lisp. I'm glad that S-XML-RPC
is now part of Common-Lisp.net.
By the way, looking at the Corman Lisp API for XML-RPC, I found
interesting that it have the ability to define a standard function
embedding an XML-RPC call. How about implementing this kind of thing
in S-XML-RPC? I wrote the following lines of code:
(defmacro define-xmlrpc-method (name args &key url method)
`(defun ,name ,args
(xml-rpc-call (encode-xml-rpc-call ,method ,@args)
:url ,(puri:uri-path url)
:host ,(puri:uri-host url)
:port ,(cond ((puri:uri-port url)) (t 80)))))
(define-xmlrpc-method get-state-name (state)
:url #u"http://betty.userland.com/RPC2"
:method "examples.getStateName")
(define-xmlrpc-method get-time ()
:url #u"http://time.xmlrpc.com/RPC2"
:method "currentTime.getCurrentTime")
? (get-state-name 41)
"South Dakota"
? (get-time)
#<XML-RPC-TIME 20040617T10:47:31>
I rely on the great PURI package to parse URL. Quite straightforward.
Of course, we should also wrap and unwrap some type convertions not to
see anything about the XML-RPC types. I guess the function should also
accept HASHTABLEs to be converted in XML-RPC structs.
What do you think?
--
Frederic Brunel