跳到主要内容

RSS 基础

本指南面向希望深入了解如何制作 RSS 订阅源的高级用户。如果您是第一次制作 RSS 订阅源,我们建议先阅读 制作自己的 RSSHub 路由

一旦您获取了要包含在您的 RSS 订阅源中的数据,就可以将其传递给 ctx.set('data', obj)。然后RSSHub的中间件 template.ts 将处理数据并以所需的格式呈现 RSS 输出(默认为RSS 2.0)。除了 制作自己的 RSSHub 路由 中提到的字段外,您还可以使用以下字段进一步自定义 RSS 订阅源。

需要注意的是,并非所有字段都适用于所有的输出格式,因为 RSSHub 支持多种输出格式。下表显示了不同输出格式兼容的字段。我们使用以下符号表示兼容性:A 表示 Atom,J 表示 JSON Feed,R 表示 RSS 2.0。

频道级别

以下表格列出了你可以用来定制你的 RSS 订阅源频道级别的字段:

字段描述默认值兼容性
title(推荐) 源的名称,应为纯文本RSSHubA, J, R
link(推荐) 与源关联的网站网址,应链接到一个可读的网站https://rsshub.appA, J, R
description(可选) 源的摘要,应为纯文本如果未指定,默认为 titleJ, R
language(可选) 源的主要语言,应为 RSS语言代码 或 ISO 639 语言代码之一zh-cnJ, R
image(推荐) 表示频道的高清图片的网址undefindedJ, R
icon(可选) Atom 源的图标undefindedJ
logo(可选) RSS 源的标志undefindedJ
subtitle(可选) Atom 源的副标题undefindedA
author(可选) Atom 源的作者或 JSON Feed 的作者RSSHubA, J
itunes_author(可选) 播客源的作者undefindedR
itunes_category(可选) 播客源的分类undefindedR
itunes_explicit(可选) 播客源是否含有煽情露骨内容undefindedR
allowEmpty(可选) 是否允许空源。如果设置为 true,即使没有文章,也会生成源undefindedA, J, R

在 RSS 订阅源中,每个条目都由描述它的一组字段表示。下表列出了可用的字段:

