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 的频道或群组 —— 由运行参数决定。这里有作者当时的想法。
我使用一天之后发现几个不足:
- 抓取站点的 RSS 是同步执行,当 rss.json 中的链接越多,执行越耗时。我当时仅添加十来个链接,但 Action 的执行时间已经达到 1~2 分钟。
- Rss bot 配置 4 小时执行一次,但 Github Action 并不保证 4 小时后一定准点执行采集 —— 目前以我观测,最长会有一个小时的延迟。程序只会保留 4 小时内发表的文章,也就是说,可能会漏掉一部分新发文章。
- 基于 publish_time 做过滤,但有的站点 RSS 协议里只有 update_time 字段……
New rss_everyday
为了更愉快地享受 rss_everyday,我做了一些改造。
- 支持并发抓取站点。通过命令行参数 GoroutineNum 指定并发数。默认 10。
- 支持抓取 N 小时内的文章。通过命令行参数 StartBy 指定,单位小时。默认 6。
- 支持字段降级:优先使用 publish_time,如果没有,再尝试 update_time。
- 对采集过的文章过滤,避免重复通知。默认去重文件路径 digest_file.json。去重标识是文章标题+文章内容算 md5 。
- 增加心跳包,防止程序挂掉而不自知。默认文案:only beat package, no new msg。
为避免漏掉新发表文章,需要保证定时执行时间 < StartBy 指定时间。可以重复抓,反正也会被过滤掉。我当前 Action 配置 2 小时执行一次,每次抓 6 个小时内的文章。
最终运行效果如下:
对 RSS 订阅有轻量级需求的朋友来说应该够用,毕竟我也是其中之一。
How to use?
只要 fork 我的仓库,并按照 dianbanjiu 的文章配置 bot token 和 telegram 即可。但有三点需要注意:
- 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 - telegram 的 channel 链接格式应该改了。原文提供的是:https://web.telegram.org/#/im?p=sxxx_ppp,我配置的时候是:https://web.telegram.org/k/#{channel_id}。不管如何,都是一个负数。我当时以为应该是正数,结果配错没生效。
- telegram bot 一次发送超过 20 条消息会被限频。
最后
进击的 RSS 并没有什么难度。可是我用 Github Action 也有两年多了,为什么就没想到用它来解决自己 RSS 订阅的需求呢?惭愧……
好东西,老Repo看着没更新怕用不了了,直接上你的版本,感谢:)
url=https://feed.hamibot.com/api/feeds/6198e6bdb9a7e049c3939afd, http error: 403 Forbidden
这样的链接好像是不支持的,请问博主有没有解决方案?
你是在哪儿看到报403的,我本地试了一下,可以正常访问,不过这个链接本身就没有文章,所以返回的是空列表。这个链接就可以正常访问:https://feed.hamibot.com/api/feeds/629242d8a4ca6e10e39ed5f5