65.9K
CodeProject 正在变化。 阅读更多。
Home

RSS Feed - 时代的需要!

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.25/5 (10投票s)

2007 年 5 月 8 日

CPOL

6分钟阅读

viewsIcon

53236

downloadIcon

290

本文旨在介绍RSS(Really Simple Syndication)Feed,它的构成、实际应用及其程序实现。

下载 understandingRSSFeed.zip - 0.9 KB

引言

如果您厌倦了每天在网页上看到相同的内容,并且这些内容不再吸引您的朋友或同事。您想为您的网站带来更多流量,但您没有时间自己每天更改或更新内容。同时,您渴望与全世界分享您自己的内容,并让人们知道您的页面内容何时更新。

那么请相信我,RSSReally Simple Syndication)Feed 将为您做到这一切。今天,借助RSS,我们可以通过自动获取和更新来自不同来源的各种内容,真正使我们的网页更具吸引力。同时,我们可以向全世界发布各种内容,而这一切只需要一次性的开发工作。

RSS 的一些用途

1. 显示最新新闻、头条、事件和动态
2. 显示每日天气更新
3. 显示每日笑话、每日名言
4. 在您喜欢的博客(Web logs)更新时收到通知
5. 显示每日星座运势

在哪里找到 RSS Feed

通过您喜欢的搜索引擎搜索包含您喜欢内容的 RSS feed 并不难,例如使用 Google,您可以通过在实际搜索字符串中添加“FileType:rss”来过滤搜索结果,这将仅限于搜索 '.rss' 文件。

虽然这不是规定,但大多数提供 RSS Feed 的网站都使用 橙色按钮(例如 Screenshot - rss_button.gifScreenshot - xml_button.gif )作为指向其 RSS Feed 的链接。

性能

由于 RSS 本质上就是一个带有某些保留标签的 XML 文件,因此使用 RSS 填充您的网页所需时间不多。

验证 RSS Feed

可以通过编写自己的工具或手动检查整个 XML 文件元素来验证 RSS feed。但是,有工具可以验证指定的 RSS Feed 是否正确。您可以在以下网站上进行一键验证您的 Feed;

http://feedvalidator.org
http://validator.w3.org/feed

注意事项

由于 RSS Feed 本质上是一个 XML 文件,因此所有创建 XML 文件的方法和规则都适用于它,例如它必须格式良好,并且每个开标签都必须有对应的闭标签。

何时不使用 RSS Feed

如果所需内容更新不频繁,请避免使用 RSS feed。由于它总是读取和解析 XML 文件,如果更改非常偶尔,使用 RSS 可能会导致服务器时间浪费和资源消耗。

RSS 版本

目前可用的最新 RSS 版本是 2.0,它向后兼容其前一个版本,即 RSS 0.91。RSS 2.0 比其前一个版本更简单易用。

RSS Feed 的构成

RSS Feed 就像任何其他 XML 文件一样,只是它在创建时需要遵循某些规定,例如每个文件必须在最高级别有一个 <channel> 元素。并且每个 <channel> 元素至少必须包含这三个元素; <title>、<link>、<description>。

此外,在 <channel> 元素下还有一些可选元素;例如 <image>、<pubDate>、<copyright>、<generator>、<category>、<cloud>、<webmaster>、<ttl>。

元素

描述

必需

<title>

频道的标题,例如提供此 RSS Feed 的网页名称

<link>

提供此频道的网页的超链接

<description>

频道的简要说明,即提供此频道的网页的目的

<image>

显示图片

<pubDate>

此 feed 发布的时间

<copyright>

此 RSS Feed 的版权归属

<generator>

指示 Feed 是由哪个程序/软件生成的。

<category>

指示 feed 的类别。

<cloud>

当我们的 feed 发生任何更新时,会通知已注册的进程。

<webmaster>

可以在此处定义网站管理员的电子邮件地址。

<ttl>

表示“生存时间”(Time to Live),定义 feed 的缓存时间。

