最近刷推, 多次刷到关于 DIYgod 大佬最新 follow 项目的体验分享, 然而目前还在邀请测试的阶段,没法参与。但大佬的另外一个项目 RSSHub 却帮我解决了一个困扰很久的问题。

一直以来,我主要的信息来源是推特和公众号。虽然也收藏了一些其他资讯站点和个人博客,但由于太分散(太懒)了,基本不会点开去看。而 RSSHub 项目就帮我解决了这个问题。这篇博客主要分享一下关于 RSSHub + Reeder 5 使用。

2024-11-07
用上 Follow 了,但更多的还在使用 Reeder
最近用上了 Follow, 但只有桌面端。平常还是手机上使用的比较多, 于是用的更多的还是 Reeder。
Follow
2024-10-20
部署了一个 WeWe RSS,将微信公众号转换成 RSS 订阅
平常不少信息是来自微信公众号的,利用 WeWe RSS 能爬取公众号订阅聚合成 RSS,在Reeder 上统一阅读更方便了。
WeWe RSS

关于 RSS

RSS, 1999年网景公司推出, 当时全称 Rich Site Summary, 最新发展到 2.0, 其全称也可叫做 Really Simple Syndication, 这是一种消息来源的格式规范,聚合站点的更新内容,输出XML格式,方便客户端订阅。

最早接触 RSS 还是当初搭建博客的时候,配置项里面有个 RSS 配置,当时也就随手配置了一下,没想到用它来聚合消息。 而且随着自媒体/短视频的发展,身边几乎没有朋友用这种方式订阅信息了。直至前几天,看到 RSSHub,我决定试一试,这两周体验下来感觉还不错。

自建 RSShub

RSSHub 是一个可以将任何内容都可以抓取然后转换成 RSS 订阅的网站。

项目的 slogan 万物皆可RSS, 它不仅可以订阅各种博客、论坛、新媒体,甚至社交媒体、推特等都不在话下,很强,详见食用指南

该项目已经持续发展6年了,一直在持续更新, 甚至今年进行了一次重构, 不得不佩服大佬们的行动力。

alt text

项目支持私有部署,建议会折腾的自己可以部署一个。使用 docker-compsoe 很简单的就完成部署了,配置文件官方的文档中都有了 docker-compose.yml

对外提供访问的话,最好套一层 Nginx, 再用 acme.sh 来个证书自动化就完美了, 我的配置我贴在在文尾

除此之外,官方还提供了 Radar 功能,结合浏览器插件就可以发现你正在访问的站点 RSSHub 是否已经支持订阅了,如果支持了可以一键转换成订阅的地址, 很方便。 不仅如此,还支持移动端哦。

alt text

当然,如果你要订阅 Github Trending, 或者 Twitter 时间线等,你需要配置一下对应的 Token, 详见配置

Reeder 5

RSS 的源有了,接下来就是客户端的选择了。我选择了 Reeder 5, 一个 macOS/iOS/iPadOS 上的 RSS 阅读器。 虽然收费,但是几周的体验下来,感觉还是很不错的。

Reeder 5 支持多种 RSS 源,包括 Feedly, Inoreader 等等,当然也支持自定义 RSS 源。

目前我主要用的就是订阅一些博客、公众号、推特等, 它的排版简洁,字体也还不错,而且支持 iCloud 同步,很方便。

alt text

初此之外还有一个功能,稍后再读,我也很喜欢,有时候看到一些文章,当时没时间细看,可以浏览器中直接选择 在 Reeder 中稍后再读,有时间在打开APP慢慢看,很方便(以前都是发送到微信聊天里面…)。

alt text

alt text

WeWe RSS

平常不少信息都来自微信公众号订阅,然而在微信里阅读的时候干扰比较多,而且公众号不支持 RSS 订阅。 WeWe RSS 很好的解决了这个问题。

需要注意的是,WeWeRSS 核心也是爬虫,爬取微信读书的API,核心部分的代码并没有开源(开源估计很快就能被封了),微信读书相关的接口通过 weread.111965.xyz 服务来转发的。虽然作者也说了只是做转发,但建议使用的时候用小号登录。

alt text

上面是部署好的页面,可以通过粘贴公众号的文章来订阅公众号,同时支持 RSS 订阅和导出 OPML 。感谢作者的奉献,希望这个项目能长久维护下去。

配置就不多说了,官方文档写的还可以,我的配置也贴在文末。

总结

目前这套组合体验下来,感觉不错,一些我想关注的信息,都可以通过 RSSHub 聚合到 Reeder 5 中,然后在合适的时间看,不用担心错过了。

然而,与此同时,信息量也变大了,自己的接受量却很有限,需要做一定的取舍,保留那些适合自己的就好了,不然反而会变成信息焦虑。

之外还有一点,目前微信公众号的文章,还没有很好的爬取方式(虽然看到有付费方案),目前只能通过公众号的订阅号来看。

最后,很期待 DIYgod 大佬的 follow 项目,希望能早日体验到。

相关配置

最后的最后,分享一下我的配置,供参考。

为了顺利的访问 twitter, github, 找一台海外的服务器部署比较好。

  • docker-compose.yml

