我想做一个 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/branch-filestorage-action@v1.2.2
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
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.