生活不只是眼前的苟且,还有诗和远方!

了解RSS语法,你也可以做自己的RSS阅读器

当你点击web网页的这个小的橙色按钮 《了解RSS语法,你也可以做自己的RSS阅读器》 或 《了解RSS语法,你也可以做自己的RSS阅读器》 ,异或拷贝您需要订阅的web 网址到GoogleReader时,你有没有想过内部细节,内部数据细节???

首先,你需要明确,并不是所有的网页都有这个小的橙色按钮 《了解RSS语法,你也可以做自己的RSS阅读器》 或 《了解RSS语法,你也可以做自己的RSS阅读器》,或者并不是所有的web网址粘贴到Google Reader都能完成订阅。回顾第一篇的内容,你需要知道,这个web网页提供RSS订阅服务,你才可以进行RSS订阅,要不然,你是无法进行RSS订阅的。

其次,知道了web网页必须提供RSS订阅服务时我们才能够进行RSS订阅,那么你有没有想过这样一项服务,传输的是什么数据,数据的格式又是什么?如果自己做一个web站点,你又该如何提供自己的RSS订阅服务?

带着上面的疑问,我们出发吧,去哪?先把RSS语法整清楚!

 

存在 RSS 的 Web 标准吗?

没有正式的标准针对 RSS。

· 所有 RSS feeds 中大约 50% 使用 RSS 0.91。

· 大约 25% 使用 RSS 1.0。

· 最后的 25% 使用 RSS 0.9x 版本或 RSS 2.0。

我应该使用哪个 RSS 版本?

·        RSS0.91 和RSS 2.0 较之RSS 1.0 更容易理解。我们的教程基于 RSS 2.0。

RSS 语法

RSS 2.0 的语法很简单,也很严格。这些规则很容易学习,也很容易使用。

我们订阅一个web站点的RSS服务,其实是通过RSS阅读器访问这个web站点的RSS文件实现的。一个RSS文件就是一段规范的XML数据,该文件一般以RSS、XML或者RDF作为后缀。一个RSS文件的格式如下所示:

《了解RSS语法,你也可以做自己的RSS阅读器》

RSS 文档使用一种简单的自我描述的语法。

文档中的第一行:XML 声明 – 定义了文档中使用的 XML 版本和字符编码。此例子遵守 1.0 规范,并使用 ISO-8859-1 (Latin-1/West European) 字符集。

下一行是标识此文档是一个 RSS 文档的 RSS 声明(此例是 RSS version 2.0)。

下一行含有 <channel> 元素。此元素用于描述 RSS feed。

<channel> 元素有三个必需的子元素:

  • <title> – 定义频道的标题。(比如 w3school 首页)
  • <link> – 定义到达频道的超链接。(比如 www.w3school.com.cn)
  • <description> – 描述此频道(比如免费的网站建设教程)

每个<channel> 元素可拥有一个或多个 <item> 元素。

每个<item> 元素可定义 RSS feed 中的一篇文章或 “story”。

