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.rhkb.cn/news/273144.html

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

相关文章

机器学习中的经典算法总结

经典算法 有监督算法逻辑回归支持向量机SVM决策树朴素贝叶斯K近邻&#xff08;KNN&#xff09; 无监督算法K-meansPCA主成分分析预留模版 有监督算法 逻辑回归 简介 逻辑回归是机器学习中一种经典的分类算法&#xff0c;通常用于二分类任务&#xff0c;基本思想是构建一个线性…

Springboot整合Mybaits启动过程

Springboot整合Mybaits启动过程 1.前言2.MybatisAutoConfiguration3.SqlSessionFactoryBean3.1 XMLConfigBuilder.parse()3.1.1 XMLMapperBuilder.parse()3.1.1.1 XMLStatementBuilder.parse() 4.SqlSession4.1 Executor 1.前言 直接加载mybatis配置文件&#xff0c;然后创建S…

数据结构二叉树续

在前边我们讲完了二叉树的一些代码结构 现在呢我们需要进一步去细化 我们传参数组后&#xff0c;让数组里面的数据进行调整 如何调整成堆呢&#xff1f; 建堆 所以我们分装一个成堆的函数 还是先去断言 然后创建空间 这里我们需要用到一个memcpy函数 memcpy函数是用来…

css-vxe-form-item中输入框加自定义按钮(校验位置错误)

1.浮动错误效果 提示内容不对 2.不使用浮动&#xff0c;使用行内块元素 代码如下 <vxe-form-item title"yoyo:" field"assembleWorkNo" span"8"><template #default><vxe-input style"width:70%;display:inline-block;&quo…

SQLite3中的callback回调函数注意的细节

调用 sqlite3_exec(sqlite3*, const char *sql, sqlite_callback, void *data, char **errmsg)该例程提供了一个执行 SQL 命令的快捷方式&#xff0c; SQL 命令由 sql 参数提供&#xff0c;可以由多个 SQL 命令组成。 在这里&#xff0c; 第一个参数 sqlite3 是打开的数据库对…

Grafana dashboards as ConfigMaps

文章目录 1. 简介2. 创建 configmaps3. grafana 界面查看 1. 简介 将 Grafana 仪表板存储为 Kubernetes ConfigMap 相比传统的通过 Grafana 界面导入仪表板有以下一些主要优点: 版本控制&#xff1a; ConfigMap 可以存储在版本控制系统(如Git)中,便于跟踪和管理仪表板的变更历…

牛客周赛 Round 36

赛况 C题可惜&#xff0c;比赛时模拟没有想明白&#xff0c;只对了一半&#xff0c;赛后看了大佬们的题解后恍然大悟&#xff0c;而F题是压根没思路&#xff0c;况且F题部分分也比较难拿。 题目列表 A-小红的数位删除 思路 将读入的数字整除10做三次后输出即可 参考代码 #inc…

Golang搭建grpc环境

简介 OS : Windows 11 Golang 版本: go1.22.0 grpc : 1.2 protobuffer: 1.28代理 没有代理国内环境下载不了库七牛CDN &#xff08;试过可用&#xff09; go env -w GOPROXYhttps://goproxy.cn,direct阿里云代理(运行grpc时下载包出现报错 ): go env -w GOPROXYhttps://mirr…

Qt ini配置文件

ini文件用于保存用户的设置操作&#xff0c;下列以背景颜色设置为例子 暂时默认设置为白色背景 这段代码放置在主窗口的构造函数中&#xff0c;用于初始化读取ini文件 QString color;//第一个参数在我这里ini文件时相对路径需要放在工程中&#xff0c;也可以写绝对路径QSettin…

运维:记一次寻找定时任务并删除的经历

前言 我相信接手别人的服务器、或者在没有任何文档的情况去看自己原先的服务器,都或多或少会遇到莫名其妙的服务器独有规则。 比如你服务本身跑的好好的,突然啪的一下,没了! 什么原因导致的呢?其中,很大可能是定时任务在作祟。 原因分析 本次,我遇到的问题是:在Ubuntu系…

017集——圆弧(ARC)转多段线(lwpolyline)——cad vba 中按一定精度拟合加点实现

