---
sidebar_position: 1
---

# RSS 基础

本指南面向希望深入了解如何制作 RSS 订阅源的高级用户。如果您是第一次制作 RSS 订阅源，我们建议先阅读 [制作自己的 RSSHub 路由](/zh/joinus/new-rss/start-code)。

一旦您获取了要包含在您的 RSS 订阅源中的数据，就可以返回它。然后RSSHub的中间件 [`template.tsx`](https://github.com/DIYgod/RSSHub/blob/master/lib/middleware/template.tsx) 将处理数据并以所需的格式呈现 RSS 输出（默认为RSS 2.0）。除了 [制作自己的 RSSHub 路由](/zh/joinus/new-rss/start-code) 中提到的字段外，您还可以使用以下字段进一步自定义 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语言代码](https://www.rssboard.org/rss-language-codes) 或 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 || title`**  | A, J, R |
| **`pubDate`**     | *（推荐）* 条目的发布日期，应该 [遵从规范](/zh/joinus/advanced/pub-date) 是 [Date object](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Date) | `undefinded` | A, J, R |
| **`updated`**     | *（可选）* 条目的最后修改日期，应该是 [Date object](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Date) | `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](https://www.rssboard.org/media-rss) | `undefinded` | R |
| **`doi`** | *（可选）* 条目的数字对象标识符 (DOI)，应为格式为 `10.xxx/xxxxx.xxxx` 的字符串 | `undefinded` | R |

:::warning 格式考虑

在指定 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／磁力订阅源的示例：

```js
return {
    item: [
        {
            enclosure_url: '', // 磁力链接
            enclosure_length: '', // 文件大小（以 bytes 为单位）（可选）
            enclosure_type: 'application/x-bittorrent', // 应固定为 'application/x-bittorrent'
        },
    ],
};
```

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

### 更新文档

如果您要在 RSSHub 路由中添加对 BitTorrent／磁力订阅支持，最重要的是在文档以反映此功能。要做到这一点，您需要将 `Route` 导出对象的 `features` 中的 `supportBT` 属性设置为 `true`。以下是一个示例：

```ts
export const route: Route = {
    // ...
    features: {
        // ...
        supportBT: true,
    },
};
```

通过将 `supportBT` 属性设置为 `true`，您将能够准确反映您的路由支持 BitTorrent／磁力订阅。

## 制作期刊订阅源

RSSHub支持制作期刊订阅源。如果用户提供 [通用参数](/zh/guide/parameters#输出-sci-hub-链接) `scihub`，则可以将 `item.link` 替换为 Sci-Hub 链接。要制作期刊订阅源，您需要在您的 RSS 源中包含一个附加字段：

```js
return {
    item: [
        {
            doi: '', // 条目的 DOI（例如，'10.47366/sabia.v5n1a3'）
        },
    ],
};
```

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

### 更新文档

要显示您制作的期刊订阅源支持 Sci-Hub 功能，您需要将 `Route` 导出对象的 `features` 中的 `supportScihub` 属性设置为 `true`。以下是一个示例：

```ts
export const route: Route = {
    // ...
    features: {
        // ...
        supportScihub: true,
    },
};
```

通过将 `supportScihub` 属性设置为 `true`，路由文档将准确反映其支持提供具有 Sci-Hub 链接的期刊订阅源。

## 制作播客订阅源

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

```js
return {
    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 源中包含这些字段，您将能够制作与播客播放器兼容的播客订阅源。

:::tip 进一步阅读

-   [A Podcaster’s Guide to RSS](https://help.apple.com/itc/podcasts_connect/#/itcb54353390)
-   [Google 播客的 RSS Feed 指南](https://support.google.com/podcast-publishers/answer/9889544)

:::

### 更新文档

要显示您制作的订阅源与播客播放器兼容，您需要将 `Route` 导出对象的 `features` 中的 `supportPodcast` 属性设置为 `true`。以下是一个示例：

```ts
export const route: Route = {
    // ...
    features: {
        // ...
        supportPodcast: true,
    },
};
```

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

## 制作媒体订阅源

RSSHub支持制作与 [Media RSS](https://www.rssboard.org/media-rss) 格式兼容的媒体订阅源。要制作体订阅源订阅源，您需要在 RSS 源中包含这些附加字段。

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

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

通过在 RSS 源中包含这些字段，您将能够制作与 [Media RSS](https://www.rssboard.org/media-rss) 格式兼容的媒体订阅源。

## 制作包含互动的 Atom 订阅源

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

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

```js
return {
    item: [
        {
            upvotes: 0, // 条目的点赞数
            downvotes: 0, // 条目的踩数
            comments: 0, // 条目的评论数
        },
    ],
};
```

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