提交新的 RSSHub Radar 规则
如果需要查看新规则的结果,建议您安装浏览器扩展程序。您可以在 参与我们 页面下载适合您浏览器的扩展程序。
编写规则
要制作新的 RSSHub Radar 规则,需要在 /lib/v2/ 目录下,相应的域名空间创建 radar.js 文件。下面以制 作 GitHub 仓库 Issues 的 RSS 源为例,详见此处。编写的代码应如下所示:
module.exports = {
'github.com': {
_name: 'GitHub',
'.': [
{
title: '仓库 Issues',
docs: 'https://docs.rsshub.app/routes/programming#github',
source: ['/:user/:repo/issues/:id', '/:user/:repo/issues', '/:user/:repo'],
target: '/github/issue/:user/:repo',
},
],
},
};
顶层对象键
对象键是域名本身,不含任何子域名、URL 路径或协议。

在此示例中,域名为 github.com,对象键则为 github.com。
内部对象键
第一个内部对象键是 _name,是网站的名称。这应与路由文档的二级标题 (##) 相同。在此示例中是 GitHub。
其余的内部对象键是网站的子域名。如果要匹配的网站没有子域名,或者想同时匹配 www.example.com 和 example.com,则应使用 '.'。在此示例中,我们将使用 '.',因为我们希望匹配 github.com。请注意,每个子域名键应返回一个对象数组。
- github.com 和 www.github.com
- abc.github.com
- abc.def.github.com
module.exports = {
'github.com': {
_name: 'GitHub',
'.': [
{
title: '...',
docs: '...',
source: ['/...'],
target: '/...',
},
],
},
};
module.exports = {
'github.com': {
_name: 'GitHub',
abc: [
{
title: '...',
docs: '...',
source: ['/...'],
target: '/...',
},
],
},
};
module.exports = {
'github.com': {
_name: 'GitHub',
'abc.def': [
{
title: '...',
docs: '...',
source: ['/...'],
target: '/...',
},
],
},
};
title
标题是必填字段,应与路由文档的三级标题 (###) 相同。在此示例中,它是仓库 Issues。在 title 中无须重复网站名称 (_name),即 GitHub。
docs
文档链接也是必填字段。在这种情况下,GitHub 仓库 Issues 的文档链接将是 https://docs.rsshub.app/routes/programming#github。请注意,URL hash 应位于二级标题 (##) 处,而不是三级标题 (###) https://docs.rsshub.app/routes/programming#github-cang-ku-issues。
source
source 是可选字段,应指定 URL 路径。如果不想 匹配任何 URL 路径,请将其留空。它只会出现在 RSSHub Radar 浏览器扩展程序的适用于当前网站的 RSSHub选项中。
source 应为一个字符串数组。例如,如果 GitHub 仓库 Issues 的 source 是 /:user/:repo,则意味着当您访问 https://github.com/DIYgod/RSSHub 时将匹配 /:user/:repo,此时返回的结果 params 将是:{user: 'DIYgod', repo: 'RSSHub'}。浏览器扩展程序使用这些参数根据 target 字段建立 RSSHub 订阅地址。
如果要提取的值在 URL 参数或 URL hash 中,请使用 target 函数而不是 source 字段。 此外,请记住,source 字段仅匹配 URL 路径,而不匹配 URL 的任何其他部分。
您也可以使用 * 符号执行通配符匹配。请注意,此处的语法与 path-to-regexp 不同。例如,/:user/:repo/* 将匹配 https://github.com/DIYgod/RSSHub/issues 和 https://github.com/DIYgod/RSSHub/issues/1234。如果要对匹配结果进行命名,可以在 * 符号后放置变量名。例如,/user/:repo/*path,在此情况下,path 将是 issues 和 issues/1234。
target
目标是可选字段,并用于生成 RSSHub 订阅地址,它可以接受字符串或函数作为输入。如果你不想建立 RSSHub 订阅地址,可以将此字段留空。
以 GitHub 仓库 Issues 为例,在 RSSHub 文档中相应的路由为 /github/issue/:user/:repo。
在将 source 路径中的 user 匹配为 DIYgod,repo 匹配为 RSSHub 后,RSSHub 路由中的 :user 将被替换为 DIYgod,:repo 将被替换为 RSSHub,结果为 /github/issue/DIYgod/RSSHub。
target 函数
如果 source 路径不能匹配 RSSHub 路由的期望参数,则可以将 target 作为函数使用,与 params、url 和 document 参数一起使用。其中,params 参数包含 source 字段匹配到的参数,而 url 参数是当前的网页 URL 字符串,document 参数是 document 接口。
需要注意的是,target 函数在沙盒中运行,对 document 的任何更改都不会反映在网页中。
下面是使用 target 字段作为函数的两个示例:
- 使用 params 匹配
- 使用 URL 匹配
module.exports = {
'github.com': {
_name: 'GitHub',
'.': [
{
title: '仓库 Issues',
docs: 'https://docs.rsshub.app/routes/programming#github',
source: ['/:user/:repo/issues/:id', '/:user/:repo/issues', '/:user/:repo'],
target: (params) => `/github/issue/${params.user}/${params.repo}`,
},
],
},
};
module.exports = {
'github.com': {
_name: 'GitHub',
'.': [
{
title: '仓库 Issues',
docs: 'https://docs.rsshub.app/routes/programming#github',
source: ['/:user/:repo'],
target: (_, url) => `/github/issue${new URL(url).pathname}`
},
],
},
};
两个示例将返回与 第一个示例 相同的 RSSHub 订阅地址。
RSSBud
RSSBud 支持 RSSHub Radar 的规则并且也会自动更新,但是请注意:
- 使用
'.'子域名可以使 RSSBud 支持常见的移动端子域名,例如m/mobile。 - 在
target中使用document的规则并不适用于 RSSBud:RSSBud 不是浏览器扩展程序,它只能获取和分析网站的 URL,不能运行 JavaScript。
补充文档
如前所述,在 RSSHub 文档添加 radar="1" 将显示“支持 Radar”的徽章。