分类
联系方式
  1. 新浪微博
  2. E-mail

RSSHub

介绍

RSSHub 是一个开源、简单易用、易于扩展的 RSS 生成器,可以给任何奇奇怪怪的内容生成 RSS 订阅源。

原理:请求路由时,RSSHub 会按照给定规则请求源站数据,然后以 RSS 格式输出;如果在设定缓存时间内重新请求路由,则会直接返回缓存内容,不请求源站;再加一点点魔法。

环境

本地运行

安装依赖:yarn 或者 npm install。或者 pnpm install。

本地运行:yarn dev 或者 npm run dev。或者 pnpm start。

本地服务地址:http://localhost:1200

Docker

从头构建容器

RSSHub 提供现成的 Docker 容器,可以直接使用。

下面的代码,是从代码从头构建 Docker 容器。

使用场景:对代码做了修改,需要重新构建容器。

docker build -t maxiee-rsshub:v1 .

Docker Compose 部署

首先创建 volume 持久化 Redis 缓存:

docker volume create redis-data

docker-compose.yml:

version: '3'

services:
    rsshub:
        image: diygod/rsshub
        restart: always
        ports:
            - '1200:1200'
        environment:
            NODE_ENV: production
            CACHE_TYPE: redis
            REDIS_URL: 'redis://redis:6379/'
            PUPPETEER_WS_ENDPOINT: 'ws://browserless:3000'
        depends_on:
            - redis
            - browserless

    browserless:
        # See issue 6680
        image: browserless/chrome:1.43-chrome-stable
        restart: always
        ulimits:
          core:
            hard: 0
            soft: 0

    redis:
        image: redis:alpine
        restart: always
        volumes:
            - redis-data:/data

volumes:
    redis-data:

启动:docker-compose up -d

停止:docker-compose down

传入变量:

代理 PROXY_URI:{protocol}://{host}:{port}

如果是手动运行,通过环境变量 PROXY_URI 设置代理。

启用代理的正则:PROXY_URL_REGEX: 启用代理的 URL 正则表达式,默认全部开启 .*

添加路由

如何自己添加新路由。参见文档:docs\joinus\quick-start.md。

在 /lib/router.js 中添加路由。

在 /lib/routes/ 中添加对应的抓取脚本。

获取数据有两种方式:① got 网路库 ② puppeteer

数据解析的方式:① HTML 用 cheerio 解析,JSON 直接解析

通用配置型路由:通用工具,通过 cheerio(**CSS 选择器、jQuery 函数**)读取 json 数据来简便的生成 RSS。

V2 路由

V2 路由是一种新的路由标准,不需要手动,会被自动载入,无需更新 router.js。具体文档参见 docs\joinus\script-standard.md。

缓存

所有路由都有缓存。有的站点,生成 RSS 不仅需要访问首页,还要进入每个文章页面获取内容。每次访问首页都这么请求,请求量太大。因此把不常变的数据放入缓存里,减小重复网络开销。具体方法为 tryGet。

代理实现

代理的处理位于 lib\utils\request-wrapper.js。

定义了几个变量:

let tunnel;
let HttpsProxyAgent;
let SocksProxyAgent;

let agent = null; // 传入网路库

如果有设置代理,注入到 options,传入底层网络库。

PROXY_URL_REGEX

这个变量控制哪些域名走代理,哪些不走。是一个 JavaScript 正则。

RSS 源

特殊类型

  • 博客源:能被博客软件订阅
  • BT/磁力源:能被 BT 软件订阅
  • 媒体元:能被支持 Media RSS 的工具订阅识别

网络资源

首页

我有特别的 RSS 使用技巧

Docker私有化部署RSSHub全记录

部署