さて、SUDS はかなりの魔法を行います。
はsuds.client.Client
WSDL ファイルから作成されます。
client = suds.client.Client("http://mssoapinterop.org/asmx/simple.asmx?WSDL")
WSDL をダウンロードし、 に定義を作成しますclient.wsdl
。SUDS を使用してメソッドを呼び出すと、client.service.<method>
実際には、その解釈された WSDL に対して舞台裏で非常に多くの再帰的な解決マジックが実行されます。メソッドのパラメーターと型を発見するには、このオブジェクトをイントロスペクトする必要があります。
例えば:
for method in client.wsdl.services[0].ports[0].methods.values():
print '%s(%s)' % (method.name, ', '.join('%s: %s' % (part.type, part.name) for part in method.soap.input.body.parts))
これにより、次のように出力されます。
echoInteger((u'int', http://www.w3.org/2001/XMLSchema): inputInteger)
echoFloatArray((u'ArrayOfFloat', http://soapinterop.org/): inputFloatArray)
echoVoid()
echoDecimal((u'decimal', http://www.w3.org/2001/XMLSchema): inputDecimal)
echoStructArray((u'ArrayOfSOAPStruct', http://soapinterop.org/xsd): inputStructArray)
echoIntegerArray((u'ArrayOfInt', http://soapinterop.org/): inputIntegerArray)
echoBase64((u'base64Binary', http://www.w3.org/2001/XMLSchema): inputBase64)
echoHexBinary((u'hexBinary', http://www.w3.org/2001/XMLSchema): inputHexBinary)
echoBoolean((u'boolean', http://www.w3.org/2001/XMLSchema): inputBoolean)
echoStringArray((u'ArrayOfString', http://soapinterop.org/): inputStringArray)
echoStruct((u'SOAPStruct', http://soapinterop.org/xsd): inputStruct)
echoDate((u'dateTime', http://www.w3.org/2001/XMLSchema): inputDate)
echoFloat((u'float', http://www.w3.org/2001/XMLSchema): inputFloat)
echoString((u'string', http://www.w3.org/2001/XMLSchema): inputString)
したがって、パーツの型タプルの最初の要素は、おそらくあなたが求めているものです:
>>> client.factory.create(u'ArrayOfInt')
(ArrayOfInt){
_arrayType = ""
_offset = ""
_id = ""
_href = ""
_arrayType = ""
}
アップデート:
気象サービスの場合、「パラメーター」は次の部分ではelement
ないようtype
です。
>>> client = suds.client.Client('http://www.webservicex.net/WeatherForecast.asmx?WSDL')
>>> client.wsdl.services[0].ports[0].methods.values()[0].soap.input.body.parts[0].element
(u'GetWeatherByZipCode', http://www.webservicex.net)
>>> client.factory.create(u'GetWeatherByZipCode')
(GetWeatherByZipCode){
ZipCode = None
}
しかし、これはメソッド呼び出しのパラメーターに魔法のように組み込まれています (a la client.service.GetWeatherByZipCode("12345")
. IIRC これは SOAP RPC バインディング スタイルですか? 始めるのに十分な情報がここにあると思います。ヒント: Python コマンド ライン インターフェイスはあなたの友達です!