Feed、RSS、Atom概念对比及ROME实战

概述

在豆瓣等网站里,经常会看到如下订阅Button:
在这里插入图片描述
本文记录一下相关概念学习成果。

Feed

Feed:消息来源,一种资料格式,网站通过它将最新资讯传播给用户。用户能够订阅某网站的前提条件是网站有提供Feed。Feed被很多会经常更新内容的网站采用,如:博客网站、内容网站、新闻网站。

RSS

将Feed汇流于一处称为聚合(aggregation),用于聚合的软件称为聚合器(aggregator)。

Really Simple Syndication,简易信息聚合,是一种消息来源格式规范,用以发布经常更新数据的网站,如博客文章、新闻、音频或视频的网摘。

RSS文件,又称做摘要、网摘、更新、频道,包含全文或节选文字,再加上一定的属性数据。能够使发行者自动地发布数据,同时也使读者能更够定期更新他们喜欢的网站或是聚合不同网站的网摘。

标准的XML档式可允许信息在一次发布后通过不同的程序阅览。用户借由将网摘输入RSS阅读器或是用鼠标点取浏览器上指向订阅程序的RSS小图标之URI来订阅网摘。

RSS缩写可以是以下三种中任一种:

  • Really Simple Syndication:RSS 2.0
  • RDF(Resource Description Framework)Site Summary:RSS 0.91,1.0
  • Rich Site Summary:RSS 0.9 and 1.0

示例

RSS文件是一个XML,根节点是一个带有版本号的<rss>节点,根节点以下是一个单一的<channel>节点。<channel>下可以有任意多个<item>,一个item表示一个具体的订阅项目,如文章、新闻。

实例文件:

<?xml version="1.0"?><rss version="2.0"><channel><title>Liftoff News</title><link>http://liftoff.msfc.nasa.gov/</link><description>Liftoff to Space Exploration.</description><language>en-us</language><pubDate>Tue, 10 Jun 2003 04:00:00 GMT</pubDate><lastBuildDate>Tue, 10 Jun 2003 09:41:01 GMT</lastBuildDate><docs>http://blogs.law.harvard.edu/tech/rss</docs><generator>Weblog Editor 2.0</generator><managingEditor>editor@example.com</managingEditor><webMaster>webmaster@example.com</webMaster><item><title>Star City</title><link>http://liftoff.msfc.nasa.gov/news/2003/news-starcity.asp</link><description>How do Americans get ready to work with Russians aboard the International Space Station? They take a crash course in culture, language and protocol at Russia's &lt;a href="http://howe.iki.rssi.ru/GCTC/gctc_e.htm"&gt;Star City&lt;/a&gt;.</description><pubDate>Tue, 03 Jun 2003 09:39:21 GMT</pubDate><guid>http://liftoff.msfc.nasa.gov/2003/06/03.html#item573</guid></item></channel>
</rss>

RSS规范

RSS规范的主要版本:

  • RSS 0.91:是一个精简的RSS形式,由网景公司所发行,同时也是原创的排行第一的版本编号,由Dave Winer从Userland软件所制作。网景公司的版本现在被称为Rich Site Summary,即RDF格式,相对而言比较不方便使用。
  • RSS 0.92:更容易与Winer的RSS 0.91及其他版本兼容,和RSS 0.90不兼容。
  • RSS 2.0:主要的改变在这个版本里使用伸的机制。

RSS阅读器

专门用来订阅网站Feed更新的软件,一般被称为Feed阅读器、RSS阅读器、新闻阅读器等。RSS阅读器会定期检阅是否有更新,并拉取到本地供用户阅读。

根据平台(Windows或Mac)、App(iOS或Android)不同,RSS阅读器有很多很多:

  • irreader
  • Reeder 4

Atom

借鉴各种版本RSS的使用经验,被许多的聚合工具广泛使用在发布和使用上。Atom供稿格式设计作为RSS的替代品;而Atom出版协定用来取代现有的多种发布方式(如Blogger API和LiveJournal XML-RPC Client/Server Protocol)。Google提供的多种服务正在使用Atom,如Google Data API(GData)。

Atom是IETF的建议标准,包括两个标准:

  • Atom供稿格式:Atom Syndication Format,用于网站消息来源,基于XML的文档格式,RFC 4287;
  • Atom出版协定:Atom Publishing Protocol,简称AtomPub或APP,用于新增及修改网络资源,基于HTTP协议,RFC 5023。

