用python调用webservice接口,并对ArrayOfString进行处理

Posted on 2020-07-02 15:15  橙子j  阅读(1401)  评论(0编辑  收藏  举报

一、首先写一个ArrayOfString转化成list的函数

这里主要针对比较简单的webservice,没有嵌套的

参考:https://www.pianshen.com/article/2473663801/

先将ArrayOfString转化成dict字典,key是string,value是一长串的我们需要的信息

然后再把dict字典转化成list列表

 

这里使用到suds库中的sudsobject,sudsobject中有个函数是asdict可以将Array Of String处理成dict或list

 

from suds import sudsobject

def get_ArrayOfString_value(array, info):
    ''' webserveice接口调用会返回ArrayOfString,将其转化为python可以使用的dict'''
    getArray = array  # array就是webservice调用后获取的结果ArrayOfString
    getDict = sudsobject.asdict(getArray)
    getList = getDict.get('%s' % info)  # 返回指定键的值
    return getList

 

二、调用webservice接口

soap_client2.py
from suds.client import Client
from suds.xsd.doctor import ImportDoctor, Import

from get_ArrayOfString_value import get_ArrayOfString_value

url = 'http://ws.webxml.com.cn/WebServices/WeatherWS.asmx?wsdl'

# 接口要求在被调用时显式地指定调用标准
imp=Import('http://www.w3.org/2001/XMLSchema',
           location='http://www.w3.org/2001/XMLSchema.xsd')
imp.filter.add('http://WebXml.com.cn/')

client=Client(url,plugins=[ImportDoctor(imp)])
#print(client)
result=client.service.getWeather('北京')
#print(result)

result_list=get_ArrayOfString_value(result,'string')
#print(result_list)
print(result_list[4])

 

获取的结果

result_list[4]
今日天气实况:气温:27℃;风向/风力:东北风 2级;湿度:56%

 

通过    print(client)    可以查询到webservice的method和相应参数有

Methods (6):
            getRegionCountry()
            getRegionDataset()
            getRegionProvince()
            getSupportCityDataset(xs:string theRegionCode)
            getSupportCityString(xs:string theRegionCode)
            getWeather(xs:string theCityCode, xs:string theUserID)

通过    print(result)    打印出调用函数查询出的值

(ArrayOfString){
   string[] = 
      "直辖市 北京",
      "北京",
      "792",
      "2020/07/02 15:07:50",
      "今日天气实况:气温:27℃;风向/风力:东北风 2级;湿度:56%",
      "紫外线强度:最弱。",
      "中国人民保险中暑指数:无中暑风险,天气舒适,令人神清气爽的一天,不用担心中暑的困扰。
健臻·血糖指数:易波动,气温多变,血糖易波动,请注意监测。
穿衣指数:热,适合穿T恤、短薄外套等夏季服装。
洗车指数:不宜,有雨,雨水和泥水会弄脏爱车。
紫外线指数:最弱,辐射弱,涂擦SPF8-12防晒护肤品。
",
      "7月2日 雷阵雨转中雨",
      "21℃/29℃",
      "东北风小于3级",
      "4.gif",
      "8.gif",
      "7月3日 雷阵雨转多云",
      "20℃/26℃",
      "东北风转东南风小于3级",
      "4.gif",
      "1.gif",
      "7月4日 多云转雷阵雨",
      "21℃/28℃",
      "西南风转西风小于3级",
      "1.gif",
      "4.gif",
      "7月5日 雷阵雨",
      "21℃/29℃",
      "东风小于3级",
      "4.gif",
      "4.gif",
      "7月6日 多云",
      "22℃/30℃",
      "南风小于3级",
      "1.gif",
      "1.gif",
 }