我想做一个 rss 订阅机器人,通过一个定时任务定期将我关注的内容推送到我的 Tailchat
群组。但是我又不想自己去单独搭建一个服务器来部署,因为功能很小、单独部署的成本会被放大,也不容易被其他人很简单的使用。而且长期维护的成本也是比较高的,希望能处于无人值守的运行模式
那么整理一下需求:
可以说是非常理想了,那么有这样成熟的解决方案么?答案是有的。那就是github action
。
Github action 可以满足我的所有需求,只需要一个简单的定时任务即可实现我的三个需求。唯一的难点在于数据库,也就是持久化存储。
众所周知,rss 机器人的原理就是定时请求 rss 订阅地址,将返回的内容结构化以后与之前存储的数据进行比较,将更新的信息提取出来发送到外部服务。那么为了能够比较差异,一个持久化的数据库是必不可少的。那么github action
可以实现数据库么?答案是可以的,我只需要将数据存储在代码仓库中,每次执行 action 之前将数据取出,然后在 action 执行完毕之后将数据存回仓库,那么一个用于低频读写的文件数据库就实现了。
理论存在,实践开始!
在 github 上搜索了一圈没有发现有现成的轮子,因此就开始自己造一个。
核心流程如下:
lowdb
,当然也可以使用 sqlite ,看个人喜好那么通过上面一系列步骤,我们就成功把 github 当做我们自己的 action 应用的数据库了。
一个简单的示例如下:
name: Tests
on:
workflow_dispatch:
jobs:
test:
timeout-minutes: 60
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Checkout date
uses: moonrailgun/[email protected]
with:
path: date
- name: Read and show
run: cat date
- name: update date
run: echo $(date) > date
这个 action 表示,每执行一次,我们的actions/filedb
中的 date 文件就会更新成最新的.当然也可以加上一些定时任务触发器让他自动执行。当然建议不要滥用哦,可以使用低频一些
在 Github Marketplace 查看: https://github.com/marketplace/actions/branch-filestorage-action
开源地址: moonrailgun/branch-filestorage-action
RSSBot 地址: msgbyte/tailchat-rss-bot
1
wdssmq 2022-05-26 10:53:49 +08:00
贴下我的,运行次数已经破千了 (╯▽╰)
wdssmq/proxy_rsshub: 使用 GitHub Actions 反代 RSSHub + 多实例轮询 https://github.com/wdssmq/proxy_rsshub |
2
zthxxx 2022-05-26 13:56:50 +08:00 4
|
3
ihciah 2022-05-26 14:27:54 +08:00
可以使用 cf worker kv 做存储。
https://github.com/ihciah/cloudflare-kv-proxy 我这有个 rust 版的 sdk 。 |
4
moonrailgun OP @wdssmq 不好意思没有看懂目的是什么。
看了一下您的项目,就是把 rsshub 的输出在 github 上存了一遍?那为什么不直接访问 rsshub 呢?不好意思没理解 另外就是这种操作其实会污染 commit _(:з」∠)_ |
5
moonrailgun OP @zthxxx 感谢提醒,不过 rss 不能算是爬虫的一种。至少不是违法的那一种。硬是要说的话如果是通过 rsshub 来产生 rss 订阅的话 rsshub 是一个爬虫的角色。
|
6
moonrailgun OP @ihciah 感谢告知。我也用 cf 不过没用用的很深入,使用 action 是为了保持更加的纯净减少更多的依赖。
不过还是感谢你的思路,顺便请教一下 cf 的 worker 在国内的表现怎么样?我用 cf 的 dns 服务都不敢开盾_(:з」∠)_ |
7
ihciah 2022-05-26 15:49:28 +08:00
@moonrailgun worker 自带域名被墙了,但是绑定的域名还是可以用的。可用性就是 cf 在国内的可用性,半死不活勉强能用。
ps:你这个确实违反 github TOS 了,可以整个迁移到 cf worker 或其他 serverless 服务上(套路云和良心云等都有的)。 |
8
moonrailgun OP @ihciah 感谢回复与提醒,方便告知违反 TOS 那一条么?因为类似的操作(不论拿 action 的定时任务做别的操作还是通过 action 去提交一些东西)我都看见过不少,其中也有不少上 k 甚至上 10k 的项目。我实在不确定哪一条条款违背了
感谢 |
9
ihciah 2022-05-26 18:23:41 +08:00
|
10
cai314494687 2022-05-27 10:07:38 +08:00
小心账号被封
|
11
moonrailgun OP @ihciah
感谢提醒与友善的回复。不过我仔细看了一下你指出的两条跟我造的 github action 轮子(branch-filestorage-action)好像没有任何关系。。。 对于我的使用实例(rssbot) 第二条,我不认为 rss 属于 `unauthorized` 的内容。rss 的内容本身就是网站允许的一种访问方式。如果网站不允许通过 rss 访问可以不添加 rss 协议。。。这个我认为其"允许访问"程度比搜索引擎还要高 —— 搜索引擎是你申明不允许那么就不抓取,rss 是你不主动创造 rss 的 xml 信息就无法使用。。。 第四条的话,在我的实例中,我创建了一个 rss 机器人的项目,然后使用 action 收集 rss 的数据,怎么都不能说这两者是无关的吧? 类似的项目有收集程序员编码时间,生成 gist 的 waka-box(1.1k star,1.5k fork) 定时抓取 ipaddress ,更新 hosts 的 github520(11.5k star, 1.3k fork) 以及更多程序员都会使用的更新到自己项目的 repo 然后动态变更个人首页展示内容(不好意思这种我没用过我没法举出例子) 虽然不是非常认可你的说法,但是还是非常感谢您的回复。 :) |
12
mayli 2022-05-29 06:00:32 +08:00 via Android
不推荐用这个方式
你这个 Branch 的内容会一直增长 直到 Checkout 要花好久 |
14
moonrailgun OP @mayli 如果不期望增量的话可以强制只提交一个 commit 。。。。策略都是灵活的
|