字段描述默认值兼容性
title(必填) 条目的标题,应仅使用纯文本undefindedA, J, R
link(推荐) 条目的链接,应链接到可读的网站undefindedA, J, R
description(推荐) 条目的内容。对于 Atom 订阅,应是 atom:content 元素。对于 JSON Feed,应是 content_html 字段undefindedA, J, R
author(可选) 条目的作者undefindedA, J, R
category(可选) 条目的分类。字符串或字符串数组皆可undefindedA, J, R
guid(可选) 条目的唯一标识符**`link
pubDate(推荐) 条目的发布日期,应该 遵从规范Date objectundefindedA, J, R
updated(可选) 条目的最后修改日期,应该是 Date objectundefindedA, J
itunes_item_image(可选) 条目相关联的图片的网址undefindedR
itunes_duration(可选) 音频或视频条目的长度,以秒为单位(或格式为 H:mm:ss),应为数字或字符串undefindedJ, R
enclosure_url(可选) 条目相关联的附件的网址undefindedJ, R
enclosure_length(可选) 附件文件的大小(以 byte 为单位),应为数字undefindedJ, R
enclosure_type(可选) 附件文件的 MIME 类型,应为字符串undefindedJ, R
upvotes(可选) 条目的赞数,应为数字undefindedA
downvotes(可选) 条目的踩数,应为数字undefindedA
comments(可选) 条目的评论数,应为数字undefindedA
media.*(可选) 条目相关的媒体。更多详情请参见 媒体 RSSundefindedR
doi(可选) 条目的数字对象标识符 (DOI),应为格式为 10.xxx/xxxxx.xxxx 的字符串undefindedR
格式考虑

在指定 RSS 订阅源中的某些字段时,重要的是要注意一些格式考虑因素。具体来说,您应避免在以下字段中包含任何换行符、连续的空格或前导/尾随空格:titlesubtitle(仅适用于 Atom),author(仅适用于 Atom),item.titleitem.author

虽然大多数 RSS 阅读器将自动修剪这些空字符,但有些阅读器可能无法正确处理它们。因此,为确保与所有 RSS 阅读器兼容,我们建议在输出这些字段之前将其修剪。如果您制作的路由无法容忍修剪这些空字符,您应考虑更改它们的格式。

另外,虽然其他字段不会被强制修剪,但我们建议尽可能避免违反上述格式规则。如果您正在使用 Cheerio 从网页中提取内容,时刻谨记 Cheerio 会保留换行和缩进。特别是对于 item.description 字段,任何预期之内的换行都应转换为 <br> 标签,以防止其被 RSS 阅读器修剪。尤其是您从 JSON 数据中制作 RSS 订阅时,目标网站返回的 JSON 很有可能含有需要显示的换行符,在这种情况下,应将它们转换为 <br> 标签。

请牢记这些格式考虑因素,以确保您的 RSS 订阅源与所有 RSS 阅读器兼容。

制作 BitTorrent/磁力订阅源

RSSHub 支持制作 BitTorrent/磁力订阅源,这将帮助你的 RSS 订阅源。要制作 BitTorrent/磁力订阅源,您需要在 RSS 源添加附加字段,以符合 BitTorrent 客户端的订阅格式。

以下是制作 BitTorrent/磁力订阅源的示例:

ctx.set('data', {
item: [
{
enclosure_url: '', // 磁力链接
enclosure_length: '', // 文件大小(以 bytes 为单位)(可选)
enclosure_type: 'application/x-bittorrent', // 应固定为 'application/x-bittorrent'
},
],
});

在 RSS 源中包含这些字段,您将能够制作被 BitTorrent 客户端识别并自动下载的 BitTorrent/磁力订阅源。

更新文档

如果您要在 RSSHub 路由中添加对 BitTorrent/磁力订阅支持,最重要的是在文档以反映此功能。要做到这一点,您需要将 Route 组件的 supportBT 属性设置为 "1"。 以下是一个示例:

<Route author="..." example="..." path="..." supportBT="1" />

通过将 supportBT 属性设置为 "1",您将能够准确反映您的路由支持 BitTorrent/磁力订阅。

制作期刊订阅源

RSSHub支持制作期刊订阅源。如果用户提供 通用参数 scihub,则可以将 item.link 替换为 Sci-hub 链接。要制作期刊订阅源,您需要在您的 RSS 源中包含一个附加字段:

ctx.set('data', {
item: [
{
doi: '', // 条目的 DOI(例如,'10.47366/sabia.v5n1a3')
},
],
});

通过在 RSS 源中包含 doi 字段,您将能够制作与 RSSHub 的 Sci-hub 功能兼容的期刊订阅源。

更新文档

要显示您制作的期刊订阅源支持 Sci-hub 功能,您需要将 Route 组件的 supportScihub 属性设置为 "1"。以下是一个示例:

<Route author="..." example="..." path="..." supportScihub="1" />

通过将 supportSciHub 属性设置为 "1",路由文档将准确反映其支持提供具有 Sci-hub 链接的期刊订阅源。

制作播客订阅源

RSSHub 支持制作与播客播放器订阅格式兼容的播客订阅源。要制作播客订阅源,您需要在RSS源中包含几个附加字段:

ctx.set('data', {
itunes_author: '', // **必需**,应为主播名称
itunes_category: '', // 播客分类
image: '', // 专辑封面,作为播客源时**必填**
item: [
{
itunes_item_image: '', // 条目的封面图像
itunes_duration: '', // 可选,音频的长度,以秒为单位 或 H:mm:ss 格式
enclosure_url: '', // 音频直链
enclosure_length: '', // 可选,文件大小,以 Byte 为单位
enclosure_type: '', // 音频文件 MIME 类型(常见类型 .mp3 是 'audio/mpeg',.m4a 是 'audio/x-m4a',.mp4 是 'video/mp4')
},
],
});

通过在 RSS 源中包含这些字段,您将能够制作与播客播放器兼容的播客订阅源。

更新文档

要显示您制作的订阅源与播客播放器兼容,您需要将 Route 组件的 supportPodcast 属性设置为 "1"。以下是一个示例:

<Route author="..." example="..." path="..." supportPodcast="1" />

通过将 supportPodcast 属性设置为 "1",路由文档将准确反映其支持播客订阅。

制作媒体订阅源

RSSHub支持制作与 Media RSS 格式兼容的媒体订阅源。要制作体订阅源订阅源,您需要在 RSS 源中包含这些附加字段。

以下是制作媒体订阅源的示例:

ctx.set('data', {
item: [
{
media: {
content: {
url: '...', // 媒体内容的 URL
type: '...', // 媒体内容的 MIME 类型(例如,对于 .mp3 文件是 'audio/mpeg')
},
thumbnail: {
url: '...', // 缩略图 URL
},
'...': {
'...': '...', // 亦可包含其他媒体属性
}
},
},
],
});

通过在 RSS 源中包含这些字段,您将能够制作与 Media RSS 格式兼容的媒体订阅源。

制作包含互动的 Atom 订阅源

RSSHub支持制作包含互动,如点赞、反对和评论的 Atom 订阅源。要制作带有互动的 Atom 订阅源,您需要在 RSS 源中包含附加字段,用于指定每个条目的互动计数。

以下是制作带有互动的 Atom 订阅源的示例:

ctx.set('data', {
item: [
{
upvotes: 0, // 条目的点赞数
downvotes: 0, // 条目的踩数
comments: 0, // 条目的评论数
},
],
});

通过在 Atom 源中包含这些字段,您将能够制作包含互动的 Atom 订阅源,这些源与支持 Atom 订阅源的阅读器兼容。