利用YAHOO公开API做天气预报Web服务
[1] 利用YAHOO公开API做天气预报Web服务
[2] 利用YAHOO公开API做天气预报Web服务
[3] 利用YAHOO公开API做天气预报Web服务
[4] 利用YAHOO公开API做天气预报Web服务
[2] 利用YAHOO公开API做天气预报Web服务
[3] 利用YAHOO公开API做天气预报Web服务
[4] 利用YAHOO公开API做天气预报Web服务
系列文章导航:
其中最重要的是后面的几行,查询当天和第二天的天气情况,我们要获取的天气信息就在里面,代码如下:
<yweather:forecast day="Tue" date="14 Oct 2008" low="47" high="68" text
="Mostly Cloudy" code="28" />
<yweather:forecast day="Wed" date="15 Oct 2008" low="44" high="70" text
="Partly Cloudy" code="30" />
="Mostly Cloudy" code="28" />
<yweather:forecast day="Wed" date="15 Oct 2008" low="44" high="70" text
="Partly Cloudy" code="30" />
我们所需要用到的Node是/rss/channel/item/yweather: forecast;这个节点里的东西是我们需要的。
知道了这些,我们接下来要做的就是在VS中建立WEB服务,并添加下面的代码:
namespace Weather
{
/// <summary>
/// Weather 的摘要说明
/// </summary>
[WebService(Name = "天气预报Web服务", Namespace = "http://www.h2bbs.com/WebService/Weather.asmx", Description = "利用YAHOO公开的API接口,在Web服务实现公开的天气预报调用服务。")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[ToolboxItem(false)]
public class Weather : System.Web.Services.WebService
{
[WebMethod(Description = "根据城市的名称返回该城市的天气预报情况,只能查询省会和直辖市的天气情况。")]
public DataSet GetWeather(string strCityName)
{
string strXml = "http://xml.weather.yahoo.com/forecastrss?p=CHXX" + CityNameToCityNum(strCityName);
XmlDocument Weather = new XmlDocument();
Weather.Load(strXml);
XmlNamespaceManager namespacemanager = new
XmlNamespaceManager(Weather.NameTable);
namespacemanager.AddNamespace("yweather",
"http://xml.weather.yahoo.com/ns/rss/1.0");
XmlNodeList nodes = Weather.SelectNodes("/rss/channel/item/yweather:forecast", namespacemanager);
//XmlNodeList nodes = Weather.GetElementsByTagName("forecast", "http://xml.weather.yahoo.com/ns/rss/1.0");
DataSet dstWeather = new DataSet();
DataTable dtblWeather = new DataTable("Weather");
dstWeather.Tables.Add(dtblWeather);
dstWeather.Tables["Weather"].Columns.Add("Date", typeof(string));
dstWeather.Tables["Weather"].Columns.Add("Week", typeof(string));
dstWeather.Tables["Weather"].Columns.Add("Weather", typeof(string));
dstWeather.Tables["Weather"].Columns.Add("Tlow", typeof(string));
dstWeather.Tables["Weather"].Columns.Add("Thigh", typeof(string));
if (nodes.Count > 0)
{
foreach (XmlNode node in nodes)
{
DataRow drowWeather = dstWeather.Tables["Weather"].NewRow();
drowWeather["Date"] = EmonthToCmonth(node.SelectSingleNode
("@date").Value.ToString());
drowWeather["Week"] = EweekToCweek(node.SelectSingleNode
("@day").Value.ToString()) + "(" + node.SelectSingleNode("@day").Value.ToString()
+ ")";
drowWeather["Weather"] = node.SelectSingleNode("@text").Value;
drowWeather["Tlow"] = FToC(int.Parse(node.SelectSingleNode
("@low").Value)) + "℃";
drowWeather["Thigh"] = FToC(int.Parse(node.SelectSingleNode
("@high").Value)) + "℃";
dstWeather.Tables["Weather"].Rows.Add(drowWeather);
}
return dstWeather;
}
else
{
DataRow drowNone = dstWeather.Tables["Weather"].NewRow();
drowNone["Week"] = "None";
drowNone["Weather"] = "None";
drowNone["Tlow"] = "None";
drowNone["Thigh"] = "None";
dstWeather.Tables["Weather"].Rows.Add(drowNone);
return dstWeather;
}
return dstWeather;
}
/// <summary>
/// 从华氏转换成摄氏
/// </summary>
/// <param name="f">华氏度</param>
/// <returns></returns>
private string FToC(int f)
{
return Math.Round((f - 32) / 1.8, 1).ToString();
}
/// <summary>
/// 从星期英文缩写转汉字
/// </summary>
/// <param name="strEweek">星期的英文缩写</param>
/// <returns></returns>
private string EweekToCweek(string strEweek)
{
switch (strEweek)
{
case "Mon":
return "星期一";
break;
case "Tue":
return "星期二";
break;
case "Wed":
return "星期三";
break;
case "Thu":
return "星期四";
break;
case "Fri":
return "星期五";
break;
case "Sat":
return "星期六";
break;
case "Sun":
return "星期日";
break;
default:
return "传参错误";
break;
}
}
/// <summary>
/// 从月英文缩写转汉字
/// </summary>
/// <param name="strReplace">需要替换的年月日</param>
/// <returns></returns>
private string EmonthToCmonth(string strReplace)
{
return Convert.ToDateTime(strReplace).ToString("yyyy年MM月dd日");
}
/// <summary>
/// 根据城市名称返回城市编号
/// </summary>
/// <param name="strCityName">城市名称</param>
/// <returns></returns>
private string CityNameToCityNum(string strCityNameToNum)
{
//中国各个省会和直辖市对应的查询代码
Hashtable htWeather = new Hashtable();
htWeather.Add("北京", "0008");
htWeather.Add("天津", "0133");
htWeather.Add("杭州", "0044");
htWeather.Add("合肥", "0448");
htWeather.Add("上海", "0116");
htWeather.Add("福州", "0031");
htWeather.Add("重庆", "0017");
htWeather.Add("南昌", "0097");
htWeather.Add("香港", "0049");
htWeather.Add("济南", "0064");
htWeather.Add("澳门", "0512");
htWeather.Add("郑州", "0165");
htWeather.Add("呼和浩特", "0249");
htWeather.Add("乌鲁木齐", "0135");
htWeather.Add("长沙", "0013");
htWeather.Add("银川", "0259");
htWeather.Add("广州", "0037");
htWeather.Add("拉萨", "0080");
htWeather.Add("海口", "0502");
htWeather.Add("南宁", "0100");
htWeather.Add("成都", "0016");
htWeather.Add("石家庄", "0122");
htWeather.Add("贵阳", "0039");
htWeather.Add("太原", "0129");
htWeather.Add("昆明", "0076");
htWeather.Add("沈阳", "0119");
htWeather.Add("西安", "0141");
htWeather.Add("长春", "0010");
htWeather.Add("兰州", "0079");
htWeather.Add("西宁", "0236");
htWeather.Add("南京", "0099");
object cityNum = htWeather[strCityNameToNum];
if (cityNum == null)
{
return "City not found";
}
else
{
return cityNum.ToString();
}
}
}
}
{
/// <summary>
/// Weather 的摘要说明
/// </summary>
[WebService(Name = "天气预报Web服务", Namespace = "http://www.h2bbs.com/WebService/Weather.asmx", Description = "利用YAHOO公开的API接口,在Web服务实现公开的天气预报调用服务。")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[ToolboxItem(false)]
public class Weather : System.Web.Services.WebService
{
[WebMethod(Description = "根据城市的名称返回该城市的天气预报情况,只能查询省会和直辖市的天气情况。")]
public DataSet GetWeather(string strCityName)
{
string strXml = "http://xml.weather.yahoo.com/forecastrss?p=CHXX" + CityNameToCityNum(strCityName);
XmlDocument Weather = new XmlDocument();
Weather.Load(strXml);
XmlNamespaceManager namespacemanager = new
XmlNamespaceManager(Weather.NameTable);
namespacemanager.AddNamespace("yweather",
"http://xml.weather.yahoo.com/ns/rss/1.0");
XmlNodeList nodes = Weather.SelectNodes("/rss/channel/item/yweather:forecast", namespacemanager);
//XmlNodeList nodes = Weather.GetElementsByTagName("forecast", "http://xml.weather.yahoo.com/ns/rss/1.0");
DataSet dstWeather = new DataSet();
DataTable dtblWeather = new DataTable("Weather");
dstWeather.Tables.Add(dtblWeather);
dstWeather.Tables["Weather"].Columns.Add("Date", typeof(string));
dstWeather.Tables["Weather"].Columns.Add("Week", typeof(string));
dstWeather.Tables["Weather"].Columns.Add("Weather", typeof(string));
dstWeather.Tables["Weather"].Columns.Add("Tlow", typeof(string));
dstWeather.Tables["Weather"].Columns.Add("Thigh", typeof(string));
if (nodes.Count > 0)
{
foreach (XmlNode node in nodes)
{
DataRow drowWeather = dstWeather.Tables["Weather"].NewRow();
drowWeather["Date"] = EmonthToCmonth(node.SelectSingleNode
("@date").Value.ToString());
drowWeather["Week"] = EweekToCweek(node.SelectSingleNode
("@day").Value.ToString()) + "(" + node.SelectSingleNode("@day").Value.ToString()
+ ")";
drowWeather["Weather"] = node.SelectSingleNode("@text").Value;
drowWeather["Tlow"] = FToC(int.Parse(node.SelectSingleNode
("@low").Value)) + "℃";
drowWeather["Thigh"] = FToC(int.Parse(node.SelectSingleNode
("@high").Value)) + "℃";
dstWeather.Tables["Weather"].Rows.Add(drowWeather);
}
return dstWeather;
}
else
{
DataRow drowNone = dstWeather.Tables["Weather"].NewRow();
drowNone["Week"] = "None";
drowNone["Weather"] = "None";
drowNone["Tlow"] = "None";
drowNone["Thigh"] = "None";
dstWeather.Tables["Weather"].Rows.Add(drowNone);
return dstWeather;
}
return dstWeather;
}
/// <summary>
/// 从华氏转换成摄氏
/// </summary>
/// <param name="f">华氏度</param>
/// <returns></returns>
private string FToC(int f)
{
return Math.Round((f - 32) / 1.8, 1).ToString();
}
/// <summary>
/// 从星期英文缩写转汉字
/// </summary>
/// <param name="strEweek">星期的英文缩写</param>
/// <returns></returns>
private string EweekToCweek(string strEweek)
{
switch (strEweek)
{
case "Mon":
return "星期一";
break;
case "Tue":
return "星期二";
break;
case "Wed":
return "星期三";
break;
case "Thu":
return "星期四";
break;
case "Fri":
return "星期五";
break;
case "Sat":
return "星期六";
break;
case "Sun":
return "星期日";
break;
default:
return "传参错误";
break;
}
}
/// <summary>
/// 从月英文缩写转汉字
/// </summary>
/// <param name="strReplace">需要替换的年月日</param>
/// <returns></returns>
private string EmonthToCmonth(string strReplace)
{
return Convert.ToDateTime(strReplace).ToString("yyyy年MM月dd日");
}
/// <summary>
/// 根据城市名称返回城市编号
/// </summary>
/// <param name="strCityName">城市名称</param>
/// <returns></returns>
private string CityNameToCityNum(string strCityNameToNum)
{
//中国各个省会和直辖市对应的查询代码
Hashtable htWeather = new Hashtable();
htWeather.Add("北京", "0008");
htWeather.Add("天津", "0133");
htWeather.Add("杭州", "0044");
htWeather.Add("合肥", "0448");
htWeather.Add("上海", "0116");
htWeather.Add("福州", "0031");
htWeather.Add("重庆", "0017");
htWeather.Add("南昌", "0097");
htWeather.Add("香港", "0049");
htWeather.Add("济南", "0064");
htWeather.Add("澳门", "0512");
htWeather.Add("郑州", "0165");
htWeather.Add("呼和浩特", "0249");
htWeather.Add("乌鲁木齐", "0135");
htWeather.Add("长沙", "0013");
htWeather.Add("银川", "0259");
htWeather.Add("广州", "0037");
htWeather.Add("拉萨", "0080");
htWeather.Add("海口", "0502");
htWeather.Add("南宁", "0100");
htWeather.Add("成都", "0016");
htWeather.Add("石家庄", "0122");
htWeather.Add("贵阳", "0039");
htWeather.Add("太原", "0129");
htWeather.Add("昆明", "0076");
htWeather.Add("沈阳", "0119");
htWeather.Add("西安", "0141");
htWeather.Add("长春", "0010");
htWeather.Add("兰州", "0079");
htWeather.Add("西宁", "0236");
htWeather.Add("南京", "0099");
object cityNum = htWeather[strCityNameToNum];
if (cityNum == null)
{
return "City not found";
}
else
{
return cityNum.ToString();
}
}
}
}
别忘了"using System.Xml;"哦!