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.mzph.cn/news/735742.shtml

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

相关文章

方程式工具包远程溢出漏洞图形界面版V0.3(内置永恒之蓝、永恒冠军、永恒浪漫等)

Part1 前言 大家好&#xff0c;我是ABC_123。我从年前到现在&#xff0c;一直在整理曾经写过的红队工具&#xff0c;逐步把自己认为比较好用的原创工具发出来给大家用一用&#xff0c;方便大家在日常的攻防比赛、红队评估项目中解放双手&#xff0c;节省时间精力和体力。本期给…

Linux智能网关结合Node-RED实现实时工业数据采集

工业4.0的发展&#xff0c;物联网技术在制造业中的应用越来越广泛。其中&#xff0c;基于Linux系统的工业物联网智能网关因其开放性、稳定性和安全性而备受青睐。这类智能网关创新性地集成了开源工具Node-RED&#xff0c;为从各种工业设备&#xff08;如PLC&#xff09;中高效收…

LInux系统架构----Apache与Nginx动静分离

LInux系统架构----Apache与Nginx动静分离 一.动静分离概述 Nginx的静态处理能力比较强&#xff0c;但是动态处理能力不足&#xff0c;因此在企业中常采用动静分离技术在LNMP架构中&#xff0c;静态页面交给Nginx处理&#xff0c;动态页面交给PHP-FPM模块处理。在动静分离技术…

elementui的el-upload图片上传到服务器的对象储存cos并且展示出来

目录 0.前提1.准备工作1.买一个腾讯云服务器&#xff08;你可以买其他的&#xff09;&#xff0c;我这里是去买了61元一年的轻量级应用云服务器&#xff0c;操场系统是宝塔Linux2.买一个对象储存cos&#xff08;这里腾讯云可以不用购买&#xff0c;因为开通的时候可以有180天的…

单链表的基本操作--增删改查

增删改查 #include <stdio.h> #include <stdlib.h>#define OK 1 #define ERROR 0 typedef int Status; typedef char ElemType;typedef struct Lnode {ElemType data; //结点的数据域struct Lnode* next; //节点的指针域 }Lnode,*LinkList;初始化 Status InitLis…

【PCL】(二十八)超体素聚类分割点云

&#xff08;二十九&#xff09;超体素聚类分割点云 论文&#xff1a;Voxel Cloud Connectivity Segmentation - Supervoxels for Point Clouds supervoxel_clustering.cpp #include <pcl/console/parse.h> #include <pcl/point_cloud.h> #include <pcl/poin…

重启 explorer 进程的正确做法(二)

重启资源管理器进程的方法不唯一&#xff0c;但长期以来大家对实施方法用的不到位。 在上一篇中我认为&#xff1a;“我们往往使用 TerminateProcess 并传入 PID 和特殊结束代码 1 或者 taskkill /f /im 等方法重启资源管理器( explorer.exe )&#xff0c;其实这是不正确的。我…

21 卷积层里的多输入多输出通道【李沐动手学深度学习v2课程笔记】

目录 1. 多输入输出通道&相应代码实现 1.1 多输入 1.2 多输出 1.3 1x1 卷积层 1.4 小结 1. 多输入输出通道&相应代码实现 1.1 多输入 为了加深理解&#xff0c;我们实现一下多输入通道互相关运算。 简而言之&#xff0c;我们所做的就是对每个通道执行互相关操作&a…

CentOS 8启动流程

一、BIOS与UEFI BIOS Basic Input Output System的缩写&#xff0c;翻译过来就是“基本输入输出系统”&#xff0c;是一种业界标准的固件接口&#xff0c;第一次出现在1975年&#xff0c;是计算机启动时加载的第一个程序&#xff0c;主要功能是检测和设置计算机硬件&#xff…

题目:泡澡(蓝桥OJ 3898)

问题描述&#xff1a; 解题思路&#xff1a; 图解&#xff1a;&#xff08;以题目样例为例子&#xff09; 注意点&#xff1a;题目的W是每分钟最大出水量&#xff0c;因此有一分钟的用水量大于出水量则不通过。 补充&#xff1a;差分一般用于对一段区间每个元素加相同值&#x…

