天天看點

python技巧31[調用webservice]

webservice提供方:

http://www.webxml.com.cn/zh_cn/web_services.aspx

天氣預報webservice:

http://webservice.webxml.com.cn/WebServices/WeatherWS.asmx

一 使用urllib + xml.dom.minidom通過http get的方式來使用webservice:

例如上海的天氣:http://www.webxml.com.cn/WebServices/WeatherWebService.asmx/getWeatherbyCityName?theCityName=58367

httpget傳回:

  <? xml version="1.0" encoding="utf-8"  ?>  

-  < ArrayOfString  xmlns:xsi ="http://www.w3.org/2001/XMLSchema-instance"  xmlns:xsd ="http://www.w3.org/2001/XMLSchema"  xmlns ="http://WebXml.com.cn/" >

   < string > 直轄市 </ string >  

   < string > 上海 </ string >  

   < string > 58367 </ string >  

   < string > 58367.jpg </ string >  

   < string > 2011-1-4 14:40:22 </ string >  

   < string > 1℃/5℃ </ string >  

   < string > 1月4日 晴轉多雲 </ string >  

   < string > 北風4-5級轉3-4級 </ string >  

   < string > 0.gif </ string >  

   < string > 1.gif </ string >  

   < string > 今日天氣實況:氣溫:4℃;風向/風力:東風 小于3級;濕度:41%;氣壓:1026.3hPa;空氣品質:良;紫外線強度:弱 </ string >  

   < string > 穿衣指數:天氣冷,建議着棉衣、皮夾克加羊毛衫等冬季服裝。年老體弱者宜着厚棉衣或冬大衣。感冒指數:天氣寒冷,晝夜溫差極大且風力較強,易發生感冒,請注意适當增減衣服,加強自我防護避免感冒。運動指數:天氣較好,氣溫很高,請減少運動時間并降低運動強度,又因紫外線強且風力較大,戶外運動避風防曬。洗車指數:較适宜洗車,未來持續兩天無雨,但考慮風力較大,擦洗一新的汽車會蒙上灰塵。晾曬指數:天氣晴朗,午後溫暖的陽光仍能滿足你驅潮消黴殺菌的晾曬需求。旅遊指數:天氣晴朗,萬裡無雲,溫度稍低,加之風稍大,讓人感覺有點涼,會對外出有一定影響,外出注意防風保暖。路況指數:晴天,其它條件适宜,路面比較幹燥,路況較好。舒适度指數:白天天氣較涼,且風力較強,您會感覺偏冷,不很舒适,請注意添加衣物,以防感冒。 </ string >  

   < string > 1℃/6℃ </ string >  

   < string > 1月5日 多雲轉陰 </ string >  

   < string > 北風3-4級轉4-5級 </ string >  

   < string > 1.gif </ string >  

   < string > 2.gif </ string >  

   < string > 0℃/5℃ </ string >  

   < string > 1月6日 陰轉多雲 </ string >  

   < string > 北風4-5級 </ string >  

   < string > 2.gif </ string >  

   < string > 1.gif </ string >  

   < string > 上海簡稱:滬,位置:上海地處長江三角洲前緣,東瀕東海,南臨杭州灣,西接江蘇,浙江兩省,北界長江入海,正當我國南北岸線的中部,北緯31°14′,東經121°29′。面積:總面積7823.5平方公裡。人口:人口1000多萬。上海豐富的人文資源、迷人的城市風貌、繁華的商業街市和歡樂的節慶活動形成了獨特的都市景觀。遊覽上海,不僅能體驗到大都市中西合壁、商儒交融、八方來風的氛圍,而且能感受到這個城市人流熙攘、車水馬龍、燈火璀璨的活力。上海在中國現代史上占有着十分重要的地位,她是中國gcd的誕生地。許多震動中外的曆史事件在這裡發生,留下了衆多的革命遺迹,處處為您講述着一個個使人永不忘懷的可歌可泣的故事,成為包含民俗的人文景觀和紀念地。在上海,每到秋祭,紛至沓來的人們在這裡祭祀先烈、緬懷革命曆史,已成為了一種風俗。大上海在中國近代曆史中,曾是風起雲湧可歌可泣的地方。在這裡荟萃多少風雲人物,散落在上海各處的不同住宅建築,由于其主人的非同尋常,蘊含了耐人尋味的曆史意義。這裡曾留下許多革命先烈的足迹。瞻仰孫中山、宋慶齡、魯迅等故居,會使您産生撫今追昔的深沉遐思,這裡還有無數個達官貴人的住宅,探訪一下李鴻章、蔣介石等人的公館,可以聯想起主人那段顯赫的發迹史。 </ string >  

   </ ArrayOfString >

代碼:

def  TestUrlOpen():

   import  urllib.request

  page  =  urllib.request.urlopen( " http://www.webxml.com.cn/WebServices/WeatherWebService.asmx/getWeatherbyCityName?theCityName=58367 " )

  lines  =  page.readlines()

  page.close()

  document  =   ""

   for  line  in  lines :

    document  =  document  +  line.decode( ' utf-8 ' )

   from  xml.dom.minidom  import  parseString

  dom  = parseString(document)

  strings  =  dom.getElementsByTagName( " string " )

   print  (strings[ 6 ].childNodes[0].data  +   "   "   +  strings[ 7 ].childNodes[0].data)

輸出如下:

1月4日 晴轉多雲 北風4-5級轉3-4級

二 使用suds來使用webservice:

https://fedorahosted.org/suds/ 

suds web services client 是輕量級的基于soap的python web services client。

suds安裝:python31 setup.py install

suds安裝的錯誤:ImportError: No module named client

代碼:

def  TestSuds() :

   from  suds  import  WebFault

   from  suds.client  import  Client 

  url  =   ' http://webservice.webxml.com.cn/WebServices/WeatherWS.asmx?WSDL '

  client  =  Client(url)

   print  (client)

   print  (client.service.getWeather( ' 58367 ' ))

三 其他的使用webservice的方式:

http://pywebsvcs.sourceforge.net/ 

參考:

http://www.pyfun.com/shenru/201012/3060.html

http://www.iyouf.info/parse-weather-with-python.html

https://fedorahosted.org/suds/wiki/Documentation

完!