学了一段时间的Web服务,今天做了一个Web服务,利用YAHOO的公开天气API做自己的Web服务,主要是想练练手。现在把过程和心得分享给大家。
求教:这个Web服务还有个不完善的地方,Web服务的 CityNameToCityNum方法,这个最重要,他是把省会和直辖市的名字转换为编号,因为YAHOO传的参数不是城市名字的区号,全是自己的,而我又想不到更好的获得YAHOO城市对应的编号的方法,所以就创建了HASHTABLE存储了中国的各个省会城市和直辖市,希望有高手提出更好的方法,能不用这样,直接找YAHOO获取编号,提取更多的城市,而不用把所有的中国所有的城市全写在HASHTABLE里。
Web服务地址:http://www.h2bbs.com/Weather/Weather.asmx
原理:
在Yahoo的Developer Network
http://developer.yahoo.com/weather/
详细地介绍了Yahoo天气预报的API调用方法,这里用C#来实现,本文主要是利用它的API做Web服务,其它的应用由网友们自由发挥
首先了解Yahoo Weather Api的RSS Response格式(这是下午我查我家银川天气时返回的RSS):
"Tue, 14 Oct 2008 11:00 am CST" />
="Mostly Cloudy" code="28" />
="Partly Cloudy" code="30" />
2008 -->
其中最重要的是后面的几行,查询当天和第二天的天气情况,我们要获取的天气信息就在里面,代码如下:
="Mostly Cloudy" code="28" />
="Partly Cloudy" code="30" />
我们所需要用到的Node是/rss/channel/item/yweather: forecast;这个节点里的东西是我们需要的。
知道了这些,我们接下来要做的就是在VS中建立WEB服务,并添加下面的代码:
XmlNamespaceManager(Weather.NameTable);
"http://xml.weather.yahoo.com/ns/rss/1.0");
("@date").Value.ToString());
("@day").Value.ToString()) + "(" + node.SelectSingleNode("@day").Value.ToString()
+ ")";
("@low").Value)) + "℃";
("@high").Value)) + "℃";
别忘了"using System.Xml;"哦!
Web服务的代码中有一个Web公开方法,四个私有方法:
(1)GetWeather方法是公共方法,提供Web调用。
(2)FToC方法,他主要是把RSS返回的华氏温度转换成摄氏温度,其实这一步可以不用的,当初没发现,URL中加点参数就返回的是摄氏温度。
(3)EweekToCweek方法,他主要是把英文的星期缩写变成中文。
(4)EmonthToCmonth方法,它主要是把英文的月份缩写变成中文,并重新排序。
(5)CityNameToCityNum方法,这个最重要,他是把省会和直辖市的名字转换为编号,因为YAHOO传的参数不是城市名字的区号,全是自己的,而我又想不到更好的获得YAHOO城市对应的编号的方法,所以就只能支持这么几个城市了,希望有高手提出更好的方法,能不用这样,直接找YAHOO获取编号。
查询个中国随便的省会,效果如下
UseCurrentLocale="true">
"inserted">
写完了!最后希望能给大家带来收获!