Rss聚合器的实现

    这两天闲着没事,在网上瞎逛,看到RSS订阅的按钮,以前看到就看到了,也没多想,这次看到脑子里闪过一个念头,好像我RSS方面的知识一片空白,因为没有实际需求,所以从来没有去了解过RSS订阅是怎么实现的,既然现在空着那么就做个Demo版的Rss聚合工具,说干就干,先在百度百科找了一篇Rss的介绍,内容如下

Rss(也叫聚合内容,Really Simple Syndication)是一种描述和同步网站内容的格式,是目前使用最广泛的XML应用。可以被称为资源共享模式的延伸。
RSS是一种起源于网景的技术,将用户订阅的内容传送给他们的通讯协同格式(Protocol)。RSS可以是以下三个解释的其中一个:
Really Simple Syndication
RDF (Resource Description Framework) Site Summary
Rich Site Summary
但其实这三个解释都是指同一种Syndication的技术。 RSS目前广泛用于网上新闻频道,blogwiki,主要的版本有0.91, 1.0, 2.0。
RSS:(recombination signal sequence)重组信号序列
RSS由一个共同的回文七核苷酸序列(CACAGTG)和一个共同的富含A的九核苷酸序列(ACAAAAAACC)组成,中间为固定长度的间隔序列。

 看了上面的介绍感觉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;
    }
        Channel _Channel = new Channel();

        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);
            }
posted @ 2008-06-22 20:54  超然  阅读(826)  评论(1编辑  收藏  举报