加了个 acme.sh 申请证书,nginx 代理 rsshub。

version: '3.5'
services:
  acme:
    image: neilpang/acme.sh
    restart: always
    container_name: acme.sh
    command: ["daemon"]
    environment:
      # 我是Cloudflare DNS, 其他参考 https://github.com/acmesh-official/acme.sh/wiki/dnsapi
      - CF_Zone_ID=xxxx  
      - CF_Token=xxx
    volumes:
      - ./acme.sh:/acme.sh
      - ./certs:/ssl

  nginx:
    image: nginx
    network_mode: host
    container_name: nginx
    restart: always
    volumes:
      - ./certs:/etc/nginx/ssl
      - ./web-rsshub.conf:/etc/nginx/conf.d/rsshub.conf

  rsshub:
    image: diygod/rsshub
    restart: always
    container_name: rsshub
    ports:
      - '1200:1200'
    environment:
      NODE_ENV: production
      CACHE_TYPE: redis
      REDIS_URL: 'redis://redis:6379/'
      PUPPETEER_WS_ENDPOINT: 'ws://browserless:3000'  # marked
      GITHUB_ACCESS_TOKEN: 'xxxx'
      TWITTER_USERNAME: 'xxx'
      TWITTER_PASSWORD: 'xxx'
      TWITTER_AUTHENTICATION_SECRET: 'xxxx'
    depends_on:
      - redis
      - browserless  # marked
  
  browserless:  # marked
    image: browserless/chrome  # marked
    container_name: rsshub-browserless
    restart: always  # marked
    ulimits:  # marked
      core:  # marked
        hard: 0  # marked
        soft: 0  # marked
  
  redis:
    image: redis:alpine
    container_name: rsshub-redis
    restart: always
    volumes:
        - ./redis-data:/data

  wewerss:
      image: cooderl/wewe-rss-sqlite:latest
      container_name: wewerss
      restart: always
      environment:
          - DATABASE_TYPE=sqlite
          - AUTH_CODE=changeyourpassword
      ports:
          - '4001:4000'
      volumes:
          - ./wewerss-data:/app/data
  • web-rsshub.conf

反向代理 rsshub 配置

server {
    listen                       443 ssl;
    server_name                  rsshub.example.com;
    server_tokens                off;
    http2 on;

    ssl_certificate              /etc/nginx/ssl/fullchain.pem;
    ssl_certificate_key          /etc/nginx/ssl/key.pem;

    ssl_prefer_server_ciphers    on;
    ssl_ciphers                  EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;

    ssl_protocols                TLSv1.1 TLSv1.2 TLSv1.3;
    ssl_session_cache            shared:SSL:50m;
    ssl_session_timeout          1d;
    ssl_session_tickets          on;

    ssl_trusted_certificate      /etc/nginx/ssl/ca.pem;
    ssl_stapling                 on;
    ssl_stapling_verify          on;

    access_log  /var/log/nginx/access_rsshub.log  main;
    error_log   /var/log/nginx/error_rsshub.log;

    resolver 8.8.8.8 ipv6=off valid=30s;

    location / {
        proxy_pass http://127.0.0.1:1200;
    }
}


server {
    listen 443 ssl;
    listen [::]:443 ssl;

    server_name werss.example.com;

    access_log  /var/log/nginx/access_werss.log  main;
    error_log   /var/log/nginx/error_werss.log;

    ssl_certificate              /etc/nginx/ssl/fullchain.pem;
    ssl_certificate_key          /etc/nginx/ssl/key.pem;

    ssl_prefer_server_ciphers    on;
    ssl_ciphers                  EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;

    ssl_protocols                TLSv1.1 TLSv1.2 TLSv1.3;
    ssl_session_cache            shared:SSL:50m;
    ssl_session_timeout          1d;
    ssl_session_tickets          on;

    ssl_trusted_certificate      /etc/nginx/ssl/ca.pem;
    ssl_stapling                 on;
    ssl_stapling_verify          on;

    location / {
        proxy_pass               http://127.0.0.1:4001;
    }
}
  • apply-cert.sh

写个脚本申请证书,然后更新证书

#!/bin/bash

echo "start install cert ..."

docker exec acme.sh --issue \
  -d "example.com" \
  -d "*.example.com" \
  --dns dns_cf \
  --keylength ec-256 \
  --server letsencrypt \
  --dnssleep 300 \
  --force

if [ $? -ne 0 ]; then
  echo "apply cert failed"
  exit 1
fi

docker exec acme.sh --install-cert \
  -d "example.com" \
  -d "example.com" \
  --dns dns_cf \
  --keylength ec-256 \
  --server letsencrypt \
  --key-file       /ssl/key.pem \
  --fullchain-file /ssl/fullchain.pem \
  --ca-file /ssl/ca.pem \
  --reloadcmd  "echo 'done'"

if [ $? -ne 0 ]; then
  echo "install cert failed"
  exit 1
fi

docker restart  nginx

if [ $? -ne 0 ]; then
  echo "reload nginx failed"
  exit 1
fi

echo "update cert success"