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阅读器有很多很多:

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);
}

参考

  • 20
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Spring Boot提供了许多属性来配置应用程序,包括抓取RSS的功能。您可以在application.properties或application.yml文件中指定这些属性,也可以通过命令行开关来配置。 要抓取RSS,您可以使用Spring Boot提供的相关类和注解。首先,确保您的项目中已经添加了相关的依赖。在Gradle中,您可以在build.gradle文件中添加以下配置: ```groovy dependencies { implementation 'org.springframework.boot:spring-boot-starter-web' implementation 'rome:rome' } ``` 然后,您可以创建一个Controller类来处理抓取RSS的请求。使用`@RestController`注解标记该类,并使用`@GetMapping`注解指定处理GET请求的方法。在方法中,您可以使用Rome库来抓取和解析RSS。 ```java import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; import com.rometools.rome.feed.synd.SyndFeed; import com.rometools.rome.io.SyndFeedInput; import com.rometools.rome.io.XmlReader; @RestController public class RssController { @GetMapping("/rss") public SyndFeed getRssFeed() { try { String rssUrl = "https://example.com/rss-feed"; // 替换为实际的RSS源URL SyndFeedInput input = new SyndFeedInput(); SyndFeed feed = input.build(new XmlReader(new URL(rssUrl))); return feed; } catch (Exception e) { // 处理异常 return null; } } } ``` 在上面的示例中,我们创建了一个`RssController`类,并在`/rss`路径上定义了一个GET请求的处理方法。该方法使用Rome库来抓取和解析指定的RSS源,并返回`SyndFeed`对象。 请注意,上述示例仅提供了一个基本的框架,您可能需要根据实际需求进行进一步的处理和定制。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

johnny233

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值