天天看點

web2.0時代 用Asp.Net寫Rss,你會了嗎?

RSS是站點與站點之間共享内容的一種簡易方式(也稱為“聚合内容”),通常被用于新聞和其他按順序排列的網站,例如Blog網站。網站提供RSS輸出,有利于讓使用者發現網站内容的更新。網站使用者可以在用戶端借助于類似新聞資訊閱讀器等支援RSS的新聞聚合工具軟體,在不打開網站内容頁面的情況下閱讀支援RSS輸出的網站内容。

RSS是基于XML的一種形式。并且所有的RSS檔案都要遵守網際網路聯盟(W3C)站點釋出的XML 1.0規範。具體格式可以查一下RSS 2.0規範,這裡就不再重複粘貼了。

下面是總結的幾種RSS的技術實作代碼:

1.線上生成RSS聚合頁。

(1)建立Rss.aspx <%@ Page language="c#" Codebehind="Rss.aspx.cs" AutoEventWireup="false" Inherits="LiTianPing.Rss" %> 隻留下這一行,其餘的都删掉。

(2)背景代碼;Rss.aspx.cs

private void Page_Load(object sender, System.EventArgs e)

 {

 Response.ContentType="text/xml";

 Response.Write(GetRSS());

 }

 /// <summary>

 /// 取得聚合文章

 /// </summary>

 /// <returns></returns>

 public string GetRSS()

 {

 News t=new News();//自己的業務類

 DataSet ds=t.GetListByClass(1);//根據類别得到資料

 StringBuilder strCode=new StringBuilder();

 strCode.Append("<?xml version=/"1.0/" encoding=/"utf-8/" standalone=/"yes/" ?>");

 strCode.Append("<rss version='2.0' xmlns:dc=/"http://purl.org/dc/elements/1.1//"");

 strCode.Append(" xmlns:trackback=/"http://madskills.com/public/xml/rss/module/trackback//" ");

 strCode.Append(" xmlns:wfw=/"http://wellformedweb.org/CommentAPI//" xmlns:slash=/"http://purl.org/rss/1.0/modules/slash//">");

 strCode.Append("<channel>");

 strCode.Append("<title>李天平RSSDemo</title>");

 strCode.Append("<link>http://"+Request.ServerVariables["SERVER_NAME"]+"</link> ");

 strCode.Append("<description>天道酬勤</description> ");

 strCode.Append("<copyright>Copyright 2005</copyright> ");

 foreach(DataRow row in ds.Tables[0].Rows)

 {

 string Id=row["Id"].ToString();

 string title=row["title"].ToString();

 string description=row["description"].ToString();

 string pubdate=row["pubdate"].ToString();

 string ClassId=row["ClassId"].ToString();

 //string author=row["author"].ToString();

 strCode.Append("<item>");

 strCode.Append("<title>"+title+"</title>");

 strCode.Append("<link>http://"+Request.ServerVariables["SERVER_NAME"]+"/NewsShow.aspx?ID="+Id+"</link>");

 strCode.Append("<subject>"+description+"</subject>");

 strCode.Append("<description><![CDATA["+description+"]]></description>");

 strCode.Append("<PubDate>"+pubdate+"</PubDate>");

 strCode.Append("<category>"+ClassId+"</category>");

 strCode.Append("</item>");

 }

 strCode.Append("</channel>");

 strCode.Append("</rss>");

 return strCode.ToString();

 }

(3) XmlTextWriter實作方式2;Rss.aspx.cs

string xmlDoc="rss.xml";

 private void Page_Load(object sender, System.EventArgs e)

 {

 xmlDoc=Server.MapPath(".")+xmlDoc;

 GetRSS2();

 XmlDocument doc= new XmlDocument();

 doc.Load(xmlDoc);

 Response.ContentType = "text/xml";

 doc.Save(Response.Output);

 }

 /// <summary>

 /// 取得聚合文章

 /// </summary>

 /// <returns></returns>

 public void GetRSS2()

 {

 News t=new News();

 DataSet ds=t.GetListByClass(1);

 XmlTextWriter writer = new XmlTextWriter(xmlDoc,Encoding.UTF8);

 writer.Formatting = Formatting.Indented;

 writer.WriteStartDocument(true);

 writer.WriteComment("RSS頁的實作");

 writer.WriteStartElement("rss");

 writer.WriteAttributeString("version","2.0");

 writer.WriteStartElement("channel");

 writer.WriteStartElement("title");

 writer.WriteString("李天平RSSDemo");

 writer.WriteEndElement();

 writer.WriteStartElement("link");

 writer.WriteString("http://"+Request.ServerVariables["SERVER_NAME"]);

 writer.WriteEndElement();

 writer.WriteStartElement("description");

 writer.WriteString("天道酬勤");

 writer.WriteEndElement();

 writer.WriteStartElement("copyright");

 writer.WriteString("Copyright 2005");

 writer.WriteEndElement();

 writer.WriteStartElement("language");

 writer.WriteString("zh-cn");

 writer.WriteEndElement();

 foreach(DataRow row in ds.Tables[0].Rows)

 {

 string Id=row["Id"].ToString();

 string title=row["title"].ToString();

 string description=row["description"].ToString();

 string pubdate=row["pubdate"].ToString();

 string ClassId=row["ClassId"].ToString();

 //string author=row["author"].ToString();

 writer.WriteStartElement("item");

 writer.WriteStartElement("title");

 writer.WriteString(title);

 writer.WriteEndElement();

 writer.WriteStartElement("link");

 writer.WriteString("http://"+Request.ServerVariables["SERVER_NAME"]+"/NewsShow.aspx?ID="+Id) ;

 writer.WriteEndElement();

 writer.WriteStartElement("description");

 writer.WriteCData(description);

 writer.WriteEndElement();

 writer.WriteStartElement("pubDate");

 writer.WriteString(pubdate);

 writer.WriteEndElement();

 writer.WriteStartElement("category");

 writer.WriteString(ClassId);

 writer.WriteEndElement();

 writer.WriteEndElement();

 }

 writer.WriteEndElement();

 writer.WriteEndElement();

 writer.Flush();

 writer.Close();

 }

2.線上RSS閱讀擷取。

頁面代碼:

<P style="FONT-SIZE: 11px">

 Feed種子:<asp:TextBox id="FeedUrl" runat="server" Width="440px"></asp:TextBox><BR>

 顯示條數:<asp:TextBox id="Num" runat="server" Width="48px"></asp:TextBox></P>

 <P style="FONT-SIZE: 11px">

 <asp:Button id="GetFeed" runat="server" Text="獲得RSS"></asp:Button><BR>

 <BR>

 <asp:Label id="RssFeed" runat="server"></asp:Label></P>

背景代碼:

/// <summary>

 /// 獲得要顯示的Feed種子資料

 /// </summary>

 /// <param name="RssUrl"></param>

 /// <param name="showNewsCount"></param>

 /// <returns></returns>

 public string LoadRSS(string RssUrl, int showNewsCount)

 {

 string strRssList = "";

 string strMsg;

 try

 {

 XmlDocument objXMLDoc = new XmlDocument();

 objXMLDoc.Load(RssUrl);

 XmlNodeList objItems = objXMLDoc.GetElementsByTagName("item");

 if(showNewsCount > 30)

 showNewsCount = 10;

 if(showNewsCount < 1)

 showNewsCount = objItems.Count;

 string title="";

 string link="";

 int i;

 if(objXMLDoc.HasChildNodes == true)

 {

 i = 1;

 foreach(XmlNode objNode in objItems)

 {

 if(i<=showNewsCount)

 {

 if(objNode.HasChildNodes == true)

 {

 XmlNodeList objItemsChild = objNode.ChildNodes;

 foreach(XmlNode objNodeChild in objItemsChild)

 {

 switch(objNodeChild.Name)

 {

 case "title":

 title = objNodeChild.InnerText;

 break;

 case "link":

 link = objNodeChild.InnerText;

 break;

 }

 }

 i = i+1;

 strRssList += "<a href=" + link +" target="_blank" rel="external nofollow" target=_blank>" + title + "</a><br>";

 }

 }

 }

 }

 strMsg = strRssList;

 }

 catch

 {

 strMsg = "RSS Feed 源資料出錯!";

 }

 return strMsg;

 }

 //擷取按鈕,擷取指定RSS

 private void GetFeed_Click(object sender, System.EventArgs e)

 {

 if(FeedUrl.Text == "")//RSS位址

 {

 RssFeed.Text = "資訊源不能為空,您可重新整理重試或聯系管理者!";

 return ;

 }

 RssFeed.Text = LoadRSS(FeedUrl.Text,Convert.ToInt32(Num.Text)); //擷取指定數目

 }

3.無重新整理動态更新的線上RSS閱讀擷取

<%@ Page language="c#" Codebehind="XmlHttp.aspx.cs" AutoEventWireup="false" Inherits="LiTianPing.XmlHttp" %>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >

<HTML>

 <HEAD>

 <title>XmlHttp</title>

 <meta name="GENERATOR" Content="Microsoft Visual Studio .NET 7.1">

 <meta name="CODE_LANGUAGE" Content="C#">

 <meta name="vs_defaultClientScript" content="JavaScript">

 <meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">

 <style>td { font-size: 9pt}

 </style>

 <script>

 <!--

 var oDiv

 var xh

 function getXML()

 {

 xh =new ActiveXObject("Microsoft.XMLHTTP");

 oDiv = document.getElementById("rssitem");

 oDiv.style.display= "";

 try

 {

 //如果是本地改成下面語句直接讀取

 //xh.open("GET","/Rss.aspx",false);

 xh.open("GET","Http://ltp.cnblogs.com/Rss.aspx",false);

 xh.send(null);

 loadData(xh,oDiv);

 }

 catch(e)

 {

 error(oDiv);

 }

 }

 function loadData(xh,oDiv)

 {

 if (xh.readyState == 4)

 {

 xml = xh.responsexml;

 var i;

 var nodes = xml.selectNodes("/rss/channel/item");

 var bloglink = xml.selectSingleNode("/rss/channel/link").text;

 oDiv.innerHTML = "";

 var html;

 for(i=0;i<nodes.length;i++)

 {

 html += "<div >";

 html += " <div >";

 html += " <a class=font1 href='" +nodes[i].selectSingleNode("link").text + "' target='_blank'>" + nodes[i].selectSingleNode("title").text +"</a><BR><BR>";

 html += " </div>";

 html += " <div >";

 html += " " +nodes[i].selectSingleNode("description").text;

 html += " </div>"

 //html += " </div>";

 html += "</div><hr>";

 }

 oDiv.innerHTML = html;

 }

 else

 {

 error(oDiv);

 }

 }

 function error(oDiv)

 {

 oDiv.innerHTML = "載入失敗";

 }

 -->

 </script>

 </HEAD>

 <body MS_POSITIONING="GridLayout" οnlοad="window.setTimeout('getXML()',200);">

 <form id="Form1" method="post" runat="server">

 <div align=center>

 <table cellpadding="0" cellspacing="0" width="80%">

 <tr>

 <td>

 <div id="rssitem" style="WIDTH:80%">資料載入中...</div>

 </td>

 </tr>

 </table>

 </div>

 </form>

 </body>

</HTML>