在国土资源管理项目中&#xff0c;我们经常会遇到CAD转gis数据实现入库&#xff0c;而cad中的arc圆弧转为gis数据只能转出弧的顶点坐标&#xff0c;导致图形变形失真。若一个一个对弧进行手工增加点转为多段线&#xff0c;耗时耗力&#xff0c;效率极其低下。这里给出解决方案&…

微软亚太区AI智能应用创新业务负责人许豪,将出席“ISIG-AIGC技术与应用发展峰会”

3月16日&#xff0c;第四届「ISIG中国产业智能大会」将在上海中庚聚龙酒店拉开序幕。本届大会由苏州市金融科技协会指导&#xff0c;企智未来科技&#xff08;AIGC开放社区、RPA中国、LowCode低码时代&#xff09;主办。大会旨在聚合每一位产业成员的力量&#xff0c;深入探索A…

[QT]自定义的QtabWidget

需求 最近有一个需求就是一个QTabWidget要求有四个tab页在左侧用于显示主页面&#xff0c;在右侧有一个关于按钮&#xff0c;点击后用于弹出窗口显示一些程序相关信息。主要是怎么实现右侧按钮 相关代码 #ifndef MYTABWIDGET_H #define MYTABWIDGET_H#include <QWidget&g…

如何保证消息的可靠传输

数据的丢失问题&#xff0c;可能出现在生产者、MQ、消费者中 生产者丢失&#xff1a; 生产者将数据发送到 RabbitMQ 的时候&#xff0c;可能数据就在半路给搞丢了&#xff0c;因为网络问题啥的&#xff0c;都有可能。此时可以选择用 RabbitMQ 提供的事务功能&#xff0c;就是生…

std::function模板类性能问题

背景 题目&#xff1a;最近发现记忆化搜索真的很好用&#xff0c;于是在做力扣上记忆化搜索相关的题目时&#xff0c;用这种方法重做了一下买卖股票问题。 问题来源 在写递归代码的时候&#xff0c;我学习了一种匿名函数的写法&#xff0c;直接在函数体内写function<int(…

SpringBoot 多环境的配置(附带有截图)

文章目录 概要整体配置流程配置详细说明技术细节小结 概要 多环境开发 在实际项目开发中&#xff0c;一般需要针对不同的运行环境&#xff0c;如开发环境、测试环境、生产环境等&#xff0c;每个运行环境的数据库等配置都不相同&#xff0c;每次发布测试、更新生产都需要手动…

【MATLAB第99期】#源码分享 | 基于MATLAB的SHEPard模型多输入单输出回归预测模型

【MATLAB第99期】#源码分享 | 基于MATLAB的SHEPard模型多输入单输出回归预测模型 Shepard模型(简称SP模型)就是一种直观的、可操作的相似预测法&#xff0c;常用于插值。相似预测法基本原理按照相似原因产生相似结果的原则&#xff0c;从历史样本中集中找出与现在的最相似的一…

基于java ssm springboot女士电商平台系统

基于java ssm springboot女士电商平台系统源码文档设计 博主介绍&#xff1a;多年java开发经验&#xff0c;专注Java开发、定制、远程、文档编写指导等,csdn特邀作者、专注于Java技术领域 作者主页 央顺技术团队 Java毕设项目精品实战案例《1000套》 欢迎点赞 收藏 ⭐留言 文末…

Vue3学习记录(六)--- 组合式API之依赖注入和异步组件

一、依赖注入 1、简介 ​ 在前面的笔记中&#xff0c;我们学习过父组件向子组件传递数据时&#xff0c;需要借助props来实现。但如果父组件想要向孙子组件传递数据&#xff0c;那就要连续使用两层props逐级向下传递&#xff0c;如果要接收数据的是更深层的后代组件&#xff0…

数据库(mysql)-新手笔记-基本知识点(1)

基本概念 数据库 Database :存储数据的容器 表 Table : 在数据库中存储的基本结构,它由行和列组成 行 Row : 表中的一条记录 列 Column : 表中的字段,定义了数据的类型和约束 数据类型 数据值 如 INT(整型),FLAOT(浮点型) ,DECIMAL (精确小数点) 字符串 如 VARCHAR(可变长度字…