RSS是在互联网上被广泛采用的内容包装和投递协议。网络用户可以在客户端借助于支持RSS的新闻工具软件,在不打开网站内容页面的情况下,阅读支持RSS输出的网站内容。内容提供者在其网站上发布相应的RSS文件,系统入口程序获取该RSS文件并把它提供给用户,用户使用相应的阅读工具软件来阅读该内容。
5.3.1 RSS的工作原理
网页以RSS的形式为其内容提供一个通过URL获得的摘要。RSS摘要文件包含新闻项,每一个RSS文件包含一个频道(Channel)。每个频道必须至少具备以下元素:Title(标题)、Description(对频道的简单介绍)、Link(导航到目标网页)和Language(频道语言)。每个频道由若干个Item(项)组成,每个项包含了一个URL、一个标题和一个摘要。RSS技术主要包含两个重要组件:RSS摘要和RSS阅读器。
以下是某个Blog的RSS语法,如代码清单5-1所示。
代码清单5-1 Blog的RSS语法
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback= "http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb. org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/">
<channel>
<title>我的Blog</title>
<description>与我自己的技术Blog相关联</description>
<link>http://counter.youkuaiyun.com/pv.aspx?id=72</link>
<dc:language>af</dc:language>
<item>
<title><!-- 项标题 --></title>
<link><!-- 项 URL --></link>
<description><!-- 简要描述 --></description>
<!-- 可选的/可扩展的元素 -->
</item>
<item>
<!-- 可多个<item>项目-->
</item>
</channel>
RSS的工作原理如图5-2所示。
图5-2 工作原理图
5.3.2 RSS订阅工具的使用
大部分的新闻网站都提供聚合阅读器功能,这种阅读器短小精悍,便于新闻的浏览。还有很多软件公司和个人提供许多功能强大的RSS阅读器,其中“周博通资讯阅读器”是目前网络上比较流行的一种订阅工具。其使用界面如图5-3所示。主要分为4个区:频道列表区、搜索区、文章标题列表区和文章内容显示区。
图5-3 RSS订阅工具工作界面
| 周博通资讯阅读器的下载地址:“http://www.potu.com/index/index.php”。 |
本节将通过介绍这个RSS阅读工具的使用,让读者了解RSS的组成、规范以及订阅情况。讲解步骤如下。
(1)打开“周博通资讯阅读器”,界面如图5-3所示。从频道列表区可以看到,软件已经为用户创建了许多分类目录。
(2)在频道列表区的空白处,右键单击鼠标,在弹出的快捷菜单中选择“新建RSS频道目录”菜单命令,弹出“类别名称”对话框。
(3)在“类别名称”对话框内输入自己定义的类别,如“我自己的Blog”。单击“OK”按钮。
(4)在频道列表的最下方,就生成了一个名为“我自己的Blog”的频道目录。
(5)右键单击“我自己的Blog”目录,在弹出的快捷菜单中,选择“新增RSS频道”菜单选项,弹出创建RSS频道的向导对话框,如图5-4所示。注意地址对话框右侧的“剪贴板”按钮,如果读者已经拷贝了要添加的频道地址,可通过此按钮实现频道地址的自动填充。
图5-4 向导中输入频道地址的界面
(6)此刻在地址对话框内,输入的不是普通的URL,而是RSS频道地址。如果输入的地址不正确,对话框的状态栏会提示“您输入的URL不是有效的频道地址”。为了准确填写频道地址,需要在选择网站频道时,单击频道的“RSS”链接导航。本例地址为“http://blog.youkuaiyun.com/ championchen79/category/197094.aspx/rss”。其内容样式可参考代码清单5-2,这是一个比较典型的RSS格式文件。本例中所有的标准元素都以黑体显示,并提供了两个文章项目。
代码清单5-2 csdn网站提供的Blog RSS订阅格式
- <rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback= "http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb. org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/">
- <channel>
<title>championchen79的专栏 - asp.net基础特性</title>
<link>http://blog.youkuaiyun.com/championchen79/category/197094.aspx</link>
<description>主要是asp.net一些基础的概念东西和优点</description>
<dc:language>af</dc:language>
<generator>.Text Version 1.0.1.1</generator>
<image>http://counter.youkuaiyun.com/pv.aspx?id=72</image>
- <item>
<dc:creator>血海无崖</dc:creator>
<title>membership在vs2005中的应用-Role(二)</title>
<link>http://blog.youkuaiyun.com/championchen79/archive/2006/05/12/725624.aspx</link>
<pubDate>Fri, 12 May 2006 10:26:00 GMT</pubDate>
<guid>http://blog.youkuaiyun.com/championchen79/archive/2006/05/12/725624.aspx</guid>
<wfw:comment>http://blog.youkuaiyun.com/championchen79/comments/725624.aspx</wfw: comment>
<comments>http://blog.youkuaiyun.com/championchen79/archive/2006/05/12/725624. aspx# Feedback</comments>
<slash:comments>0</slash:comments>
<wfw:commentRss>http://blog.youkuaiyun.com/championchen79/comments/commentRss/725624. aspx</wfw:commentRss>
<trackback:ping>http://tb.blog.youkuaiyun.com/TrackBack.aspx?PostId=725624</trackback: ping>
<description>看看memberrole中role的使用。角色管理以后不发愁了。<img src ="http://blog. youkuaiyun.com/championchen79/aggbug/725624.aspx" width = "1" height = "1" /></description>
</item>
- <item>
<dc:creator>血海无崖</dc:creator>
<title>membership在vs2003中的应用-MemberShip(一)</title>
<link>http://blog.youkuaiyun.com/championchen79/archive/2006/05/11/724769.aspx</link>
<pubDate>Thu, 11 May 2006 17:04:00 GMT</pubDate>
<guid>http://blog.youkuaiyun.com/championchen79/archive/2006/05/11/724769.aspx</guid>
<wfw:comment>http://blog.youkuaiyun.com/championchen79/comments/724769.aspx</wfw: comment>
<comments>http://blog.youkuaiyun.com/championchen79/archive/2006/05/11/724769.aspx# Feedback</comments>
<slash:comments>0</slash:comments>
<wfw:commentRss>http://blog.youkuaiyun.com/championchen79/comments/commentRss/724769. aspx</wfw:commentRss>
<trackback:ping>http://tb.blog.youkuaiyun.com/TrackBack.aspx?PostId=724769</trackback: ping>
<description>membership在vs2003中的应用.用户角色权限等的不用再麻烦和头疼了。<img src = "http://blog.youkuaiyun.com/championchen79/aggbug/724769.aspx" width = "1" height = "1" /> </description>
</item>
</channel>
</rss>
(7)单击“下一步”按钮,向导对话框要求输入频道名称和频道所在的目录,默认名称取自RSS文件中“Channel”元素的“title”属性,如图5-5所示。
(8)单击“完成”按钮,在“我自己的Blog”目录下,生成了一个频道。频道的文章标题和内容如图5-6所示。
这样就在自己的阅读器中,添加了一个RSS的订阅频道。可通过设置阅读器的自动更新功能,使得自己每次打开RSS阅读器的时候,看到的都是最新的频道内容。
图5-5 向导中输入频道名称的界面
图5-6 频道中的文章主题和内容界面
网页RSS阅读器的原理及实现
下面我用ASP写一个最简单的网页RSS阅读器,并作出说明。
一、代码如下:
<%
Set http=Server.CreateObject("Microsoft.XMLHTTP")
http.Open "GET","http://rss.sina.com.cn/news/marquee/ddt.xml",False
http.send
Set xml=Server.CreateObject("Microsoft.XMLDOM")
xml.Async=False
xml.ValidateOnParse=False
xml.Load(http.ResponseXML)
Set item=xml.getElementsByTagName("item")
For i=0 To (item.Length-1)
Set title=item.Item(i).getElementsByTagName("title")
Set link=item.Item(i).getElementsByTagName("link")
Response.Write(title.Item(0).Text &" "& link.Item(0).Text &"<hr />")
Next
%>
二、说明如下:
Set http=Server.CreateObject("Microsoft.XMLHTTP")
http.Open "GET","http://rss.sina.com.cn/news/marquee/ddt.xml",False
http.send
上面这段代码用于创建一个XMLHttpRequest对象,以实现跨域访问远程服务器上的XML文档(这里是 http://rss.sina.com.cn/news/marquee/ddt.xml)。
Set xml=Server.CreateObject("Microsoft.XMLDOM")
xml.Async=False
xml.ValidateOnParse=False
xml.Load(http.ResponseXML)
上面这段代码创建一个Microsoft's XML parser(微软XML解析器)对象,并将http.ResponseXML得到的XML文档装入其中,以便解析处理XML文档。
Set item=xml.getElementsByTagName("item")
For i=0 To (item.Length-1)
Set title=item.Item(i).getElementsByTagName("title")
Set link=item.Item(i).getElementsByTagName("link")
Response.Write(title.Item(0).Text &" "& link.Item(0).Text &"<hr />")
Next
Set item=xml.getElementsByTagName("item")使用微软XML解析器对象的getElementsByTagName方法来返回一个包含XML文档中所有名为item的结点的一个数组。之后的代码就是对数组的操作并输出。