读取RSS源的天气预报Web Server实现

来源:互联网 发布:淘宝怎么解决管控纪录 编辑:程序博客网 时间:2024/09/21 08:58

在VS2010中完成

1.数据结构

   /// <summary>    /// 数据成员    /// </summary>    public class rss    {                 public string Title;         public List<Item> Items=new List<Item>();             }    public class Item    {        public string Title;        public string Description;        public string PubDate;    }    public class Weather    {        public DateTime WeatherDate;        public DateTime PubDate;        public string Temp;        public string Wind;        public string Cloud;    }

2.功能实现

  •    读取RSS源,将读到的文档相关标签的内容存入类rss中,函数ReadXml,具体参考我的另一边博文----C#解析RSS新闻源
  •    将rss数据中的变量存储为天气所需要的特定类型,也即是类Weather,实现代码SetWeather
     public List<Weather> SetWeather(string where)         {             rss rss = new rss();             switch (where)             {                  case "南京":                     rss = ReadXml("http://weather.raychou.com/?/detail/58238/count_3/rss");                     break;                 case "北京":                     rss = ReadXml("http://weather.raychou.com/?/detail/54511/count_3/rss");                     break;                 case "上海":                     rss = ReadXml("http://weather.raychou.com/?/detail/58367/count_3/rss");                     break;                 case "广东":                     rss = ReadXml("http://weather.raychou.com/?/detail/59287/count_3/rss");                     break;                 case "重庆":                     rss = ReadXml("http://weather.raychou.com/?/detail/57516/count_3/rss");                     break;                 case "厦门":                     rss = ReadXml("http://weather.raychou.com/?/detail/59134/count_3/rss");                     break;                 case "杭州":                     rss = ReadXml("http://weather.raychou.com/?/detail/58457/count_3/rss");                     break;                 case "大连":                     rss = ReadXml("http://weather.raychou.com/?/detail/54662/count_3/rss");                     break;             }             List<Weather> weather = new List<Weather>();             Weather weather_one = new Weather();             for (int i = 0; i < rss.Items.Count; i++)             {                 weather_one.WeatherDate = DateTime.Parse(rss.Items[i].Title);                 weather_one.PubDate = DateTime.Parse(rss.Items[i].PubDate);                 string[] sArray = rss.Items[i].Description.Split(' ');                 weather_one.Cloud=sArray[0].ToString();                 if (weather_one.Cloud.Contains("雪"))                     weather_one.Cloud = "雪";                 else if (weather_one.Cloud.Contains("雨") && weather_one.Cloud.Contains("雪") == false)                     weather_one.Cloud = "雨";                 else if (weather_one.Cloud.Contains("阴") && weather_one.Cloud.Contains("雨") == false && weather_one.Cloud.Contains("雪") == false)                     weather_one.Cloud = "阴";                 else if (weather_one.Cloud.Contains("云") && weather_one.Cloud.Contains("阴") == false && weather_one.Cloud.Contains("雨") == false && weather_one.Cloud.Contains("雪") == false)                     weather_one.Cloud = "云";                 else if (weather_one.Cloud.Contains("晴") && weather_one.Cloud.Contains("云") == false && weather_one.Cloud.Contains("阴") == false && weather_one.Cloud.Contains("雨") == false && weather_one.Cloud.Contains("雪") == false)                     weather_one.Cloud = "晴";                 else                     weather_one.Cloud = "世界末日到了!";                 weather_one.Temp=sArray[1].ToString();//情 云 雨 雪 阴                 weather_one.Wind=sArray[2].ToString();                 weather.Add(weather_one);                              }              return weather;         }   

    返回的是一个list<Weather>
  • 最后就可以生成一个简单的天气预报Web Server
  • 完整代码如下
    using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Web.Services;using System.Xml;namespace WebApplication1{    /// <summary>    /// Rss 的摘要说明    /// </summary>    [WebService(Namespace = "http://tempuri.org/")]    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]    [System.ComponentModel.ToolboxItem(false)]    // 若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消对下行的注释。    // [System.Web.Script.Services.ScriptService]    public class Rss : System.Web.Services.WebService    {        [WebMethod]        public string HelloWorld()        {            return "Hello World";                    }                /*public string GetWind(DateTime date)        {                       }        [WebMethod]        public int GetTemp(DateTime date)        {                      }*/        public rss ReadXml(string uri)        {            XmlTextReader Reader = new XmlTextReader(uri);            // XmlValidatingReader Valid = new XmlValidatingReader(Reader);            // Valid.ValidationType = ValidationType.None;            XmlDocument xmlDoc = new XmlDocument();            xmlDoc.Load(Reader);            XmlNode rssNode = FoundChildNode(xmlDoc, "rss");            XmlNode channelNode = FoundChildNode(rssNode, "channel");            rss channel = new rss();            //channel.Items =  new List<rss.Item>();            for (int i = 0; i < channelNode.ChildNodes.Count; i++)            {                switch (channelNode.ChildNodes[i].Name)                {                    case "title":                        {                            channel.Title = channelNode.ChildNodes[i].InnerText;                            break;                        }                    case "item":                        {                            Item item = this.getRssItem(channelNode.ChildNodes[i]);                            channel.Items.Add(item);                            break;                        }                }            }            return channel;        }        private XmlNode FoundChildNode(XmlNode Node, string Name)        {            XmlNode childlNode = null;            for (int i = 0; i < Node.ChildNodes.Count; i++)            {                if (Node.ChildNodes[i].Name == Name && Node.ChildNodes[i].ChildNodes.Count > 0)                {                    childlNode = Node.ChildNodes[i];                    return childlNode;                }            }            return childlNode;        }        private Item getRssItem(XmlNode Node)        {            Item item = new Item();            for (int i = 0; i < Node.ChildNodes.Count; i++)            {                if (Node.ChildNodes[i].Name == "title")                {                    item.Title = Node.ChildNodes[i].InnerText;                }                else if (Node.ChildNodes[i].Name == "description")                {                    item.Description = Node.ChildNodes[i].InnerText;                }                else if (Node.ChildNodes[i].Name == "pubDate")                {                    item.PubDate = Node.ChildNodes[i].InnerText;                }            }            return item;        }         [WebMethod]        public List<Weather> SetWeather(string where)         {             rss rss = new rss();             switch (where)             {                  case "南京":                     rss = ReadXml("http://weather.raychou.com/?/detail/58238/count_3/rss");                     break;                 case "北京":                     rss = ReadXml("http://weather.raychou.com/?/detail/54511/count_3/rss");                     break;                 case "上海":                     rss = ReadXml("http://weather.raychou.com/?/detail/58367/count_3/rss");                     break;                 case "广东":                     rss = ReadXml("http://weather.raychou.com/?/detail/59287/count_3/rss");                     break;                 case "重庆":                     rss = ReadXml("http://weather.raychou.com/?/detail/57516/count_3/rss");                     break;                 case "厦门":                     rss = ReadXml("http://weather.raychou.com/?/detail/59134/count_3/rss");                     break;                 case "杭州":                     rss = ReadXml("http://weather.raychou.com/?/detail/58457/count_3/rss");                     break;                 case "大连":                     rss = ReadXml("http://weather.raychou.com/?/detail/54662/count_3/rss");                     break;             }             List<Weather> weather = new List<Weather>();             Weather weather_one = new Weather();             for (int i = 0; i < rss.Items.Count; i++)             {                 weather_one.WeatherDate = DateTime.Parse(rss.Items[i].Title);                 weather_one.PubDate = DateTime.Parse(rss.Items[i].PubDate);                 string[] sArray = rss.Items[i].Description.Split(' ');                 weather_one.Cloud=sArray[0].ToString();                 if (weather_one.Cloud.Contains("雪"))                     weather_one.Cloud = "雪";                 else if (weather_one.Cloud.Contains("雨") && weather_one.Cloud.Contains("雪") == false)                     weather_one.Cloud = "雨";                 else if (weather_one.Cloud.Contains("阴") && weather_one.Cloud.Contains("雨") == false && weather_one.Cloud.Contains("雪") == false)                     weather_one.Cloud = "阴";                 else if (weather_one.Cloud.Contains("云") && weather_one.Cloud.Contains("阴") == false && weather_one.Cloud.Contains("雨") == false && weather_one.Cloud.Contains("雪") == false)                     weather_one.Cloud = "云";                 else if (weather_one.Cloud.Contains("晴") && weather_one.Cloud.Contains("云") == false && weather_one.Cloud.Contains("阴") == false && weather_one.Cloud.Contains("雨") == false && weather_one.Cloud.Contains("雪") == false)                     weather_one.Cloud = "晴";                 else                     weather_one.Cloud = "世界末日到了!";                 weather_one.Temp=sArray[1].ToString();//情 云 雨 雪 阴                 weather_one.Wind=sArray[2].ToString();                 weather.Add(weather_one);                              }              return weather;         }                       }       /// <summary>    /// 数据成员    /// </summary>    public class rss    {                 public string Title;         public List<Item> Items=new List<Item>();             }    public class Item    {        public string Title;        public string Description;        public string PubDate;    }    public class Weather    {        public DateTime WeatherDate;        public DateTime PubDate;        public string Temp;        public string Wind;        public string Cloud;    }}

原创粉丝点击