JZ76 删除链表中重复的结点

/*public class ListNode {int val;ListNode next null;ListNode(int val) {this.val val;} } */import java.util.*; public class Solution {public ListNode deleteDuplication(ListNode pHead) {//初步想想法&#xff1a; 弄一个hashmap 然后进行key存储起来。然后 如果存…

hibernate查询时会无限循环,然后报错:Exception in thread “main“ java.lang.StackOverflowError

遇到的情况有&#xff1a; 1、建表对应的时候“意外”添加了索引。解决&#xff1a;需要把索引删掉 2、打印查询到的单个实体信息时&#xff0c;使用了toString()方法。解决&#xff1a;不用就行了 3、多对多映射&#xff0c;查询到的整个实体集合时&#xff0c;直接打印这个…

web前端框架

目前比较火热的几门框架: React React是由Facebook(脸书)开发和创建的开源框架。React 用于开发丰富的用户界面&#xff0c;特别是当您需要构建单页应用程序时。它是最强大的前端框架。 弊端: 您不具备 JavaScript 的实践知识&#xff0c;则建议不要使用 React。同样&#x…

2024 年广东省职业院校技能大赛(高职组) “云计算应用”赛项样题①

2024 年广东省职业院校技能大赛&#xff08;高职组&#xff09; “云计算应用”赛项样题① 模块一 私有云&#xff08;50 分&#xff09;任务 1 私有云服务搭建&#xff08;10 分&#xff09;任务 2 私有云服务运维&#xff08;25 分&#xff09;任务 3 私有云运维开发&#xf…

人工智能(AI)领域最流行的八大算法概括

人工智能&#xff08;AI&#xff09;领域最流行的八大算法概括&#xff01; 1. 卷积神经网络&#xff08;CNN&#xff0c;Convolutional Neural Network&#xff09; 2. 图神经网络&#xff08;GNN&#xff0c;Graph Neural Network&#xff09; 3. 循环神经网络&#xff08;RN…

蓝桥杯第一天

这题就是典型的位数贡献大于数量贡献&#xff0c; 1花的火柴更少&#xff0c;所以尽量用完10个1&#xff0c;然后其实就是简单的背包问题尽量拿最多的物品&#xff08;数字&#xff09;&#xff0c;限重为300&#xff0c;各物品&#xff08;数字&#xff09;的重量即为所需火柴…

Python语言元素之变量

程序是指令的集合&#xff0c;写程序就是用指令控制计算机做我们想让它做的事情。那么&#xff0c;为什么要用Python语言来写程序呢&#xff1f;因为Python语言简单优雅&#xff0c;相比C、C、Java这样的编程语言&#xff0c;Python对初学者更加友好。 一、一些计算机常识 在…

储能系统--户用储能欧洲市场(三)

五、户用市场地域分析 2022年以来&#xff0c;全球能源供需格局进入调整阶段&#xff0c;越来越多的国家将储能列为加速其清洁能源转型的必选项。根据中关村储能产业技术联盟 &#xff08;CNESA&#xff09;数据&#xff0c;2022年全球新增投运电力储能项目装机规模30.7GW&…

吴恩达机器学习笔记十六 如何debug一个学习算法 模型评估 模型选择和训练 交叉验证测试集

如果算法预测出的结果不太好&#xff0c;可以考虑以下几个方面&#xff1a; 获得更多的训练样本 采用更少的特征 尝试获取更多的特征 增加多项式特征 增大或减小 λ 模型评估(evaluate model) 例如房价预测&#xff0c;用五个数据训练出的模型能很好的拟合这几个数据&am…

贪吃蛇(C语言实现)

贪食蛇&#xff08;也叫贪吃蛇&#xff09;是一款经典的小游戏。 —————————————————————— 本博客实现使用C语言在Windows环境的控制台中模拟实现贪吃蛇小游戏。 实行的基本功能&#xff1a; • 贪吃蛇地图的绘制 • 蛇吃食物的功能&#xff08;上、…