zoukankan      html  css  js  c++  java
  • AJAX实践:开发你自己的RSS在线阅读器

    Rss 是一种描述和同步网站内容的格式,是目前使用最广泛的XML应用。RSS 搭建了信息迅速传播的一个技术平台,使得每个人都成为潜在的信息提供者。发布一个 Rss 文件后,这个 Rss Feed中包含的信息就能直接被其他站点调用,而且由于这些数据都是标准的XML格式,所以也能在其他的终端和服务中使用。
      
       在之前我们如果要实现博客的RSS订阅,通常都需要手写代码去生产或读取XML。现在有了RSSToolKit,这一切就变得简单了。你可以使用他在五分钟内实现自己的 Rss 在线阅读器。这篇文章将介绍如何读取站点 Rss 信息。
      
      开发环境:VS2005 + RSSToolKit
      
      一、首先我们需要建立一个ASP.NET AJAX站点
      
      
       二、引入RssToolKit到项目中,建好的项目如下(CSS和图片文件可以使用我压缩文档里的)
      
      三、可以开始写代码了
       1.首先需要一个ScriptManager、一个UpdatePanel、一个UpdateProgress。哈哈,都是废话AJAX页面程序大概都需要这些。其他的就是你的要求了。具体的页面代码如下:
       1 <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
       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; 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; 100%; background: transparent url(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
      比较重要的是这两部分:
      行66:<Rss:RssDataSource ID="rssDS" runat="server" MaxItems="0" Url=""></Rss:RssDataSource>
      这就是实现RSS读取的核心了,有了这个标记就实现了RSS读取的一半工作,那剩下的吶?
      
      看看下面者部分,lnk_cmd 命令实现了RSS数据的重绑定,这样你就可以实时的访问多个RSS地址了。如果你觉得这样还不够灵活,可以加个Textbox,然后用程序去绑定,这样也不错。不过,此次就不实现这个了,有兴趣的朋友可以试试,应该不难。哈哈!
      
      行35:<asp:LinkButton ID="lb0" runat="server" CommandArgument="0" OnClientClick="ls_onClk(0);"
       OnCommand="lnk_cmd">向东博客</asp:LinkButton></li>
      1 protected void lnk_cmd(object sender, CommandEventArgs e)
      2 {
      3 int command = Convert.ToInt32(e.CommandArgument);
      4
      5 rssDataBind(command);
      6 }
      rssDataBind就是绑定的函数,代码是:
       1 protected void rssDataBind(int cmd)
       2 {
       3 switch (cmd)
       4 {
       5 case 0:
       6 rssDS.Url = "http://www.livebaby.cn/blog/u/meil/rss2.xml";
       7 lsBlog.DataBind();
       8 lblHeader.Text = "向东博客";
       9 break;
      10 case 1:
      11 rssDS.Url = "http://www.livebaby.cn/blog/u/money/rss2.xml";
      12 lsBlog.DataBind();
      13 lblHeader.Text = "财经博客";
      14 break;
      15 case 2:
      16 rssDS.Url = "http://www.livebaby.cn/blog/u/flower/rss2.xml";
      17 lsBlog.DataBind();
      18 lblHeader.Text = "Flower博客";
      19 break;
      20 case 3:
      21 rssDS.Url = "http://www.livebaby.cn/blog/rss2.asp";
      22 lsBlog.DataBind();
      23 lblHeader.Text = "活力宝贝博客网";
      24 break;
      25 case 4:
      26 rssDS.Url = "http://www.livebaby.cn/blog/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 = "http://www.livebaby.cn/blog/u/meil/rss2.xml";
       lsBlog.DataBind();
      是不是就如DB数据的绑定。MS的东西虽然结构性不好,但是上手真的好快。
      到底需要多少个Case就看你的需要了。我这里就绑定了六个RSS地址,你还可以更多,但要注意的是一定要和页面上的LinkButton数对应上。
      
      最终的C#代码如下:
       1 protected void rssDataBind(int cmd)
       2 {
       3 switch (cmd)
       4 {
       5 case 0:
       6 rssDS.Url = "http://www.livebaby.cn/blog/u/meil/rss2.xml";
       7 lsBlog.DataBind();
       8 lblHeader.Text = "向东博客";
       9 break;
      10 case 1:
      11 rssDS.Url = "http://www.livebaby.cn/blog/u/money/rss2.xml";
      12 lsBlog.DataBind();
      13 lblHeader.Text = "财经博客";
      14 break;
      15 case 2:
      16 rssDS.Url = "http://www.livebaby.cn/blog/u/flower/rss2.xml";
      17 lsBlog.DataBind();
      18 lblHeader.Text = "Flower博客";
      19 break;
      20 case 3:
      21 rssDS.Url = "http://www.livebaby.cn/blog/rss2.asp";
      22 lsBlog.DataBind();
      23 lblHeader.Text = "活力宝贝博客网";
      24 break;
      25 case 4:
      26 rssDS.Url = "http://www.livebaby.cn/blog/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 }  
  • 相关阅读:
    jekins测试环境自动化
    jenkins
    git
    maven
    spring boot 1
    jmeter 常用函数
    Jmeter之BeanShell--请求失败触发报警邮件
    Python_任意文件中获取项目的绝对路径
    Python_logging在多模块项目中日志输出应用
    Python--判断Mysql启动状态并人工干预下完成启动
  • 原文地址:https://www.cnblogs.com/lds85930/p/916342.html
Copyright © 2011-2022 走看看