RSS 基础
本指南面向希望深入了解如何制作 RSS 订阅源的高级用户。如果您是第一次制作 RSS 订阅源,我们建议先阅读 制作自己的 RSSHub 路由。
一旦您获取了要包含在您的 RSS 订阅源中的数据,就可以将其传递给 ctx.set('data', obj)
。然后RSSHub的中间件 template.tsx
将处理数据并以所需的格式呈现 RSS 输出(默认为RSS 2.0)。除了 制作自己的 RSSHub 路由 中提到的字段外,您还可以使用以下字段进一步自定义 RSS 订阅源。
需要注意的是,并非所有字段都适用于所有的输出格式,因为 RSSHub 支持多种输出格式。下表显示了不同输出格式兼容的字段。我们使用以下符号表示兼容性:A
表示 Atom,J
表示 JSON Feed,R
表示 RSS 2.0。
频道级别
以下表格列出了你可以用来定制你的 RSS 订阅源频道级别的字段:
字段 | 描述 | 默认值 | 兼容性 |
---|---|---|---|
title | (推荐) 源的名称,应为纯文本 | RSSHub | A, J, R |
link | (推荐) 与源关联的网站网址,应链接到一个可读的网站 | https://rsshub.app | A, J, R |
description | (可选) 源的摘要,应为纯文本 | 如果未指定,默认为 title | J, R |
language | (可选) 源的主要语言,应为 RSS语言代码 或 ISO 639 语言代码之一 | zh-cn | J, R |
image | (推荐) 表示频道的高清图片的网址 | undefinded | J, R |
icon | (可选) Atom 源的图标 | undefinded | J |
logo | (可选) RSS 源的标志 | undefinded | J |
subtitle | (可选) Atom 源的副标题 | undefinded | A |
author | (可选) Atom 源的作者或 JSON Feed 的作者 | RSSHub | A, J |
itunes_author | (可选) 播客源的作者 | undefinded | R |
itunes_category | (可选) 播客源的分类 | undefinded | R |
itunes_explicit | (可选) 播客源是否含有煽情露骨内容 | undefinded | R |
allowEmpty | (可选) 是否允许空源。如果设置为 true ,即使没有文章,也会生成源 | undefinded | A, J, R |
在 RSS 订阅源中,每个条目都由描述它的一组字段表示。下表列出了可用的字段:
字段 | 描述 | 默认值 | 兼容性 |
---|---|---|---|
title | (必填) 条目的标题,应仅使用纯文本 | undefinded | A, J, R |
link | (推荐) 条目的链接,应链接到可读的网站 | undefinded | A, J, R |
description | (推荐) 条目的内容。对于 Atom 订阅,应是 atom:content 元素。对于 JSON Feed,应是 content_html 字段 | undefinded | A, J, R |
author | (可选) 条目的作者 | undefinded | A, J, R |
category | (可选) 条目的分类。字符串或字符串数组皆可 | undefinded | A, J, R |
guid | (可选) 条目的唯一标识符 | **`link | |
pubDate | (推荐) 条目的发布日期,应该 遵从规范 是 Date object | undefinded | A, J, R |
updated | (可选) 条目的最后修改日期,应该是 Date object | undefinded | A, J |
itunes_item_image | (可选) 条目相关联的图片的网址 | undefinded | R |
itunes_duration | (可选) 音频或视频条目的长度,以秒为单位(或格式为 H:mm:ss),应为数字或字符串 | undefinded | J, R |
enclosure_url | (可选) 条目相关联的附件的网址 | undefinded | J, R |
enclosure_length | (可选) 附件文件的大小(以 byte 为单位),应为数字 | undefinded | J, R |
enclosure_type | (可选) 附件文件的 MIME 类型,应为字符串 | undefinded | J, R |
upvotes | (可选) 条目的赞数,应为数字 | undefinded | A |
downvotes | (可选) 条目的踩数,应为数字 | undefinded | A |
comments | (可选) 条目的评论数,应为数字 | undefinded | A |
media.* | (可选) 条目相关的媒体。更多详情请参见 媒体 RSS | undefinded | R |
doi | (可选) 条目的数字对象标识符 (DOI),应为格式为 10.xxx/xxxxx.xxxx 的字符串 | undefinded | R |
格式考虑
在指定 RSS 订阅源中的某些字段时,重要的是要注意一些格式考虑因素。具体来说,您应避免在以下字段中包含任何换行符、连续的空格或前导/尾随空格:title
,subtitle
(仅适用于 Atom),author
(仅适用于 Atom),item.title
和 item.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 订阅源的阅读器兼容。