<image> 元素还包含三个必需的元素 <url>、<title>、<link>,而其他三个元素 <width>、<height>、<description> 是可选的。

那么,我们应该在哪里放置那些需要频繁更改的内容呢?为此,我们在 <channel> 元素下还有一个名为 <item> 的元素。每个 <channel> 通常包含一个或多个 <item> 元素。也可以说,<item> 元素是 RSS Feed 的核心。一个 <item> 包含三个必需的元素;<title>、<link>、<description>。

元素

描述

必需

<title>

要显示的标题,例如新闻标题,今日笑话标题

<link>

包含完整故事的页面的超链接

<description>

条目的简要说明。

<author>

包含条目作者的电子邮件地址

<category>

用于按类别组织条目

<comments>

包含有关特定条目评论的链接

<enclosure>

用于将任何媒体文件包含在条目中

<guid>

用于标识特定条目的唯一标识符

<pubDate>

指示条目发布时间

<source>

包含条目的来源,例如条目信息来自其他地方

发布您的 RSS 文件

要聚合内容,我们只需要一个有效的 RSS 文件,并在我们的网页上创建一个链接。虽然这不是规定,但人们通常使用橙色按钮,如 RSS LogoXML Logo 来实现此目的。所以,您可以遵循这个事实上的标准,也可以将您的 RSS Feed 与您喜欢的任何图片或文本链接,如下所示;

<a href="MyRSSFeed.rss"> <img src="images/myImage.gif" width="20" height="20"> </a>
<a type="application/rss+xml" href="MyFeed.rss"> My RSS Feed Link </a>   

示例 RSS Feed

<rss version="2.0">
   <channel>
      <title> Nawaz Ijaz's Blog </title>
      <link> http://blog.360.yahoo.com/blog-RFHidsM_erFb5Sks9KqfGlOOxPA-?cq=1 </link>
      <description> 
       M a nightmare trying to live a dream! Unpredictable... Don't forget & forgive so  easily...!!
      </description>
      <language> en-us </language>
      <lastBuildDate> Fri, 09 Mar 2007 13:20:27 GMT </lastBuildDate>
    
      <item>
        <title> Bad patch continued for Tigerz... [Series Review: by Farhan Asad] </title>
        <link> http://blog.360.yahoo.com/blog-RFHidsM_erFb5Sks9KqfGlOOxPA-?cq=1&p=9 </link>
        <description>
        The Epic continued as two arch rivals continued in a heated contest. Tigers came to
        the foreground with their oath of beating the Stallions mercilessly. But the Stallions
        went into battle with resounding confidence, substantiated with their continuous
        winning streak. <br /> <br />  The first match was a nail bitter. Stallions scored 75 runs
        in their quota of 8 overs, after struggling earlier on in the innings...
        </description>
        <pubDate>Tue, 06 Feb 2007 09:02:17 GMT</pubDate>
      </item>
    
      <item>
        <title> For All Kangro Lovers! </title>
        <link> http://blog.360.yahoo.com/blog-RFHidsM_erFb5Sks9KqfGlOOxPA-?cq=1&p=8 </link>
        <description>
            Well friends if you like kangros then this is for you only :)<br/>
        </description>
        <pubDate> Thu, 01 Feb 2007 07:44:08 GMT </pubDate>
      </item>
     
      <item> 
        <title> Me @ MSN Spaces....!! </title>
        <link> http://blog.360.yahoo.com/blog-RFHidsM_erFb5Sks9KqfGlOOxPA-?cq=1&p=1 </link>
        <description>
        Well... m already on MSN Spaces n feeling comfortable with dat... have aleady
        put lot ov stuff in ma MSN webpage... can u give me the reason to continue yahoo 360 simultanously??
        u can always meet me on my MSN Space... your feedback n comments are more than welcome... :)<br/>
        <br /><a href="nawaz.spaces.live.com">nawaz.spaces.live.com</a><br />
        </description>
        <pubDate>Fri, 17 Nov 2006 12:55:50 GMT</pubDate>
      </item>

   </channel> 
