科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道基础软件AJAX实践:开发你自己的RSS在线阅读器

AJAX实践:开发你自己的RSS在线阅读器

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

AJAX实践:开发你自己的RSS在线阅读器

作者:meil 来源:赛迪网技术社区 2007年11月28日

关键字: 在线阅读器 RSS 开发 AJAX

  • 评论
  • 分享微博
  • 分享邮件
Rss 是一种描述和同步网站内容的格式,是目前使用最广泛的XML应用。RSS 搭建了信息迅速传播的一个技术平台,使得每个人都成为潜在的信息提供者。发布一个 Rss 文件后,这个 Rss Feed中包含的信息就能直接被其他站点调用,而且由于这些数据都是标准的XML格式,所以也能在其他的终端和服务中使用。 2\(GHpW  
k}b4p  
在之前我们如果要实现博客的RSS订阅或新闻读取,通常都需要手写代码去生产或读取XML。现在有了RSSToolKit DLL,这一切就变得简单了。你可以使用它在五分钟内实现自己的 Rss 在线阅读器。这篇文章将介绍如何读取站点 Rss 文件信息。 #!je X)'  
md41 zC-  
开发环境:VS2005 + RSSToolKit + ASP.NET AJAX 3r 2F+I  
_/WQ5  
一、首先我们需要建立一个ASP.NET AJAX站点(这里就不详细说明了,网上有详细的介绍文章) kmv47WG7w  
:JI W#uHo  
 CkH(Y6a  
up*hFK*  
v{y'2EB  
二、将RssToolKit引入到你的解决方案中,建好的解决方案如下(CSS和图片文件可以使用我压缩文档里的) &9^[*G_6#  
`CdSogpXn  
zomF <Kap  
X foXw0}  
:WBsn= ;B  
FYAy5(]  
%wOk:F6"  
三、接下来我们开始写Rss读取的实现代码,分成两部分: Q;67[F$  
Ou BRu`ib!  
},-1LhVG^  
1.首先需要一个ScriptManager、一个UpdatePanel、一个UpdateProgress。哈哈,都是废话AJAX页面程序大概都需要这些。其他的就是你的要求了。具体的页面代码如下: youkj dt[  
"?J- *Z  
1 <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %> T8{ 4Iz  
2 q0 AqBUOG  
3 <%@ Register Assembly="RssToolkit" Namespace="RssToolkit" TagPrefix="Rss" %> vj(t'qJ95  
4 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> ,S2aHF[&  
5 <html xmlns="http://www.w3.org/1999/xhtml"> @krt qU   
6 <head runat="server"> ?YbA_yG  
7 <title>向东博客阅读器|meil.livebaby.cn</title> rXnQ/ZBe  
8 <link href="CSS/Layout.css" rel="stylesheet" type="text/css" /> ex zx  
9 zd5`'^ap  
10 <script language="JavaScript" type="text/javascript"> N@pIp!  
11 var ls; r ;:Gk  
12 function ls_onClk(itemNumber) { )K|3\~  
13 4/#>gEe"  
14 if(ls == null) ls = $get("List0"); Qz_iJ  
15 ohCs~5c,n0  
16 ls.className = ""; I3s[y Gn8  
17 ls = $get("list" + itemNumber);  ANHa-rM  
18 ls.className = "current"; {g(sLM5  
19 return true; Ln;Ee *Bv  
20 } EXps2uf  
21 </script> {"0u4}&  
22 5twH pbY  
23 </head> Xi} "U-Xe  
24 <body> " _$1Vdff  
25 <form id="form1" runat="server"> j<AOltu  
26 <asp:ScriptManager ID="ScriptManager1" runat="server" /> Hr+Cgo~  
27 <div id="content-header"> P&vK.LX=  
28 <h1><asp:HyperLink ID="HyperLink1" runat="server" Text="向东" Target="_blank" NavigateUrl="http://meil.livebaby.cn/index.html"></asp:HyperLink> ;W@c~X  
29 博客阅读器</h1> HS5`W[&lS.  
30 </div> !H Ufqu  
31 <div id="content-container"> NPMOs["  
32 <div id="content-side1"> QLW@V>EK  
33 <ul class="list-of-links"> iAZe+M=&  
34 <li id="list0" class="current"> s2|INdS 1  
35 <asp:LinkButton ID="lb0" runat="server" CommandArgument="0" OnClientClick="ls_onClk(0);" OnCommand="lnk_cmd">向东博客</asp:LinkButton></li> 0lE+PP  
36 <li id="list1"> Q5T%%  
37 <asp:LinkButton ID="lb1" runat="server" CommandArgument="1" OnClientClick="ls_onClk(1);" OnCommand="lnk_cmd">财经博客</asp:LinkButton></li> ^9283wI,V  
38 <li id="list2"> X:_a1uZ  
39 <asp:LinkButton ID="lb2" runat="server" CommandArgument="2" OnClientClick="ls_onClk(2);" OnCommand="lnk_cmd">Flower博客</asp:LinkButton></li> >P fB dmn  
40 <li id="list3"> MKcC FE  
41 <asp:LinkButton ID="lb3" runat="server" CommandArgument="3" OnClientClick="ls_onClk(3);" OnCommand="lnk_cmd">活力宝贝博客网</asp:LinkButton></li> _bYU(8CEq  
42 <li id="list4"> E;Q/>!N(Z  
43 <asp:LinkButton ID="lb4" runat="server" CommandArgument="4" OnClientClick="ls_onClk(4);" OnCommand="lnk_cmd">悠悠宝贝的博客</asp:LinkButton></li> F;[ oCcf  
44 <li id="list5"> )TFAG{\m)  
45 <asp:LinkButton ID="lb5" runat="server" CommandArgument="5" OnClientClick="ls_onClk(5);" OnCommand="lnk_cmd"><font color="red">向东博客园博客</font></asp:LinkButton></li> "5DQmJ%c  
46 <li id="li6"> Jck'.CEb  
47 <asp:LinkButton ID="lb6" runat="server" CommandArgument="6" OnClientClick="ls_onClk(6);" OnCommand="lnk_cmd"><font color="red">博客园</font></asp:LinkButton></li> z LrUO PD  
48 </ul> _Ros U,n  
49 </div> aexXukJV  
50 <div id="content-main"> y[_mX ?  
51 <asp:UpdatePanel ID="updateMain" runat="server" UpdateMode="conditional" > qG @15X;  
52 <Triggers> :W9K*&i  
53 <asp:AsyncPostBackTrigger ControlID="lb0" /> (OSma  
54 <asp:AsyncPostBackTrigger ControlID="lb1" /> r|dE2:  
55 <asp:AsyncPostBackTrigger ControlID="lb2" /> x"$DvX  
56 <asp:AsyncPostBackTrigger ControlID="lb3" /> euE2Z}A  
57 <asp:AsyncPostBackTrigger ControlID="lb4" /> /T:CQ!gf  
58 <asp:AsyncPostBackTrigger ControlID="lb5" /> g(w }FLo  
59 <asp:AsyncPostBackTrigger ControlID="lb6" /> %, WZBO  
60 </Triggers> YH~"l{J$  
61 <ContentTemplate> Oq#@4'4E?g  
62 <h2><asp:Label ID="lblHeader" runat="server">最新日志</asp:Label></h2> ~p8AE;WI  
63 <hr /> D|@t XW  
64 <asp:Panel ID="pnlBlog" runat="server">  h<-/hZ}  
65 <Rss:RssDataSource ID="rssDS" runat="server" MaxItems="0" Url=""></Rss:RssDataSource> `h)24 j_-  
66 <asp:DataList ID="lsBlog" runat="server" DataSourceID="rssDS"> *.pr;Gw>  
67 <ItemTemplate> DJt90|%   
68 <asp:Panel ID="panelHeader" runat="server" Style="cursor: pointer; color: #d61719;width: 100%; display: block;"> Td m3Yp  
69 <span style="float: left;"><%# Eval("title") %></span> nt85`~{<  
70 <asp:Image ID="Image1" runat="server" Style="float: right;" ImageUrl="~/images/expand_blue.jpg" /> 9%s/w<{"  
71 </asp:Panel> d1rriKJ@  
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;"> ar f 72  
73 <%# Eval("description") %> ",-&B$E  
74 (<asp:HyperLink ID="hlMore" runat="server" NavigateUrl='<%# Eval("link") %>' Target="_blank" Text="更多内容"></asp:HyperLink>) ow CV`N  
75 </asp:Panel> w _E*>Sr  
76 <ajaxT:CollapsiblePanelExtender ID="cpe1" runat="server" TargetControlID="Panel1" :j "~  
77 ExpandControlID="panelHeader" CollapseControlID="panelHeader" SuppressPostBack="true" 9xsj[`)mu  
78 ImageControlID="Image1" Collapsed="true" ExpandedImage="~/images/collapse_blue.jpg" wnucw#U  
79 CollapsedImage="~/images/expand_blue.jpg" /> 5u0?iN*  
80 <hr style="border-bottom: 1px dotted #B2B2B2; margin: 0px;" /> 8g1m6"!t  
81 </ItemTemplate> T@\A6WFq  
82 </asp:DataList> I8<!)d@xz  
83 </asp:Panel> pHK&uyOV!  
84 </ContentTemplate> /H9D G(  
85 </asp:UpdatePanel> xo*$? |x  
86 </div> 2LC*We '  
87 </div> $9@&Q'ub  
88 <asp:UpdateProgress ID="UpdateProgress1" runat="server" DisplayAfter="0" DynamicLayout="true"> *C ?~qG  
89 <ProgressTemplate> (s!,+><d  
90 <div id="updProgress"> :r_d @R=  
91 <img alt="" src="images/indicator.gif" /> cXUx1+@Ry  
92 <span>数据获取中</span> !Q)8>,  
93 </div> HBL2/^'vy  
94 </ProgressTemplate> ^V#[qNG!{  
95 </asp:UpdateProgress> Bbqzb5  
96 </form> "<}kcu+):  
97 <center><div><a href="http://meil.livebaby.cn">meil.livebaby.cn</a>  程序制作:向东  2007.7</center> })KNia  
98 </body> <3ra(~b'  
99 </html> :om.PqM|+%  
100 dY05mY  
J(f(k@q  
比较重要的是这两部分: I-Am~N"!  
KkLhD))  
a) 行66:<Rss:RssDataSource ID="rssDS" runat="server" MaxItems="0" Url=""></Rss:RssDataSource> |^IxL@j=5  
在页面上建了一个Rss数据绑定控件,这是实现RSS读取的核心了,有了这个标记就实现了RSS读取的一半工作,那剩下的吶? +, n61szG  
H~vlQI)\  
看看下面者部分,lnk_cmd 命令实现了RSS数据的重绑定,这样你就可以实时的访问多个RSS地址了。每次点击相应的Rss链接,页面就会读取并显示相关Rss的内容了。 _{m'wk%  
如果你觉得这样还不够灵活,可以加个Textbox,然后用程序去绑定,这样也不错。不过,此次就不实现这个了,有兴趣的朋友可以试试,应该不难。哈哈! A?oZ?/Y  
S]ZTOi`4  
b) 行35:<asp:LinkButton ID="lb0" runat="server" CommandArgument="0" OnClientClick="ls_onClk(0);" )M<u,:D\v  
OnCommand="lnk_cmd">向东博客</asp:LinkButton></li> .YRn}#w B5  
Iux<`3 $]  
1 protected void lnk_cmd(object sender, CommandEventArgs e) (3jKk  
2 { R3UgX4Q|  
3 int command = Convert.ToInt32(e.CommandArgument); fai[AQA^Y  
4 %{rg@L1  
5 rssDataBind(command); y{G?`U$}=  
6 } fyCvy+K  
rssDataBind就是绑定的函数,代码是: xE NT-k&s  
1 protected void rssDataBind(int cmd) sY^Q-JVJ  
2 { Osya@[E5  
3 switch (cmd) |?nDB(q  
4 { Td=XNxmB  
5 case 0:  y 4]TT  
6 rssDS.Url = "http://www.livebaby.cn/blog/u/meil/rss2.xml"; P)F},ed  
7 lsBlog.DataBind(); d,mO\u*s|6  
8 lblHeader.Text = "向东博客"; ^24,O1)3  
9 break; Cv5(Wc  
10 case 1: QZuVnt  
11 rssDS.Url = "http://www.livebaby.cn/blog/u/money/rss2.xml"; Tmv%vK  
12 lsBlog.DataBind(); BY.wo!  
13 lblHeader.Text = "财经博客"; +;q'S!0z4  
14 break; Xf5%(/`C!  
15 case 2: .w B,] i  
16 rssDS.Url = "http://www.livebaby.cn/blog/u/flower/rss2.xml"; 3[Y~_KU,7  
17 lsBlog.DataBind(); KD7bgFPZ  
18 lblHeader.Text = "Flower博客"; 4eCp"bC_  
19 break; i-rh6g.{  
20 case 3: Q^gy.%  
21 rssDS.Url = "http://www.livebaby.cn/blog/rss2.asp"; $ ai1L8  
22 lsBlog.DataBind(); g5k*eEb r  
23 lblHeader.Text = "活力宝贝博客网"; &2#:b^i5m  
24 break; ^asA WSoM|  
25 case 4: :?YK8_=NW  
26 rssDS.Url = "http://www.livebaby.cn/blog/u/yoyo/rss2.xml"; f 3'j6  
27 lsBlog.DataBind(); ,f#LWJ_amt  
28 lblHeader.Text = "悠悠宝贝的博客"; CGWbH.EfNz  
29 break; ]%fo6b{  
30 case 5: L$6ct=\u*l  
31 rssDS.Url = "http://www.cnblogs.com/meil/rss"; O__b[a .  
32 lsBlog.DataBind(); ^~Dqn.>J  
33 lblHeader.Text = "向东博客园博客"; ^G<,?.X  
34 break; `&nmj1;  
35 case 6: S|z6{kgvp  
36 rssDS.Url = "http://www.cnblogs.com/rss"; bN{1qN~&  
37 lsBlog.DataBind(); y }\\-)!\  
38 lblHeader.Text = "博客园"; A6,%z&C8K  
39 break; -2yJ,Of5  
40 default: Mg\:?$>  
41 break; $@0M0<_1~  
42 } 1KPZ; 0  
43 } Ga`"J$cHM  
就这么简单 =Z#~y!?  
rssDS.Url = "http://www.livebaby.cn/blog/u/meil/rss2.xml"; R0*{4R N  
lsBlog.DataBind(); 8w 0^:N|  
是不是就如DB数据的绑定。MS的东西虽然结构性不好,但是上手真的好快。 4 Z73{V  
到底需要多少个Case就看你的需要了。我这里就绑定了六个RSS地址,你还可以更多,但要注意的是一定要和页面上的LinkButton数对应上。 D*,EQW#_  
>*OZcDj/dJ  
最终的C#代码如下: Lt"qH8}l  
1 protected void rssDataBind(int cmd) pTs6~WxXc,  
2 { =` mTABY  
3 switch (cmd) N1<:hBmR  
4 { >SL%GVS  
5 case 0: [P \x\y  
6 rssDS.Url = "http://www.livebaby.cn/blog/u/meil/rss2.xml"; "KEG`}#C  
7 lsBlog.DataBind(); X9>^.H6   
8 lblHeader.Text = "向东博客"; /T*}LW[$B  
9 break; TTAI*M1th  
10 case 1: 6.gJ uu  
11 rssDS.Url = "http://www.livebaby.cn/blog/u/money/rss2.xml"; v <SWAbG  
12 lsBlog.DataBind(); 4i%$.i7K  
13 lblHeader.Text = "财经博客"; ; F-eS 0  
14 break; I}PxYG  
15 case 2: R"g_u `\  
16 rssDS.Url = "http://www.livebaby.cn/blog/u/flower/rss2.xml"; ZNh;~xk  
17 lsBlog.DataBind(); ]cO)-wL  
18 lblHeader.Text = "Flower博客"; k7uapN  
19 break; W(v.8>_|q  
20 case 3: `![.U2a#  
21 rssDS.Url = "http://www.livebaby.cn/blog/rss2.asp"; ql>B& PS  
22 lsBlog.DataBind(); 1fs,0lU)  
23 lblHeader.Text = "活力宝贝博客网"; :t=:/ZW  
24 break; \G!r`$W(  
25 case 4: &`To#X +  
26 rssDS.Url = "http://www.livebaby.cn/blog/u/yoyo/rss2.xml"; !AXP$(C  
27 lsBlog.DataBind(); (aw*"^P e5  
28 lblHeader.Text = "悠悠宝贝的博客"; V[eW%+(<  
29 break; oI>+n$.G  
30 case 5: 3'9R]fqmw  
31 rssDS.Url = "http://www.cnblogs.com/meil/rss"; U@I<$.1+  
32 lsBlog.DataBind(); I&uRgUb  
33 lblHeader.Text = "向东博客园博客"; [ uXhRpj  
34 break; B_rW\  
35 case 6: J` V!= M  
36 rssDS.Url = "http://www.cnblogs.com/rss"; 3WH_78s&R  
37 lsBlog.DataBind(); o(,nD#O?mU  
38 lblHeader.Text = "博客园"; Uu 7zb|  
39 break; (!a}Lu,  
40 default: 0@$sx<e  
41 break; zpOqLGy6i  
42 } e e-J#|w6  
43 } 8r>J"-cU  
k dpY(  
-------------------------------------------------------------------------------- {Slq  
v8-l[au4>  
CEJwpL  
什么是 Rss ? 4W].bB8  
0FS%DPdML  
  讨论与Blog相关的技术,不可不谈的就是RSS,这个缩写在英文中可以有几个源头,并被不同的技术团体做不同的解释。既可以是“Rich Site Summary”,或“RDF Site Summary”,也可以是“Really Simple Syndication”。为什么有这么多含义呢?这还要从RSS的一段今天也没有理清的关系说起。 Vjb<m  
[ #$;  
js (D@1  
  今天肯定有人还记得IE 4刚刚推出来的时候有一个有趣的功能,那就是新闻频道。这个新闻频道的功能与Netscape推出的新闻频道是很相似的(当时Netscape还是市场上领先的浏览器)。为此Netscape 定义了一套描述新闻频道的语言,这就是RSS,只不过Netscape自当时起每况愈下,所以最终也没有发布一个正式的RSS规范(只发布了一个0.9版本)。而微软也在当时推出了支持自己IE的CDF(Channel Definition Format)数据规格,与RSS非常接近。微软试图用新闻频道的功能把“推”(Push)技术变成一个应用主流,并与Netscape抗衡。不过出乎预测的是,“推”技术自始至终没有找到合适的商业模型,而且伴随着其他各类网络特性的出现,也日益无法显现自身的优势。新闻频道在浏览器中的地位最终日暮西山,最后也在IE的后续版本中消失了。 VV2%g#Qy  
\([Ac{]  
  新闻频道的确进入了低谷,但是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两个阵营,也由此引起了在专业人群中的广泛争论。 YMo|cgr  
u%W{uwW  
  因为争论的存在,一直到今天,RSS 1.0还没有成为标准化组织的真正标准。而戴夫·温那却在2002年9月独自把RSS升级到了2.0版本,其中的定义完全是全新的模式,并没有任何 Rss 1.0的影子。这引发了网络上进一步争议,究竟让一个越来越普及的数据格式成为一个开放的标准,还是被一家公司所定义和控制,成为了争议的焦点。戴夫·温那并没有为自己辩解,他的观点是RSS还需要进一步发展,需要专业人士更明确的定义,不过恐怕这种轻描淡写不能消除人们对 Rss “被一家商业公司独占”的担心。 R&$eFpX#  
3E)5N00_  
  前面的铺垫对用户来说也许没有什么太大的意义,可能更多人关心如何在自己的Blog增加 Rss 输出,这样可以让很多新闻聚合工具(例如CNBlog刚刚推荐的NewzCrawler)很容易找到你并自动获得你在Blog中的更新内容。 pFoLG a5  
0$8Y#F[s  
  它是什么:站点用来和其他站点之间共享内容的简易方式(也叫聚合内容)。 Rss 使肵ML作为彼此共享内容的标准方式。 wdxuDlo  
%2i{w( '[  
  它代表什么:Really Simple Syndication (或RDF Site Summary,RDF站点摘要) $^T1U,8?'  
LO?QWT1oe  
  例如:一些免费的软件能够让你阅读那些RSS使能的站点,比如 NewsIsFree 和 Amphetadesk。 EB+VNtDPVy  
/m3 }c'  
  它有什么用处:让别人容易的发现你已经更新了你的站点,让人们很容易的追踪他们阅读的所有weblogs。 /cN\X+  
<Bmxt#">  
源码地址:http://www.cnblogs.com/Files/meil/ReaderRss.rar T Nuf7W7  
Jc"h}4<  
JpE' Os"  
本文永久地址: http://www.livebaby.cn/blog/u/meil/archives/2007/1169.html 查看本文来源
    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章