如見Web2.0被吵的如火如荼,同時(shí)也有很多的評(píng)論褒貶不一。有人說Web2.0就是“一幫人在看皇帝的新裝而已”。也有人說Web2.0將是一場(chǎng)變革。無論這些爭(zhēng)論有沒有價(jià)值,但我相信,存在就有它的必然性。也許Web2.0更像是一種商業(yè)模式,一個(gè)觀念的變革而非技術(shù)。
不管怎樣,它來了,你準(zhǔn)備好了嗎?
說到Web2.0,就會(huì)提到Blog、TAG、SNS、RSS、wiki這些軟件應(yīng)用和xml、ajax等這些新理論和技術(shù)實(shí)現(xiàn)。
RSS毋容置疑就是其重要的應(yīng)用之一。
那么什么是RSS?它到底有什么用呢?
RSS是站點(diǎn)與站點(diǎn)之間共享內(nèi)容的一種簡(jiǎn)易方式(也稱為“聚合內(nèi)容”),通常被用于新聞和其他按順序排列的網(wǎng)站,例如Blog網(wǎng)站。網(wǎng)站提供RSS輸出,有利于讓用戶發(fā)現(xiàn)網(wǎng)站內(nèi)容的更新。網(wǎng)站用戶可以在客戶端借助于類似新聞資訊閱讀器等支持RSS的新聞聚合工具軟件,在不打開網(wǎng)站內(nèi)容頁面的情況下閱讀支持RSS輸出的網(wǎng)站內(nèi)容。
RSS是基于XML的一種形式。并且所有的RSS文件都要遵守萬維網(wǎng)聯(lián)盟(W3C)站點(diǎn)發(fā)布的XML 1.0規(guī)范。具體格式可以查一下RSS 2.0規(guī)范,這里就不再重復(fù)粘貼了。
下面是我總結(jié)的幾種RSS的技術(shù)實(shí)現(xiàn)代碼:
1.在線生成RSS聚合頁。
(1)創(chuàng)建Rss.aspx
<%@ Page language="c#" Codebehind="Rss.aspx.cs" AutoEventWireup="false" Inherits="LiTianPing.Rss" %>
只留下這一行,其余的都刪掉。
(2)后臺(tái)代碼實(shí)現(xiàn)方式1;Rss.aspx.cs
private void Page_Load(object sender, System.EventArgs e)
{
Response.ContentType="text/xml";
Response.Write(GetRSS());
}
///
/// 取得聚合文章
/// ///
public string GetRSS()
{
News t=new News();//自己的業(yè)務(wù)類
DataSet ds=t.GetListByClass(1);//根據(jù)類別得到數(shù)據(jù)
StringBuilder strCode=new StringBuilder();
strCode.Append("");
strCode.Append("
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("");
strCode.Append("李天平RSSDemo");
strCode.Append("http://"+Request.ServerVariables["SERVER_NAME"]+" ");
strCode.Append("天道酬勤 ");
strCode.Append("Copyright 2005 ");
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("- ");
strCode.Append(""+title+"");
strCode.Append("http://"+Request.ServerVariables["SERVER_NAME"]+"/NewsShow.aspx?ID="+Id+"");
strCode.Append(""+description+"");
strCode.Append("");
strCode.Append(""+pubdate+"");
strCode.Append(""+ClassId+"");
strCode.Append(" ");
}
strCod
.Append("");
strCode.Append("");
return strCode.ToString();
}
(3) XmlTextWriter實(shí)現(xiàn)方式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);
}
///
/// 取得聚合文章
/// ///
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頁的實(shí)現(xiàn)");
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.W
iteStartElement("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(" 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();
&
bsp;writer.Flush();
writer.Close();
}
2.在線RSS閱讀獲取。
頁面代碼:
Feed種子:<asp:TextBox id="FeedUrl" runat="server" Width="440px">
顯示條數(shù):<asp:TextBox id="Num" runat="server" Width="48px">
后臺(tái)代碼:
///
/// 獲得要顯示的Feed種子數(shù)據(jù)
/// ///
///
///
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;
&
bsp; 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 += "
" + title + "";
} &
bsp;
}
}
}
strMsg = strRssList;
}
catch
{
strMsg = "RSS Feed 源數(shù)據(jù)出錯(cuò)!";
}
return strMsg;
}
//獲取按鈕,獲取指定RSS
private void GetFeed_Click(object sender, System.EventArgs e)
{
if(FeedUrl.Text == "")//RSS地址
{
RssFeed.Text = "信息源不能為空,您可刷新重試或聯(lián)系管理員!";
return ;
}
RssFeed.Text = LoadRSS(FeedUrl.Text,Convert.ToInt32(Num.Text)); //獲取指定數(shù)目
}
3.無刷新動(dòng)態(tài)更新的在線RSS閱讀獲取
<%@ Page language="c#" Codebehind="XmlHttp.aspx.cs" AutoEventWireup="false" Inherits="LiTianPing.XmlHttp" %>
XmlHttp