Skip to main content

Command Palette

Search for a command to run...

如何用RSSHub创建自定义RSS源?

Updated
3 min read
如何用RSSHub创建自定义RSS源?

RSSHub 是一个开源的、轻量的 RSS 生成器,它通过定义路由规则来抓取和生成各类网站的 RSS 源。而 RSSHub Radar 是一个浏览器扩展,它可以帮助你快速生成适合当前网页的 RSSHub 路由。

以下是使用 RSSHub Radar 的简要步骤:

安装 RSSHub Radar

  1. 安装浏览器扩展

使用 RSSHub Radar 生成 RSS 源

  1. 访问你要监控的网页

    • 打开浏览器并访问你想要生成 RSS 源的网页。
  2. 启动 RSSHub Radar

    • 在网页加载完成后,点击浏览器工具栏上的 RSSHub Radar 图标。它会自动检测该网页是否支持 RSSHub 路由规则。
  3. 选择合适的路由规则

    • RSSHub Radar 会列出该网页支持的所有 RSSHub 路由规则。选择适合你的路由规则,点击生成对应的 RSS 源链接。
  4. 订阅生成的 RSS 源

    • 复制生成的 RSS 源链接,并在你喜欢的 RSS 阅读器中订阅。

示例

假设你想监控某个新闻网站的特定栏目,可以按照以下步骤进行:

  1. 打开目标网站的栏目页面,例如 https://example.com/news/technology

  2. 点击 RSSHub Radar 图标,查看可用的路由规则。

  3. 选择适合的路由规则,例如 /example/news/:category

  4. 复制生成的 RSS 源链接,例如 https://rsshub.app/example/news/technology

  5. 在 RSS 阅读器中订阅该链接

自定义 RSSHub 规则

如果你发现 RSSHub 没有预定义的规则来监控你需要的网站,你可以考虑自己添加新的路由规则。以下是一个基本的步骤:

  1. Fork RSSHub 仓库

  2. 添加新路由规则

    • 根据 RSSHub 文档 添加新的网站路由规则。

    • 路由规则通常位于 lib/routes/ 目录下。

  3. 测试你的规则

    • 本地运行 RSSHub,确保你添加的规则工作正常。
  4. 提交 Pull Request

    • 将你的改动提交回原始的 RSSHub 仓库,等待合并。

通过这些步骤,你可以轻松地利用 RSSHub 和 RSSHub Radar 来监控网页,并生成 RSS 源,比手动编写脚本要简单得多。

下面是一个详细的示例,展示如何为 RSSHub 添加自定义规则,以生成你需要的 RSS 源。

示例网站

假设我们要为一个虚构的新闻网站 example.com 开发自定义 RSSHub 规则,该网站有以下页面结构:

开始开发

  1. Fork 和 Clone RSSHub 仓库

    首先,fork RSSHub 仓库 并将其克隆到本地:

     git clone https://github.com/<your-username>/RSSHub.git
     cd RSSHub
    
  2. 安装依赖

    安装项目依赖:

     npm install
    
  3. 创建新路由文件

    lib/routes/ 目录下为你的目标网站创建一个新的目录,例如 example,并在其中创建一个 news.js 文件:

     mkdir lib/routes/example
     touch lib/routes/example/news.js
    
  4. 编写路由规则

    编辑 news.js 文件,添加以下内容:

     const got = require('@/utils/got');
     const cheerio = require('cheerio');
     const { parseDate } = require('@/utils/parse-date');
    
     module.exports = async (ctx) => {
         const category = ctx.params.category || 'latest';
         const url = `https://example.com/news/${category}`;
         const response = await got(url);
         const $ = cheerio.load(response.data);
    
         const list = $('.news-item').map((_, item) => {
             item = $(item);
             const title = item.find('.news-title').text();
             const link = item.find('.news-title a').attr('href');
             const pubDate = parseDate(item.find('.news-date').text());
    
             return {
                 title,
                 link,
                 pubDate,
             };
         }).get();
    
         ctx.state.data = {
             title: `Example News - ${category}`,
             link: url,
             item: list,
         };
     };
    

    这里我们使用 got 来获取网页内容,使用 cheerio 来解析 HTML,并提取新闻标题、链接和发布日期。

  5. 注册路由

    编辑 lib/router.js 文件,添加你的新路由:

     module.exports = (router) => {
         router.get('/example/news/:category?', require('./routes/example/news'));
     };
    
  6. 本地运行 RSSHub

    启动 RSSHub 以测试你的新路由:

     npm start
    

    在浏览器中访问 http://localhost:1200/example/news/technology,应该可以看到生成的 RSS 源。

  7. 提交代码并创建 Pull Request

    如果你的自定义规则工作正常,可以将更改提交并推送到你的 fork 仓库:

     git add .
     git commit -m "Add custom RSS rule for example.com news"
     git push origin master
    

    然后到 GitHub 上为原始的 RSSHub 仓库创建一个 Pull Request。

完整代码示例

lib/routes/example/news.js

const got = require('@/utils/got');
const cheerio = require('cheerio');
const { parseDate } = require('@/utils/parse-date');