Atom vs RSS

发展Atom的动机在于广泛应用RSS 2.0时所遇到的问题。为降低开发支持Web聚合应用的难度,下面列出Atom 1.0所克服的RSS 2.0几个主要问题:

  • RSS 2.0可能包含文本或经过编码的HTML内容,却没有提供明确的区分办法;而Atom则提供明确的标签(typed)。
  • RSS 2.0的description标签可以包含全文或摘要(尽管该标签的英文含义为描述或摘要)。Atom则分别提供summary和content标签,用以区分摘要和内容,允许在summary中添加非文本内容。
  • RSS 2.0存在多种非标准形式的应用,而Atom具有统一的标准,这便于内容的聚合和发现。
  • Atom有符合XML标准的命名空间,RSS 2.0却没有。
  • Atom通过XML内置xml:base标签来指示相对地址(URI),RSS 2.0则无相应的机制区分相对地址和绝对地址。
  • Atom通过XML内置xml:lang,而RSS采用自己的language标签。
  • Atom强制为每个条目设定唯一的ID,这将便于内容的跟踪和更新。
  • Atom 1.0允许条目单独成为文档,RSS 2.0则只支持完整的种子文档,这可能产生不必要的复杂性和带宽消耗。
  • Atom按照RFC 3339标准(ISO 8601标准子集)表示时间 ,而RSS 2.0中没有指定统一的时间格式。
  • Atom 1.0具有在IANA注册的MIME类型,而RSS 2.0所使用的application/rss+xml并未注册。
  • Atom 1.0标准包括一个XML schema,RSS 2.0却没有。
  • Atom是IETF组织标准化程序下的一个开放的发展中标准,RSS 2.0则不属于任何标准化组织,且不是开放版权。

ROME

参考官网以及GitHub,ROME是一个Java框架,可用于RSS及Atom两类Feed。Rome支持RSS各版本:0.90、0.91、0.92、0.93、0.94、1.0和2.0,及Atom 0.3、1.0版本。

引入依赖:

<dependency><groupId>com.rometools</groupId><artifactId>rome</artifactId><version>2.1.0</version>
</dependency>

实战

发布RSS:

public static void publish() throws IOException, FeedException {SyndContent desc = new SyndContentImpl();desc.setType("text/html");desc.setValue("ES系列");SyndCategory category = new SyndCategoryImpl();category.setName("ES系列");List<SyndCategory> categories = List.of(category);SyndEntry entry = new SyndEntryImpl();entry.setTitle("ES系列");entry.setLink("https://blog.csdn.net/lonelymanontheway/category_12594356.html");entry.setDescription(desc);entry.setCategories(categories);SyndFeed feed = new SyndFeedImpl();feed.setFeedType("rss_1.0");feed.setTitle("johnny CSDN blog");feed.setLink("https://blog.csdn.net/lonelymanontheway");feed.setDescription("rome rss test");feed.setEntries(List.of(entry));Writer writer = new FileWriter("xyz.xml");SyndFeedOutput syndFeedOutput = new SyndFeedOutput();syndFeedOutput.output(feed, writer);writer.close();
}

订阅RSS

public static void query() throws IOException, FeedException {URL feedSource = new URL("https://www.douban.com/feed/subject/36686001/reviews");SyndFeedInput input = new SyndFeedInput();SyndFeed feed = input.build(new XmlReader(feedSource));log.info("feed:{}", feed);
}

参考

  • 好用的RSS阅读器

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/528126.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java高频面试之Mysql篇

有需要互关的小伙伴,关注一下,有关必回关,争取今年认证早日拿到博客专家 Java高频面试之总纲篇 Java高频面试之集合篇 Java高频面试之异常篇 Java高频面试之并发篇 Java高频面试之SSM篇 Java高频面试之Mysql篇 Java高频面试之Redis篇 Java高频面试之消息队列与分布式篇…

代码随想录算法训练营Day39 || leetCode 762.不同路径 || 63. 不同路径 II

