读取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; }}
- 读取RSS源的天气预报Web Server实现
- 天气预报的RSS数据读取(免费天气预报源代码)
- 一个可靠的天气预报Web Server
- 实现读取RSS 2.0的Javascript类
- 用.Net的Web服务实现天气预报
- Web 2.0时代RSS的.Net实现
- Web 2.0时代RSS的.Net实现
- Web 2.0时代RSS的.Net实现
- 利用Web Server 获取天气预报
- 读取RSS源
- WebRequest实现读取天气预报信息
- HttpWebRequest实现读取天气预报信息
- WebRequest实现读取天气预报信息
- HttpWebRequest实现读取天气预报信息
- 调用Web Service实现天气预报
- 用JSP实现基于Web的RSS阅读器
- 用JSP实现基于Web的RSS阅读器
- 用JSP实现基于Web的RSS阅读器
- VC6.0中C4541号警告的原因以及解决方案
- 系统架构之二(棋牌类游戏常用架构)
- android滑动基础篇
- [ActiveRecord] 之五:ActiveRecordMediator
- ExpandableListView基本实现—能运行
- 读取RSS源的天气预报Web Server实现
- (2011.07.04-2011.07.09)六天的学习小记
- [ActiveRecord] 之六:继承
- 根据查询的关键字,实现获取百度指定页数的搜索结果的信息(网页地址,标题,摘要,并有排序的说明)
- C++图像处理 -- 图像颜色混合(中)
- 字节对齐
- 免费教程大型网站整理大集合
- 目标习惯和目标方式
- 集合