一、首先寫一個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", }