当前位置 : 主页 > 网页制作 > Nodejs >

SOAPpy 调用天气预报WebService

来源:互联网 收集:自由互联 发布时间:2021-06-24
SOAPpy 是一个很古老的库,最近的维护都是6年以前了;不知到怎么的就听说这个库了,想用这个库来入手学习WebService,最后证明是掉坑了。 今天下午终于爬坑成功(也就是把几个基本的

SOAPpy 是一个很古老的库,最近的维护都是6年以前了;不知到怎么的就听说这个库了,想用这个库来入手学习WebService,最后证明是掉坑了。

今天下午终于爬坑成功(也就是把几个基本的大坑爬过去了)。

第一个坑在,安装之后,竟然跑不起来:

TypeError: callInfoFromWSDL() takes exactly 3 arguments (2 given)

跑去修改WSDL.py文件,97行,将self作为callInfoFromWSDL的第一个参数。

然后仿照这个博主的文章:http://blog.csdn.net/shuxiaomeng/article/details/6531077 去试着调用天气预报的服务:成功的跑起来了,但是博主就调了一个getSupportProvice方法,可以输出支持的省份名。 接着我去试其它接口,发现只要是需要传参的接口全部是失败。(怪不得那个博主只实现一个示例……) 通过看各种文档,包括官方的和网上各种论坛的。最后我下了一个SoapUI的升级版ReadAPI,用它来做SOAP请求收发实验,定位到的问题所在:名称空间。 解决这个问题,需要两步:第一步是要给方法加上名称空间,加了之后发现参数还是没有名称空间。于是又通过国外论坛发现要修改SOAPBuilder.py文间,在里面修改tag的设置。

  • 给方法添加名称空间的方法如:server.methods["getSupportCity"].namespace=("tns","http://WebXml.com.cn/")
  • 修改tag设置:
tag = tag or self.gentag()
        if self.namespace:
            tag = self.namespace[0] + ":" + tag
            #tag = ns_map.get(self.namespace) + ":" + tag
        tag = toXMLname(tag) # convert from SOAP 1.2 XML name encoding

我的改法和那个外国佬说的有点区别,在于对于显式给了name的名称空间,tag会是一个tuple,这样调用ns_map.get的时候会返回None。总之大家记住要在这个地方修改tag成咱们想要的模样,这样得到的方法参数啥的就都有名称空间了。 最后的成果展示在下面:

#encoding=utf-8
from SOAPpy import WSDL,SOAPProxy




wsdlFile = 'http://www.webxml.com.cn/WebServices/WeatherWebService.asmx?wsdl'

server = WSDL.Proxy(wsdlFile)

# 下面两行用于输出调试信息
server.soapproxy.config.dumpSOAPOut=1
#server.soapproxy.config.dumpSOAPIn = 1

#server.methods["getSupportProvince"].namespace=("sdfsd","http://www.baidu.com")
print server.methods

#获取支持的身份
for a in server.getSupportProvince():
    for i in a:
        print i

print "*"*30
server.methods["getSupportCity"].namespace=("tns","http://WebXml.com.cn/")

#获取省份的城市
for a in server.getSupportCity(byProvinceName=u"湖北"):
    for i in a:print i

#获取天气预报
server.methods["getWeatherbyCityName"].namespace=("tns","http://WebXml.com.cn/")

for a in server.getWeatherbyCityName(theCityName=u"武汉"):
    for i in a:print i

部分输出如下

************************************************************************
湖北
武汉
57494
57494.jpg
2017-10-20 15:50:54
11℃/21℃
10月20日 多云
无持续风向微风
1.gif
1.gif
今日天气实况:气温:20℃;风向/风力:东北风 3级;湿度:55%;紫外线强度:弱。空气质量:中。
紫外线指数:弱,辐射较弱,涂擦SPF12-15、PA+护肤品。
感冒指数:较易发,天凉温差大,适当增减衣服。
穿衣指数:较舒适,建议穿薄外套或牛仔裤等服装。
洗车指数:较适宜,无雨且风力较小,易保持清洁度。
运动指数:适宜,天气较好,尽情感受运动的快乐吧。
空气污染指数:中,易感人群应适当减少室外活动。

11℃/22℃
10月21日 晴
无持续风向微风
0.gif
0.gif
13℃/23℃
10月22日 多云转阴
无持续风向微风
1.gif
2.gif
武汉市位于江汉平原东部,长江中游与长江、汉水交汇处。东经113°41′-115°05′,北纬29°58′-31°22′。武汉市地理位置优越,长江及其最大支流汉江交汇于此,将武汉市区天然分成汉口、汉阳和武昌三镇,武汉是我国水陆交通枢纽,控长江中游之咽喉,扼南北交通之要冲,素有“九省通衢”之称,现全市货运吞吐量达亿吨以上。优越的地理位置,成为历代兵家争夺的战略要地。三国时,武汉东湖附近曾是刘备、孙权、曹操进行军事、政治活动的场所,现在留下的有刘备郊天台、吴王庙、曹操庙、洪山宝塔等古建筑。武汉现已发展为中国中部地区工业、金融、商业、科学、文化教育中心。武汉市属亚热带湿润季风气候,雨量充沛、日照充足,四季分明。总体气候环境良好,近几年30年来,年均降雨量1269毫米,且多集中在6-8月。年均气温15.8℃-17.5℃,年无霜期一般为211天-272天,年日照总时数1810小时-2100小时。景观:武当山、长江三峡、神农架等。

总结:中国人虽然多,论坛也热闹,但是都不严谨,往往都没找到问题的根源。最后还是要看国外的论坛上的说法。

这次的教训是,关于网络协议的东东,一定要找到模拟器,这样才能定位问题所在。

有想一起学WebService的同学,联系一下,互相交流交流。

网友评论