基于 Github Action 实现 RSS 订阅

工具 2023-04-02 2663 字 2750 浏览 点赞

repo: https://github.com/youguanxinqing/rss_everyday

起步

之前在 《搭建自己的RSS服务》 一文中详细描述了搭建 Tiny-Tiny-RRS 的过程。不过我还是觉得起点太高。例如我,对 RSS 有一定的需求,但不至于太高,而因此租一台国外的服务器(有一些博客在国内被 block 掉了),不管算盘怎么敲结果都是不划算。

上周在 Github 逛到 ALL-about-RSS 项目,里面收集了大量的 RSS 解决方案,有自建,有依赖第三方软件或浏览器插件。其中,最令我发出“哇塞”的 idea 是 dianbanjiu 提供的 rss_everyday

Old rss_everyday

项目很简单,就是基于 Github Action 执行 Rss bot,最后将文章发送到 telegram 的频道或群组 —— 由运行参数决定。这里有作者当时的想法

image-20230401232746098

我使用一天之后发现几个不足:

  1. 抓取站点的 RSS 是同步执行,当 rss.json 中的链接越多,执行越耗时。我当时仅添加十来个链接,但 Action 的执行时间已经达到 1~2 分钟。
  2. Rss bot 配置 4 小时执行一次,但 Github Action 并不保证 4 小时后一定准点执行采集 —— 目前以我观测,最长会有一个小时的延迟。程序只会保留 4 小时内发表的文章,也就是说,可能会漏掉一部分新发文章。
  3. 基于 publish_time 做过滤,但有的站点 RSS 协议里只有 update_time 字段……

New rss_everyday

为了更愉快地享受 rss_everyday,我做了一些改造。

image-20230401234256216

  1. 支持并发抓取站点。通过命令行参数 GoroutineNum 指定并发数。默认 10。
  2. 支持抓取 N 小时内的文章。通过命令行参数 StartBy 指定,单位小时。默认 6。
  3. 支持字段降级:优先使用 publish_time,如果没有,再尝试 update_time。
  4. 对采集过的文章过滤,避免重复通知。默认去重文件路径 digest_file.json。去重标识是文章标题+文章内容算 md5 。
  5. 增加心跳包,防止程序挂掉而不自知。默认文案:only beat package, no new msg。

为避免漏掉新发表文章,需要保证定时执行时间 < StartBy 指定时间。可以重复抓,反正也会被过滤掉。我当前 Action 配置 2 小时执行一次,每次抓 6 个小时内的文章。

最终运行效果如下:

image-20230401235636020

对 RSS 订阅有轻量级需求的朋友来说应该够用,毕竟我也是其中之一。

How to use?

只要 fork 我的仓库,并按照 dianbanjiu 的文章配置 bot token 和 telegram 即可。但有三点需要注意:

  1. digest_file.json 需要持久化,所以 bot token 需要写权限。也许你会遇到这样的报错信息: Permission to youguanxinqing/rss_everyday.git denied to github-actions[bot].。可参看解决方案:https://github.com/ad-m/github-push-action/issues/96
  2. telegram 的 channel 链接格式应该改了。原文提供的是:https://web.telegram.org/#/im?p=sxxx_ppp,我配置的时候是:https://web.telegram.org/k/#{channel_id}。不管如何,都是一个负数。我当时以为应该是正数,结果配错没生效。
  3. telegram bot 一次发送超过 20 条消息会被限频。

最后

进击的 RSS 并没有什么难度。可是我用 Github Action 也有两年多了,为什么就没想到用它来解决自己 RSS 订阅的需求呢?惭愧……

感谢



本文由 Guan 创作,采用 知识共享署名 3.0,可自由转载、引用,但需署名作者且注明文章出处。

3 条评论

  1. Veron
    Veron

    好东西,老Repo看着没更新怕用不了了,直接上你的版本,感谢:)

  2. Veron
    Veron

    url=https://feed.hamibot.com/api/feeds/6198e6bdb9a7e049c3939afd, http error: 403 Forbidden

    这样的链接好像是不支持的,请问博主有没有解决方案?

    1. Guan
      Guan

      你是在哪儿看到报403的,我本地试了一下,可以正常访问,不过这个链接本身就没有文章,所以返回的是空列表。这个链接就可以正常访问:https://feed.hamibot.com/api/feeds/629242d8a4ca6e10e39ed5f5

添加新评论