</rss>

以上 RSS Feed 部分摘自我的个人博客... 您可以在下面的 URL 中详细查看 RSS 文件;

<a href=""http://blog.360.yahoo.com/rss-RFHidsM_erFb5Sks9KqfGlOOxPA-?cq=1"">"http://blog.360.yahoo.com/rss-RFHidsM_erFb5Sks9KqfGlOOxPA-?cq=1"</a>

解析 RSS Feed 并获取所需内容

现在我们已经看到 RSS Feed 只是一个具有定义良好的 DTD 的 XML 文件,因此通过利用任何编程语言中的任何解析器,我们可以从该 XML 文件中提取所需信息。

现在,我们将创建一个简单的 ASP 3.0 网页,在该网页中我们将解析并提取标题、发布日期和链接以阅读详细信息。然后,我们将以两种不同的方式显示提取的内容。

代码概述

首先,我们将 RSSFeed 路径设置为输入,如下所示;

const inputRSSFile ="http://blog.360.yahoo.com/rss-RFHidsM_erFb5Sks9KqfGlOOxPA-?cq=1" 

然后,我们将创建一个“serverxmlhttp”对象来加载上述 RSSFeed。

Set xmlhttp = Server.CreateObject("msxml2.serverxmlhttp") 

xmlhttp.Open "GET", inputRSSFile, false   
xmlhttp.Send  
set objXMLDoc = Server.CreateObject("MSXML2.DOMDocument") 
objXMLDoc.async = false 
objXMLDoc.loadxml(xmlhttp.ResponseText) 


现在,由于整个 RSSFeed 已加载到内存中,我们可以提取我们想要的内容,例如我们在此处提取“标题、发布日期和链接”;

for each ParentNode in objXMLDoc.documentElement.childNodes
    for each ChildN in ParentNode.ChildNodes

       if childN.nodeName= "item" then
          for each tmpNode in childN.ChildNodes

              if tmpNode.nodeName = "title" then
                  marqueeString= marqueeString & tmpNode.text & " "
                  response.write "<font size=""2"" face=""Verdana""><b>" & tmpNode.text & "</b></font><br>"
          end if

              if tmpNode.nodeName = "pubDate" then
                 marqueeString= marqueeString & "[" & tmpNode.text & "]" &"     "
              response.write "<font size=""1"" face=""Verdana"">" & tmpNode.text & "</font><br><br>"
              end if

              if tmpNode.nodeName = "link" then
                  marqueeString= marqueeString & "<a target=""_blank"" href=" & tmpNode.text & ">" & "[see details]" & "</a>" & " "
                 response.write "<font size=""1"" face=""Verdana"">" & "<a target=""_blank"" href=" & tmpNode.text & ">" & "[see details]" & "</a>" & "</font><br>"
          end if

          next
       end if
    next
next
 

以上代码片段相当直观。简单的循环和 If 语句……我还需要解释吗?好的,我们来解释一下 :-) 首先,我们找到一个“Item”标签,然后在这里查找我们想要的“title, pubDate, link”标签。
“response.write”直接在我们的 ASP 网页上显示所需的内容。而“marqueeString”则不断地将相同的内容连接起来。最后,我们将此“marqueestring”设置为 dhtml marquee 对象,如下所示;

<marquee scrolldelay="120" style="font-family: Verdana; font-size: 9pt">
    <%= marqueeString %>
</marquee>   

示例输出

下面是我们示例的输出截图。在“RSS Feed - 示例用法 01”中,我们在 <Div> 标签内显示内容,而在“RSS Feed - 示例用法 02”中,使用了(从右到左滚动的)字幕来显示相同的内容。

Screenshot - understandingRSSFeed.gif


就这样!

朋友们,恭喜,我们已经学会了 RSSFeed 究竟是什么;以及我们如何利用它……干杯……

© . All rights reserved.