当你点击web网页的这个小的橙色按钮 或 ,异或拷贝您需要订阅的web 网址到GoogleReader时,你有没有想过内部细节,内部数据细节???
首先,你需要明确,并不是所有的网页都有这个小的橙色按钮 或 ,或者并不是所有的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 文档使用一种简单的自我描述的语法。
文档中的第一行: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 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
文章评论