<item> 元素拥有三个必需的子元素:

  • <title> – 定义项目的标题。(比如 RSS 教程)
  • <link> – 定义到达项目的超链接。(比如 http://www.w3school.com.cn/rss)
  • <description> – 描述此项目(比如 w3school 的 RSS 教程)

最后,后面的两行关闭 <channel> 和 <rss> 元素。

在RSS 中书写注释的语法与 XML 的语法类似:

<!—This is anRSS comment –>

 

RSS 使用 XML 来编写因为 RSS 也是 XML,请记住:

  • 所有的元素必许拥有关闭标签
  • 元素对大小写敏感
  • 元素必需被正确地嵌套
  • 属性值必须带引号

 

RSS <channel> 元素

RSS 的 <channel> 元素可描述为 RSS feed。

那么什么是channel呢?就我个人的理解,现在一个比较大型的web站点提供的RSS订阅服务是分类别的,例如CSDN站点提供的RSS订阅服务就包括以下频道:

《了解RSS语法,你也可以做自己的RSS阅读器》

你可以选择自己感兴趣的频道进行订阅,那么一个频道就对应一个定时更新的RSS XML文档,在这个RSS XML文档中显然就需要一个标签来说明这个频道,这就是<channel>元素。

 

<channel>元素详解请看下面这个RSS文档:

<?xml version=”1.0″encoding=”ISO-8859-1″ ?>

<rss version=”2.0″>

<channel>

 <title>W3School Home Page</title>

 <link>http://www.w3school.com.cn</link>

 <description>Free web building tutorials</description>

  <item>

   <title>RSS Tutorial</title>

   <link>http://www.w3school.com.cn/rss</link>

   <description>New RSS tutorial on W3School</description>

  </item>

</channel>

</rss>

正如前面提到的,<channel> 元素可描述 RSS feed,而拥有三个必需的子元素:

  • <title> – 定义频道的标题。(比如 w3school 首页)
  • <link> – 定义到达频道的超链接。(比如 www.w3school.com.cn)
  • <description> – 描述此频道(比如免费的网站建设教程)

<channel> 通常包含一个或多个<item> 元素。每个 <item> 元素可定义 RSS feed 中的一篇文章或 “story”。

此外,还存在若干个可选的 <channel> 的子元素。我们会在后面讲解最重要的几个。

<category>元素

<category> 子元素用于为 feed 规定种类。

<category> 子元素使 RSS 聚合器基于类别对网站进行分组成为可能。

上面的 RSS 文档的类别可能会是:

<category>Web development</category>

<copyright>元素

<copyright> 子元素会告知有关版本资料的信息。

上面的 RSS 文档的版本可能会是

<copyright>2006 w3school.com.cn. All rights reserved.</copyright>

<image> 元素

<image> 子元素可在聚合器提供某个feed 时显示一幅图像。

<image> 有三个必需的子元素:

· <url>- 定义引用图像的 URL

· <title>- 定义图像无法被显示时显示的文本

· <link>- 定义到达提供此频道的网站的超链接

上面的RSS 文档的图像可能是这样的:

<image>

 <url>http://www.w3school.com.cn/images/logo.gif</url>

 <title>W3School.com.cn</title>

 <link>http://www.w3school.com.cn</link>

</image>

<language> 元素

<language> 子元素用于规定用来编写文档的语言。

<language> 元素使 RSS 聚合器基于语言来对网站进行分组成为可能。

上面的RSS 文档的语言可能是:

<language>en-us</language>

RSS<channel> 参考手册

元素 描述
<category> 可选的。为 feed 定义所属的一个或多个种类。
<cloud> 可选的。注册进程,以获得 feed 更新的立即通知。
<copyright> 可选。告知版权资料。
<description> 必需的。描述频道。
<docs> 可选的。规定指向当前 RSS 文件所用格式说明的 URL。
<generator> 可选的。指定用于生成 feed 的程序。
<image> 可选的。在聚合器呈现某个 feed 时,显示一个图像。
<language> 可选的。规定编写 feed 所用的语言。
<lastBuildDate> 可选的。定义 feed 内容的最后修改日期。
<link> 必需的。定义指向频道的超链接。
<managingEditor> 可选的。定义 feed 内容编辑的电子邮件地址。
<pubDate> 可选的。为 feed 的内容定义最后发布日期。
<rating> 可选的。feed 的 PICS 级别。
<skipDays> 可选的。规定忽略 feed 更新的天。
<skipHours> 可选的。规定忽略 feed 更新的小时。
<textInput> 可选的。规定应当与 feed 一同显示的文本输入域。
<title> 必需的。定义频道的标题。
<ttl> 可选的。指定从 feed 源更新此 feed 之前,feed 可被缓存的分钟数。
<webMaster> 可选的。定义此 feed 的 web 管理员的电子邮件地址。

 

RSS <item> 元素

每个 <item> 元素可定义 RSS feed 中的一篇文章或 “story”。

那么什么是item呢?很简单,你订阅了一份IT新闻的RSS服务,你收到的数据就是对应的RSS文档,这个IT分类的信息就对应RSS文档中的<channel> 元素,每一条IT新闻就是对应的RSS文档中的<item> 元素。显然,<channel> 元素只有一个,<item> 元素可以有多个,有多少条IT新闻就有多少条<item> 元素。

< item >元素详解请看下面这个RSS文档:

<?xml version=”1.0″encoding=”ISO-8859-1″ ?>

<rss version=”2.0″><channel>

 <title>W3School Home Page</title>

 <link>http://www.w3school.com.cn</link>

 <description>Free web building tutorials</description>

  <item>

   <title>RSS Tutorial</title>

   <link>http://www.w3school.com.cn/rss</link>

   <description>New RSS tutorial on W3School</description>

  </item>

</channel></rss>

正如前面提到的,每个 <item> 元素可定义 RSS feed 中的一篇文章或 story”。

<item> 元素拥有三个必需的子元素:

  • <title> – 定义项目的标题。(比如 RSS 教程)
  • <link> – 定义到达项目的超链接。(比如 http://www.w3school.com.cn/rss)
  • <description> – 描述此项目(比如 w3school 的 RSS 教程)

此外,存在若干个 <item> 的可选的子元素,我们会在下面介绍最重要的几个。

<author>元素

<author> 子元素用于规定一个项目的作者的电子邮件地址。

注释:为了防止垃圾邮件,一些开发者不会使用这个 <author> 元素。

上面的 RSS 文档中项目的作者可能是:

<author>service@w3school.com.cn</author>

<comments>元素

<comments> 子元素允许把一个项目连接到有关此项目的注释。

上面的 RSS 文档中项目的注释可能这样的:

<comments>http://www.w3school.com.cn/comments</comments>

<enclosure> 元素

<enclosure> 子元素允许将一个媒体文件导入一个项中。

<enclosure> 元素有三个必需的属性:

  • url – 定义指向此媒体文件的 URL
  • length – 定义此媒体文件的长度(字节)
  • type – 定义媒体文件的类型

在上面的RSS 文档中,被包含在项目中的媒体文件可能是这样的:

<enclosureurl=”http://www.w3school.com.cn/rss/rss.mp3″

length=”5000″ type=”audio/mpeg” />

RSS<item> 参考手册

元素 描述
<author> 可选的。规定项目作者的电子邮件地址。
<category> 可选的。定义项目所属的一个或多个类别。
<comments> 可选的。允许项目连接到有关此项目的注释(文件)。
<description> 必需的。描述此项目。
<enclosure> 可选的。允许将一个媒体文件导入一个项中。
<guid> 可选的。为项目定义一个唯一的标识符。
<link> 必需的。定义指向此项目的超链接。
<pubDate> 可选的。定义此项目的最后发布日期。
<source> 可选的。为此项目指定一个第三方来源。
<title> 必需的。定义此项目的标题。

 

RSS解析

谈了这么多RSS文档的语法,那么如果你想自己做一个RSS阅读器,你需要怎么办涅?

其实只需要三步:

第一步,你的阅读器需要接受你输入的提供RSS服务的web地址;

第二步,你的阅读器需要按照这个地址定期下载对应的RSS文档;

第三步,你的阅读器需要将下载下来的RSS文档进行解析,将解析获得的内容显示到你的阅读器界面上。

那么什么是RSS文档的解析?由前面的知识知道,RSS文档就是一个XML文档,你只需要按照RSS语法规范用XML解析方法进行解析,提取出你需要的信息。XML解析方法就有的选了,一是DOM,二是SAX。究竟选择那一个,相信你既然都可以阅读到文章的这里了应该很清楚DOM什么使用,SAX怎么操作了,那么解析RSS文档有何困难涅?^_^

 

本文出自:https://blog.csdn.net/wwang196988/article/details/7035900

点赞

发表评论

电子邮件地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据