62.不同路径 每一位的结果等于上方与左侧结果和 class Solution { public:int uniquePaths(int m, int n) {vector<vector<int>> dp(m,vector(n,0));for (int i 0; i < m; i) dp[i][0] 1;for (int j 0; j < n; j) dp[0][j] 1;for (int i 1; i < m; …

docker学习笔记——Dockerfile

Dockerfile是一个镜像描述文件&#xff0c;通过Dockerfile文件可以构建一个属于自己的镜像。 如何通过Dockerfile构建自己的镜像&#xff1a; 在指定位置创建一个Dockerfile文件&#xff0c;在文件中编写Dockerfile相关语法。 构建镜像&#xff0c;docker build -t aa:1.0 .(指…

如何用YOLOv8实现图像分割

1. 介绍 在之前的文章中,介绍了如何使用 YOLOv8 在不同的编程语言来检测图片中的对象。然而,YOLOv8 还可以把检测到的目标图像分割出来,本篇文章将介绍如何使用YOLOv8做图片分割。 对象检测的结果是所有检测到的对象的边界框。图像分割的结果是所有检测到的对象的蒙版。它是…

Spring官网中查看MongoDB的API文档的详细步骤

目录 Spring官网中查看MongoDB的API文档的详细步骤1、进入 Spring 官网2、选择 Mongodb的文档介绍3、点击API文档4、进入文档查询页面 Spring官网中查看MongoDB的API文档的详细步骤 1、进入 Spring 官网 首先进入Spring的官网&#xff0c;然后点击【Spring Data】 2、选择 Mon…

Ubuntu23.10安装FFmpeg及编译FFmpeg源码

安装FFmpeg: 打开终端: 输入 sudo apt install ffmpeg 安装成功: 验证FFmpeg 默认安装位置与库与头文件位置 使用FFmpeg源码编译: 1.安装YASM sudo apt-get install yasm

Python 全栈系列233 部署chatglm系列接口部署

说明 在国产大模型里&#xff0c;chatglm应该算是效果不错的&#xff0c;目前开源的三个版本都部署过。第一代的不太行&#xff0c;第二代&#xff0c;第三代的效果都还可以&#xff0c;但第三代对第二代似乎不是帕累托改善。在微调方面做了修改&#xff0c;但是显得比较乱。第…

VUE3项目学习系列--项目基础配置(四)

目录 一、环境变量配置 二、SVG图标配置 三、注册组件为全局组件 四、集成sass 1、安装依赖 2、添加文件 3、配置 一、环境变量配置 项目开发过程中会经历开发环境、测试环境、生产环境三种状态&#xff0c;对与环境变量的配置需求不同&#xff0c;因此需要在项目中进行环…

最新全流程GMS地下水数值模拟及溶质(包含反应性溶质)运移模拟技术深度应用

本文以地下水数值模拟软件GMS操作&#xff0c;本文中强调模块化教学&#xff0c;分为前期数据收集与处理&#xff1b;三维地质结构建模&#xff1b;地下水流动模型构建&#xff1b;地下水溶质运移模型构建和反应性溶质运移构建5个模块&#xff1b;采用全流程模式将地下水数值模…

个人网站展示(静态)

大学期间做了一个个人博客网站&#xff0c;纯H5编码的网站&#xff0c;利用php搭建了一个留言模块。 有需要源码的同学&#xff0c;可以联系我~ 首页&#xff1a; IT杂记模块 文人墨客模块 劳有所获模块 生活日志模块 关于我 一个推崇全栈开发的前端开发人员 微信: itrzzh …

我们的一生都是在挤火车。

哈喽&#xff0c;你好啊&#xff0c;我是雷工&#xff01; 昨天从燕郊坐火车回石家庄&#xff0c;由于赶上元旦假期&#xff0c;所有高铁票都售罄&#xff0c;一张普通火车票&#xff0c;还是一周前就买才买到的。 从燕郊站&#xff0c;到北京站&#xff0c;然后地铁去北京西站…

2024年掌握人工智能的顶级课程

[AI 课程推荐] 谷歌、微软、哈佛大学, DeepLearning.AI都发布了免费的人工智能和ChatGPT的课程。 以下是 2024 年掌握人工智能的顶级课程: GOOGLE - 生成式人工智能学习路径微软- 为每个人提供生成式人工智能微软 - 人工智能初学者入门哈佛 - CS50 的 Python 人工智能简介Deep…