Rss 是一种描述和同步网站内容的格式,是目前使用最广泛的XML应用。RSS 搭建了信息迅速传播的一个技术平台,使得每个人都成为潜在的信息提供者。发布一个 Rss 文件后,这个 Rss Feed中包含的信息就能直接被其他站点调用,而且由于这些数据都是标准的XML格式,所以也能在其他的终端和服务中使用。
在之前我们如果要实现博客的RSS订阅或新闻读取,通常都需要手写代码去生产或读取XML。现在有了RSSToolKit DLL,这一切就变得简单了。你可以使用它在五分钟内实现自己的 Rss 在线阅读器。这篇文章将介绍如何读取站点 Rss 文件信息。
开发环境:VS2005 + RSSToolKit + ASP.NET AJAX
一、首先我们需要建立一个ASP.NET AJAX站点(这里就不详细说明了,网上有详细的介绍文章)
二、将RssToolKit引入到你的解决方案中,建好的解决方案如下(CSS和图片文件可以使用我压缩文档里的)
三、接下来我们开始写Rss读取的实现代码,分成两部分:
2
3 <% @ Register Assembly = " RssToolkit " Namespace = " RssToolkit " TagPrefix = " Rss " %>
4 <! DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd" >
5 < html xmlns ="http://www.w3.org/1999/xhtml" >
6 < head runat ="server" >
7 < title > 向东博客阅读器|meil.livebaby.cn </ title >
8 < link href ="CSS/Layout.css" rel ="stylesheet" type ="text/css" />
9
10 < script language ="JavaScript" type ="text/javascript" >
11 var ls;
12 function ls_onClk(itemNumber) {
13
14 if (ls == null ) ls = $get( " List0 " );
15
16 ls.className = "" ;
17 ls = $get( " list " + itemNumber);
18 ls.className = " current " ;
19 return true ;
20 }
21 </ script >
22
23 </ head >
24 < body >
25 < form id ="form1" runat ="server" >
26 < asp:ScriptManager ID ="ScriptManager1" runat ="server" />
27 < div id ="content-header" >
28 < h1 >< asp:HyperLink ID ="HyperLink1" runat ="server" Text ="向东" Target ="_blank" NavigateUrl ="http://meil.livebaby.cn/index.html" ></ asp:HyperLink >
29 博客阅读器 </ h1 >
30 </ div >
31 < div id ="content-container" >
32 < div id ="content-side1" >
33 < ul class ="list-of-links" >
34 < li id ="list0" class ="current" >
35 < asp:LinkButton ID ="lb0" runat ="server" CommandArgument ="0" OnClientClick ="ls_onClk(0);" OnCommand ="lnk_cmd" > 向东博客 </ asp:LinkButton ></ li >
36 < li id ="list1" >
37 < asp:LinkButton ID ="lb1" runat ="server" CommandArgument ="1" OnClientClick ="ls_onClk(1);" OnCommand ="lnk_cmd" > 财经博客 </ asp:LinkButton ></ li >
38 < li id ="list2" >
39 < asp:LinkButton ID ="lb2" runat ="server" CommandArgument ="2" OnClientClick ="ls_onClk(2);" OnCommand ="lnk_cmd" > Flower博客 </ asp:LinkButton ></ li >
40 < li id ="list3" >
41 < asp:LinkButton ID ="lb3" runat ="server" CommandArgument ="3" OnClientClick ="ls_onClk(3);" OnCommand ="lnk_cmd" > 活力宝贝博客网 </ asp:LinkButton ></ li >
42 < li id ="list4" >
43 < asp:LinkButton ID ="lb4" runat ="server" CommandArgument ="4" OnClientClick ="ls_onClk(4);" OnCommand ="lnk_cmd" > 悠悠宝贝的博客 </ asp:LinkButton ></ li >
44 < li id ="list5" >
45 < asp:LinkButton ID ="lb5" runat ="server" CommandArgument ="5" OnClientClick ="ls_onClk(5);" OnCommand ="lnk_cmd" >< font color ="red" > 向东博客园博客 </ font ></ asp:LinkButton ></ li >
46 < li id ="li6" >
47 < asp:LinkButton ID ="lb6" runat ="server" CommandArgument ="6" OnClientClick ="ls_onClk(6);" OnCommand ="lnk_cmd" >< font color ="red" > 博客园 </ font ></ asp:LinkButton ></ li >
48 </ ul >
49 </ div >
50 < div id ="content-main" >
51 < asp:UpdatePanel ID ="updateMain" runat ="server" UpdateMode ="conditional" >
52 < Triggers >
53 < asp:AsyncPostBackTrigger ControlID ="lb0" />
54 < asp:AsyncPostBackTrigger ControlID ="lb1" />
55 < asp:AsyncPostBackTrigger ControlID ="lb2" />
56 < asp:AsyncPostBackTrigger ControlID ="lb3" />
57 < asp:AsyncPostBackTrigger ControlID ="lb4" />
58 < asp:AsyncPostBackTrigger ControlID ="lb5" />
59 < asp:AsyncPostBackTrigger ControlID ="lb6" />
60 </ Triggers >
61 < ContentTemplate >
62 < h2 >< asp:Label ID ="lblHeader" runat ="server" > 最新日志 </ asp:Label ></ h2 >
63 < hr />
64 < asp:Panel ID ="pnlBlog" runat ="server" >
65 < Rss:RssDataSource ID ="rssDS" runat ="server" MaxItems ="0" Url ="" ></ Rss:RssDataSource >
66 < asp:DataList ID ="lsBlog" runat ="server" DataSourceID ="rssDS" >
67 < ItemTemplate >
68 < asp:Panel ID ="panelHeader" runat ="server" Style ="cursor: pointer; color: #d61719;width: 100%; display: block;" >
69 < span style ="float: left;" > <% # Eval ( " title " ) %> </ span >
70 < asp:Image ID ="Image1" runat ="server" Style ="float: right;" ImageUrl ="~/images/expand_blue.jpg" />
71 </ asp:Panel >
72 < asp:Panel ID ="Panel1" runat ="server" Style ="margin-top: 3px;width: 100%; background: transparent url(/blog/images/blogBack.gif) no-repeat text-top left;" >
73 <% # Eval ( " description " ) %>
74 ( < asp:HyperLink ID ="hlMore" runat ="server" NavigateUrl ='<%# Eval("link") % > ' Target="_blank" Text="更多内容"> </ asp:HyperLink > )
75 </ asp:Panel >
76 < ajaxT:CollapsiblePanelExtender ID ="cpe1" runat ="server" TargetControlID ="Panel1"
77 ExpandControlID ="panelHeader" CollapseControlID ="panelHeader" SuppressPostBack ="true"
78 ImageControlID ="Image1" Collapsed ="true" ExpandedImage ="~/images/collapse_blue.jpg"
79 CollapsedImage ="~/images/expand_blue.jpg" />
80 < hr style ="border-bottom: 1px dotted #B2B2B2; margin: 0px;" />
81 </ ItemTemplate >
82 </ asp:DataList >
83 </ asp:Panel >
84 </ ContentTemplate >
85 </ asp:UpdatePanel >
86 </ div >
87 </ div >
88 < asp:UpdateProgress ID ="UpdateProgress1" runat ="server" DisplayAfter ="0" DynamicLayout ="true" >
89 < ProgressTemplate >
90 < div id ="updProgress" >
91 < img alt ="" src ="images/indicator.gif" />
92 < span > 数据获取中 </ span >
93 </ div >
94 </ ProgressTemplate >
95 </ asp:UpdateProgress >
96 </ form >
97 < center >< div >< a href ="http://meil.livebaby.cn" > meil.livebaby.cn </ a > 程序制作:向东 2007.7 </ center >
98 </ body >
99 </ html >
100
比较重要的是这两部分:
在页面上建了一个Rss数据绑定控件,这是实现RSS读取的核心了,有了这个标记就实现了RSS读取的一半工作,那剩下的吶?
看看下面者部分,lnk_cmd 命令实现了RSS数据的重绑定,这样你就可以实时的访问多个RSS地址了。每次点击相应的Rss链接,页面就会读取并显示相关Rss的内容了。
b) 行35:<asp:LinkButton ID="lb0" runat="server" CommandArgument="0" OnClientClick="ls_onClk(0);"
OnCommand="lnk_cmd">向东博客</asp:LinkButton></li>
2 {
3 int command = Convert.ToInt32(e.CommandArgument);
4
5 rssDataBind(command);
6 }
rssDataBind就是绑定的函数,代码是:
2 {
3 switch (cmd)
4 {
5 case 0 :
6 rssDS.Url = "u /meil/rss2.xml " ;
7 lsBlog.DataBind();
8 lblHeader.Text = " 向东博客 " ;
9 break ;
10 case 1 :
11 rssDS.Url = "u/ money/rss2.xml " ;
12 lsBlog.DataBind();
13 lblHeader.Text = " 财经博客 " ;
14 break ;
15 case 2 :
16 rssDS.Url = "u/ flower/rss2.xml " ;
17 lsBlog.DataBind();
18 lblHeader.Text = " Flower博客 " ;
19 break ;
20 case 3 :
21 rssDS.Url = " rss2.asp " ;
22 lsBlog.DataBind();
23 lblHeader.Text = " 活力宝贝博客网 " ;
24 break ;
25 case 4 :
26 rssDS.Url = "u/ yoyo/rss2.xml " ;
27 lsBlog.DataBind();
28 lblHeader.Text = " 悠悠宝贝的博客 " ;
29 break ;
30 case 5 :
31 rssDS.Url = " http://www.cnblogs.com/meil/rss " ;
32 lsBlog.DataBind();
33 lblHeader.Text = " 向东博客园博客 " ;
34 break ;
35 case 6 :
36 rssDS.Url = " http://www.cnblogs.com/rss " ;
37 lsBlog.DataBind();
38 lblHeader.Text = " 博客园 " ;
39 break ;
40 default :
41 break ;
42 }
43 }
就这么简单
rssDS.Url = "u/ meil/rss2.xml " ;
lsBlog.DataBind();
是不是就如DB数据的绑定。MS的东西虽然结构性不好,但是上手真的好快。
到底需要多少个Case就看你的需要了。我这里就绑定了六个RSS地址,你还可以更多,但要注意的是一定要和页面上的LinkButton数对应上。
最终的C#代码 如下:
2 {
3 switch (cmd)
4 {
5 case 0 :
6 rssDS.Url = "u/ meil/rss2.xml " ;
7 lsBlog.DataBind();
8 lblHeader.Text = " 向东博客 " ;
9 break ;
10 case 1 :
11 rssDS.Url = "u/ money/rss2.xml " ;
12 lsBlog.DataBind();
13 lblHeader.Text = " 财经博客 " ;
14 break ;
15 case 2 :
16 rssDS.Url = "u/ flower/rss2.xml " ;
17 lsBlog.DataBind();
18 lblHeader.Text = " Flower博客 " ;
19 break ;
20 case 3 :
21 rssDS.Url = " rss2.asp " ;
22 lsBlog.DataBind();
23 lblHeader.Text = " 活力宝贝博客网 " ;
24 break ;
25 case 4 :
26 rssDS.Url = "u/ yoyo/rss2.xml " ;
27 lsBlog.DataBind();
28 lblHeader.Text = " 悠悠宝贝的博客 " ;
29 break ;
30 case 5 :
31 rssDS.Url = " http://www.cnblogs.com/meil/rss " ;
32 lsBlog.DataBind();
33 lblHeader.Text = " 向东博客园博客 " ;
34 break ;
35 case 6 :
36 rssDS.Url = " http://www.cnblogs.com/rss " ;
37 lsBlog.DataBind();
38 lblHeader.Text = " 博客园 " ;
39 break ;
40 default :
41 break ;
42 }
43 }
什么是 Rss ?
讨论与 Blog相关的技术,不可不谈的就是RSS,这个缩写在英文中可以有几个源头,并被不同的技术团体做不同的解释。既可以是“Rich Site Summary”,或“RDF Site Summary”,也可以是“Really Simple Syndication”。为什么有这么多含义呢?这还要从RSS的一段今天也没有理清的关系说起。
今天肯定有人还记得IE 4刚刚推出来的时候有一个有趣的功能,那就是新闻频道。这个新闻频道的功能与Netscape推出的新闻频道是很相似的(当时Netscape还是市场上领先的浏览器)。为此Netscape 定义了一套描述新闻频道的语言,这就是RSS,只不过Netscape自当时起每况愈下,所以最终也没有发布一个正式的RSS规范(只发布了一个0.9版本)。而微软也在当时推出了支持自己IE的CDF(Channel Definition Format)数据规格,与RSS非常接近。微软试图用新闻频道的功能把“推”(Push)技术变成一个应用主流,并与Netscape抗衡。不过出乎预测的是,“推”技术自始至终没有找到合适的商业模型,而且伴随着其他各类网络特性的出现,也日益无法显现自身的优势。新闻频道在浏览器中的地位最终日暮西山,最后也在IE的后续版本中消失了。
新闻频道的确进入了低谷,但是RSS并没有被业界人士所抛弃。过去两年,Blog从一个专业群体开始,逐步成为了网络上最热门的新话题。而 Rss 成为了描述Blog主题和更新信息的最基本方法。于是RSS这项技术被著名Blogger/Geek戴夫·温那(Dave Winner)的公司UserLand所接手,继续开发新的版本,以适应新的网络应用需要。新的网络应用就是Blog,因为戴夫·温那的努力,RSS 升级到了0.91版,然后达到了0.92版,随后在各种Blog工具中得到了应用,并被众多的专业新闻站点所支持。在广泛的应用过程中,众多的专业人士认识到需要组织起来,把RSS发展成为一个通用的规范,并进一步标准化。一个联合小组根据W3C新一代的语义网技术RDF对RSS进行了重新定义,发布了RSS 1.0,并把RSS定义为“RDF Site Summary”。这项工作并没有与戴夫·温那进行有效的沟通,而戴夫则坚持在自己设想的方向上进一步开发RSS的后续版本,也并不承认RSS 1.0的有效性。RSS由此开始分化形成了RSS 0.9x/2.0和RSS 1.0两个阵营,也由此引起了在专业人群中的广泛争论。
因为争论的存在,一直到今天,RSS 1.0还没有成为标准化组织的真正标准。而戴夫·温那却在2002年9月独自把RSS升级到了2.0版本,其中的定义完全是全新的模式,并没有任何 Rss 1.0的影子。这引发了网络上进一步争议,究竟让一个越来越普及的数据格式成为一个开放的标准,还是被一家公司所定义和控制,成为了争议的焦点。戴夫·温那并没有为自己辩解,他的观点是RSS还需要进一步发展,需要专业人士更明确的定义,不过恐怕这种轻描淡写不能消除人们对 Rss “被一家商业公司独占”的担心。
前面的铺垫对用户来说也许没有什么太大的意义,可能更多人关心如何在自己的Blog增加 Rss 输出,这样可以让很多新闻聚合工具(例如CNBlog刚刚推荐的NewzCrawler)很容易找到你并自动获得你在Blog中的更新内容。
它是什么:站点用来和其他站点之间共享内容的简易方式(也叫聚合内容)。 Rss 使肵ML作为彼此共享内容的标准方式。
它代表什么:Really Simple Syndication (或RDF Site Summary,RDF站点摘要)
例如:一些免费的软件能够让你阅读那些RSS使能的站点,比如 NewsIsFree 和 Amphetadesk。
本文永久地址: http://www.livebaby.cn/blog/u/meil/archives/2007/1169.html