Rss聚合器的实现
这两天闲着没事,在网上瞎逛,看到RSS订阅的按钮,以前看到就看到了,也没多想,这次看到脑子里闪过一个念头,好像我RSS方面的知识一片空白,因为没有实际需求,所以从来没有去了解过RSS订阅是怎么实现的,既然现在空着那么就做个Demo版的Rss聚合工具,说干就干,先在百度百科找了一篇Rss的介绍,内容如下
看了上面的介绍感觉Rss是个挺复杂的东西,当我把Rss订阅链接里的XML下载下来后一看,咣当倒地~~什么东西吗,不就是把一些标题等信息按照标准的格式组织成XML文件提供下载,订阅器负责下载和解读这些信息,揭开这层面纱后,它变得毫无神秘可言,既然没有难度的东西直接贴代码吧
(PS:我很少用到XML,所以下面的代码在处理XML文件的方法上是可能有点傻)
public struct Channel
{
public string title;
public string link;
public string description;
public string language;
public string lastBuildDate;
public string pubDate;
public string ttl;
}
public struct Item
{
public string title;
public string link;
public string author;
public string pubDate;
public string description;
}
{
public string title;
public string link;
public string description;
public string language;
public string lastBuildDate;
public string pubDate;
public string ttl;
}
public struct Item
{
public string title;
public string link;
public string author;
public string pubDate;
public string description;
}
Channel _Channel = new Channel();
List<Item> _Items = new List<Item>();
List<Item> _Items = new List<Item>();
System.Net.WebRequest myRequest = System.Net.WebRequest.Create(Path);
System.Net.WebResponse myResponse = myRequest.GetResponse();
System.IO.Stream rssStream = myResponse.GetResponseStream();
System.Xml.XmlDocument rssDoc = new System.Xml.XmlDocument();
rssDoc.Load(rssStream);
_Channel.title = rssDoc.SelectSingleNode("rss/channel/title").InnerXml;
_Channel.link = rssDoc.SelectSingleNode("rss/channel/link").InnerXml;
_Channel.description = rssDoc.SelectSingleNode("rss/channel/description").InnerXml;
_Channel.lastBuildDate = rssDoc.SelectSingleNode("rss/channel/pubDate").InnerXml;
System.Xml.XmlNodeList rssItems = rssDoc.SelectNodes("rss/channel/item");
for (int i = 0; i < rssItems.Count; i++)
{
Item item = new Item();
string d = rssItems.Item(i).InnerXml;
string w= rssItems.Item(i).InnerText ;
item.title = rssItems.Item(i).SelectSingleNode("title").InnerXml;
item.link = rssItems.Item(i).SelectSingleNode("link").InnerXml;
item.author = rssItems.Item(i).SelectSingleNode("author").InnerXml;
item.pubDate = rssItems.Item(i).SelectSingleNode("pubDate").InnerXml;
item.description = rssItems.Item(i).SelectSingleNode("description").InnerXml;
_Items.Add(item);
}
System.Net.WebResponse myResponse = myRequest.GetResponse();
System.IO.Stream rssStream = myResponse.GetResponseStream();
System.Xml.XmlDocument rssDoc = new System.Xml.XmlDocument();
rssDoc.Load(rssStream);
_Channel.title = rssDoc.SelectSingleNode("rss/channel/title").InnerXml;
_Channel.link = rssDoc.SelectSingleNode("rss/channel/link").InnerXml;
_Channel.description = rssDoc.SelectSingleNode("rss/channel/description").InnerXml;
_Channel.lastBuildDate = rssDoc.SelectSingleNode("rss/channel/pubDate").InnerXml;
System.Xml.XmlNodeList rssItems = rssDoc.SelectNodes("rss/channel/item");
for (int i = 0; i < rssItems.Count; i++)
{
Item item = new Item();
string d = rssItems.Item(i).InnerXml;
string w= rssItems.Item(i).InnerText ;
item.title = rssItems.Item(i).SelectSingleNode("title").InnerXml;
item.link = rssItems.Item(i).SelectSingleNode("link").InnerXml;
item.author = rssItems.Item(i).SelectSingleNode("author").InnerXml;
item.pubDate = rssItems.Item(i).SelectSingleNode("pubDate").InnerXml;
item.description = rssItems.Item(i).SelectSingleNode("description").InnerXml;
_Items.Add(item);
}