ATNF Astronomy Web Services
  Navigation  


 
 
 
 
 

Building a Python client

The quickest way of getting a client up and running is to use a scripting language which has SOAP support, such as Python or Perl. I will use Python, with the SOAPpy package for web service support. SOAPpy requires fpconst and pyXML to be installed as well.

Accessing the service directly

If you know the details of the web service (namespace, functions etc) you can access it directly in a few lines in the Python interpreter:

 phoenix-104% python Python 2.1.3 (#1, Sep  7 2002, 15:29:56)  >>> from SOAPpy import SOAPProxy >>> quanta = SOAPProxy('http://phoenix:18080', namespace='urn:atnf-aips-quanta') >>> quanta.converts('10km/h','m/s') '2.77778 m/s' >>> quanta.convert_tobase('50km/s/Mpc') '1.62039e-18 s-1' 

Accessing the service using WSDL

If you don't know the details of the web service you can access it via the publicly available WSDL file. WSDL (Web Services Description Language) describes all features of the web service necessary for a client to use it (location, methods available, namespace, etc). You can use SOAPpy to consume the WSDL file and access the methods provided.

Firstly we find out what methods are provided by the service:

 phoenix-102% python Python 2.1.3 (#1, Sep  7 2002, 15:29:56)  >>> from SOAPpy import WSDL >>> quanta = WSDL.Proxy('quanta.wsdl') >>> quanta.methods.keys() [u'list_units', u'can_convert', u'has_constant', u'list_prefixes', u'has_prefix',  u'has_unit', u'converts', u'convert_tobase', u'convertf', u'convert_table'] 

Then, say we choose to use the convert_tobase function, we can enquire about its parameters as follows:

 >>> info = quanta.methods['convert_tobase'] >>> info.inparams [<SOAPpy.wstools.WSDLTools.ParameterInfo instance at 0x836a8ac>] >>> len(info.inparams) 1 >>> info.inparams[0].name u'quantity' >>> info.inparams[0].type (u'http://www.w3.org/2001/XMLSchema', u'string') 

So it takes one parameter named quantity which is of type string.

Finally we can call the service, passing in the single string required:

 >>> quanta.convert_tobase('10km/s') '10000 m/s' 

Note that the WSDL Proxy contains all the knowledge about the service location and namespace etc, so there is no need to specify any of that information. For more detailed information see the SOAPpy documentation.

 

Webmaster
ASKAP
Public