`
sogotobj
  • 浏览: 662634 次
  • 性别: Icon_minigender_2
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

博客园转载:Web2.0时代,RSS你会用了吗?(技术实现总结)

阅读更多

Web2.0时代,RSS你会用了吗?(技术实现总结)

如见Web2.0被吵的如火如荼,同时也有很多的评论褒贬不一。有人说Web2.0就是“一帮人在看皇帝的新装而已”。也有人说Web2.0将是一场变革。无论这些争论有没有价值,但我相信,存在就有它的必然性。也许Web2.0更像是一种商业模式,一个观念的变革而非技术。
不管怎样,它来了,你准备好了吗?
说到Web2.0,就会提到Blog、TAG、SNS、RSS、wiki这些软件应用和xml、ajax等这些新理论和技术实现。
RSS毋容置疑就是其重要的应用之一。

那么什么是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();
}


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>" + 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" onload="window.setTimeout('getXML()',200);">
<form id="Form1" method="post" runat="server">
<div align=center>
<table cellpadding="0" cellspacing="0" border="0" width="80%">
<tr>
<td>
<div id="rssitem" style="WIDTH:80%">数据载入中...</div>
</td>
</tr>
</table>
</div>
</form>
</body>
</HTML>

<!-- <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/"> <rdf:Description rdf:about="http://ltp.cnblogs.com/archive/2006/01/15/317725.html" dc:identifier="http://ltp.cnblogs.com/archive/2006/01/15/317725.html" dc:title="Web2.0时代,RSS你会用了吗?(技术实现总结)" trackback:ping="http://ltp.cnblogs.com/services/trackbacks/317725.aspx" /> </rdf:RDF> -->

评论

误人子弟啊!害人不浅啊~
怎么可以用string builder去拼xml?纯粹瞎搞……
用XMLDocument!!!!!!!!!

#re: Web2.0时代,RSS你会用了吗?(技术实现总结) 2006-01-16 01:26 我菜故我学
我不觉得楼主这个地方用string builder有什么不妥,呵呵

#re: Web2.0时代,RSS你会用了吗?(技术实现总结) 2006-01-16 07:11 musicllm
考虑到性能的问题,用stringbuilder,再者用xmldocument这里并不见得好多少,反而降低代码可读性,主管的看法

#re: Web2.0时代,RSS你会用了吗?(技术实现总结) 2006-01-16 08:50 [天道酬勤]
@Wuvist ,用StringBuilder 如何不妥?请多指教!
#re: Web2.0时代,RSS你会用了吗?(技术实现总结) 2006-01-16 01:06 Wuvist
分享到:
评论

相关推荐

    博客园精华集.Web标准之道

    《博客园精华集.Web标准之道》是一本涵盖了Web开发领域核心知识的精选合集,它主要聚焦于Web标准,这是构建高效、可访问且具有良好用户体验的网页所必需的基础。Web标准涉及HTML、CSS、JavaScript等多个方面,对于...

    博客园精华集_Web标准之道.pdf

    博客园精华集_Web标准之道.pdf 是一本专注于Web技术的文集,由博客园中的知名博主们共同编著。这本书不仅包含了丰富的技术内容,还融入了作者们对于Web设计理念和心得的深入探讨。书中所涉及的主题范围广泛,包括Web...

    asp.net WebAPI OWIN OAuth2.0授权自定义返回结果及错误或异常问题处理办法

    asp.net WebAPI OWIN OAuth2.0授权自定义返回结果及错误或异常问题处理核心代码,详情: https://www.cnblogs.com/wgx0428/p/12315546.html

    博客园源代码

    博客园是中国知名的IT技术交流平台,为开发者提供了一个分享、学习和讨论技术的场所。"博客园源代码"指的是该网站的部分或全部源代码,尤其是提及的"CNBlogsDottext10Beta2",这可能是指博客园使用的开源博客系统...

    博客园的源码

    博客园的源码是一个宝贵的学习资源,特别是对于那些想要深入了解Web开发、前端技术以及Android应用开发的IT从业者。这个源码提供了博客园网站及其Android应用的实际实现,让我们有机会探究其背后的架构设计和技术栈...

    博客园客户端

    为了实现这些功能,博客园客户端在技术实现上可能采用了以下技术栈: 1. **安卓开发环境**:使用Java或Kotlin语言进行开发,结合Android Studio IDE进行代码编写和调试。 2. **网络请求**:可能使用了OkHttp或者...

    博客园主题eXtremelySimple极简

    博客园主题eXtremelySimple是一款专为博客园平台设计的简洁、高效的皮肤。这款主题以其极简的设计理念,提供了一种清爽的阅读体验,旨在让博主的原创内容成为焦点,减少不必要的视觉干扰。在这款主题中,JavaScript...

    博客园安卓版客户端android源码完整版

    【标题】:“博客园安卓版客户端android源码完整版”是指提供了一个用于开发和学习的博客园移动应用的Android源代码。这个源码版本可能是某个开发者或者团队分享出来的一个项目,目的是为了让其他开发者能够理解其...

    博客园博客PDF生成器

    博客园博客PDF生成器是一款专为博客园用户设计的实用工具,它允许用户将自己在博客园上发表的文章集合导出为PDF格式的文档,方便离线阅读、备份或者分享。这款工具通常适用于那些希望保存自己的博客内容或者需要将一...

    博客园文章爬取代码

    博客园文章爬取代码是一个基于Java的项目,用于自动化地从博客园网站抓取特定博主的文章并将其保存为Word文档。这个项目对于那些对网络爬虫技术感兴趣的开发者来说,是一个很好的学习和实践案例。以下是对这个项目的...

    知乎日报风格的博客园

    【标题】:“知乎日报风格的博客园”指的是将博客园(CNBlogs)网站的设计风格与知乎日报的界面设计理念相结合,创造出一种融合了两者特点的全新用户体验。这种风格可能包括简洁明快的布局、易于阅读的字体、以及...

    js练习4:使用HTML5验证博客园注册页面.zip

    北大青鸟作为知名的IT培训机构,常常会通过类似的实战项目来提升学员的技能。 首先,HTML5引入了新的表单控件和属性,如`&lt;input type="email"&gt;`用于电子邮件输入,`&lt;input type="tel"&gt;`用于电话号码输入,以及`...

    博客园导航

    在本案例中,我们探讨的是如何使用jQuery和CSS这两种技术来创建一个高效、实用的博客园导航菜单。 首先,jQuery是一个强大的JavaScript库,它简化了JavaScript的DOM操作、事件处理、动画效果以及Ajax交互。在构建...

    博客园镜像镜像nuget.txt

    - **安全性考量**:虽然博客园是值得信赖的技术社区,但从安全角度出发,建议定期检查所使用镜像的安全性和可靠性。 综上所述,博客园NuGet镜像为.NET开发者提供了极大的便利,不仅加快了包的下载速度,还提高了...

    JSP项目开发博客园.rar

    【JSP项目开发博客园.rar】是一个压缩包文件,它包含的是《JSP项目开发全程实录》一书的相关教学视频资源,特别是针对博客园这个知名技术社区的项目开发实例。JSP(JavaServer Pages)是Java平台上的一个用于创建...

    博客园客户端android源码

    博客园客户端Android源码分析 博客园是一款深受程序员喜爱的在线技术分享平台,其客户端提供了方便的移动阅读体验。分析博客园的Android源码,我们可以深入理解如何构建一个功能完善的移动应用,特别是针对技术社区...

    你必须知道的.net(博客园整理)

    总结而言,《你必须知道的.NET》不只是一套课程或是一系列文章,它是对.NET框架一次全面而深刻的探讨,它在帮助开发者理解.NET平台的同时,也为他们提供了提升自身技术能力的机会。无论是.NET的新手还是有经验的老手...

Global site tag (gtag.js) - Google Analytics