module.exports = async (ctx) => {
    const category = ctx.params.category || 'latest';
    const url = `https://example.com/news/${category}`;
    const response = await got(url);
    const $ = cheerio.load(response.data);

    const list = $('.news-item').map((_, item) => {
        item = $(item);
        const title = item.find('.news-title').text();
        const link = item.find('.news-title a').attr('href');
        const pubDate = parseDate(item.find('.news-date').text());

        return {
            title,
            link,
            pubDate,
        };
    }).get();

    ctx.state.data = {
        title: `Example News - ${category}`,
        link: url,
        item: list,
    };
};

lib/router.js

module.exports = (router) => {
    router.get('/example/news/:category?', require('./routes/example/news'));
};

通过这个示例,你可以学习到如何为一个特定的网站添加自定义的 RSS 规则。你可以根据不同网站的结构和需求调整代码,以满足你具体的需求。

Knowledge Management System

Part 1 of 3

在这个信息爆炸的时代,我们每天都在被无数的资讯包围,微博、微信、博客、书籍……我们不停地输入,却常常感到迷茫和焦虑,觉得自己在知识的海洋中迷失了方向。你是否也曾在书本中找到灵感,却难以转化为实际行动?你是否也曾在脑海中闪现无数创意,却无法将其变成有影响力的作品? 欢迎来到《打造持续高效的个人输入/输出工作流系统》的专栏。在这里,我们将一起探索如何将日常的阅读与学习转化为持续而有意义的输出,如何在信息的洪流中找到属于自己的方向,并最终实现个人成长和职业发展的突破。

Up next

专栏预告:打造持续高效的个人输入/输出工作流系统

开篇语 在这个信息爆炸的时代,我们每天都在被无数的资讯包围,微博、微信、博客、书籍……我们不停地输入,却常常感到迷茫和焦虑,觉得自己在知识的海洋中迷失了方向。你是否也曾在书本中找到灵感,却难以转化为实际行动?你是否也曾在脑海中闪现无数创意,却无法将其变成有影响力的作品? 欢迎来到《打造持续高效的个人输入/输出工作流系统》的专栏。在这里,我们将一起探索如何将日常的阅读与学习转化为持续而有意义的输出,如何在信息的洪流中找到属于自己的方向,并最终实现个人成长和职业发展的突破。 1. 引言 专栏概述:...

More from this blog

私有云存储的解决方案选型全攻略

选择私有云存储方案时,需要考虑多个因素,包括易用性、功能、安全性、可扩展性、成本、社区支持等。以下是你提到的几个私有云存储方案的简要比较: Filerun 特点:界面类似Google Drive,支持WebDAV,提供文件同步和分享功能。 优势:用户友好的界面,易于设置和使用。 劣势:功能相比其他一些解决方案可能较少,且为闭源软件。 KodBox 特点:基于Seafile的企业级文件同步和分享解决方案,支持私有部署。 优势:强大的文件同步功能,支持文件版本控制和权限管理。 劣...

Oct 26, 20242 min read

最佳实践:如何工程化你的c++项目

工程化一个C++项目涉及许多方面,包括项目结构、构建系统、依赖管理、代码风格、测试、CI/CD(持续集成/持续部署)等。以下是一些最佳实践,帮助你工程化你的C++项目: 一、最佳实践参考规范 1. 组织项目结构 清晰的目录结构:为源代码、头文件、测试、文档、和构建文件分别创建目录。例如: /project-root ├── src/ # 源代码 ├── include/ # 头文件 ├── tests/ # 测试代码 ├── doc...

Aug 30, 20243 min read
最佳实践:如何工程化你的c++项目

最佳实践:如何工程化你的Python项目

在管理Python工程项目时,采用最佳实践能够提高代码质量、可维护性和协作效率。以下是一些推荐的Python工程项目管理最佳实践: 一、最佳实践参考规范 1. 项目结构 一个清晰的项目结构有助于组织代码和文件,使项目易于理解和导航。通常的项目结构如下: project-name/ │ ├── src/ # 源代码目录 │ └── package_name/ # 项目主包 │ ├── __init__.py │ ├── module1....

Aug 30, 20243 min read
最佳实践:如何工程化你的Python项目

Google Test:从入门到高手

Google Test(简称GTest)是一个由Google开发的C++测试框架,广泛用于单元测试。以下是从入门到高手的学习路径,涵盖基本使用到高级技巧。 一、入门阶段 安装与配置 安装Google Test库。 在CMake项目中集成Google Test,简单配置编译环境。 使用find_package(GTest)或手动编译Google Test源码。 编写简单测试 测试案例:使用TEST宏编写简单的测试案例。 断言(Assertions):学习EXPECT_EQ、ASS...

Aug 25, 20241 min read
Google Test:从入门到高手

Google Benchmark: 从入门到高手

Google Benchmark 是一个用于 C++ 的微基准测试库,帮助开发者测量代码片段的性能。通过这个库,您可以分析代码在不同输入、数据规模和系统配置下的表现。 一、入门使用 安装 您可以通过包管理器或从源代码构建安装 Google Benchmark: 使用 vcpkg 安装: vcpkg install benchmark 从源码构建: git clone https://github.com/google/benchmark.git cd benchmark cmake...

Aug 24, 20242 min read
Google Benchmark: 从入门到高手

Untitled Publication

15 posts