配合Github Actions 做一个自动推送的 Rss 订阅机器人
前言
一直都有订阅 Rss 的习惯,前段时间配合钉钉的自定义机器人,建了一个在钉钉定时推送消息的群,当时是服务是跑在自己的小水管上的,并且是在自己博客的基础上的,依赖了 Flask。后续想着开源,考虑到单独一个 Rss 推送机器人依赖一个 Web 框架就显得比较笨重了,就着手将这部分服务独立出来。
钉钉 RSS 推送机器人
钉钉 RSS 推送机器人,主要内容分为两部分,第一部分是钉钉机器人;第二部分是订阅推送。
钉钉机器人
因为是自定义内容,钉钉现有的机器人不支持,所以我们需要借助钉钉的自定义机器人。
步骤一
【电脑钉钉 】-【群聊】-【群设置】-【智能群助手】-【添加更多】-【添加机器人】-【自定义】-【添加】,编辑机器人名称和选择添加的群组。完成必要的安全设置(至少选择一种),勾选 我已阅读并同意《自定义机器人服务及免责条款》,点击“完成”即可。
步骤二
复制出机器人的Webhook地址(格式如下截图),可用于向这个群发送消息。并点击【完成】,自定义机器人就添加成功了。
为了安全考虑,这里我们在创建机器人的时候,勾选“加签”。这样子会获得 webhook 和 secret 两个参数
1 | webhook = 'https://oapi.dingtalk.com/robot/send?access_token=这里填写自己钉钉群自定义机器人的token' |
消息推送
完成机器人的创建,就需要完成通过 api 将消息推送到群里,使用 DingtalkChatbot
安装
1 | pip install DingtalkChatbot |
例子
1 | from dingtalkchatbot.chatbot import DingtalkChatbot |
RSS 解析
rss 解析,这里使用 feedparser 进行解析。
安装
1 | pip install DingtalkChatbot |
例子
1 | import feedparser |
具体用法可以参考官方文档:https://pythonhosted.org/feedparser/
RSS 钉钉机器人
准备工作完成之后,就是将机器人和 Rss 解析内容整合到一起,为了避免重复推送内容,很显然需要借助数据库,考虑简便性,采用 python 原生支持的 sqlite 数据库免安装;为了操作数据库方便,这里就使用轻量级的 ORM – peewee。
模型定义
首先完成数据模型的定义,两个模型,一个是 RSS 源模型,一个是 History 历史记录模型。
1 | # models.py |
模型定义完成,接下来就是代码的整合了。
整合代码
1 | # -*- encoding: utf-8 -*- |
到这里,算是完成了 Rss 钉钉机器人的大部分功能了,还差唯一的定时推送,原本考虑是用 Python 的常见的定时任务库去完成的,但是考虑的后续部署,还需要一台服务器,奈何自己的阿里云服务器最低配不一定能支持住了,就想着结合 Github Actions 把服务器也省了。
Github Actions
Github Actions
是Github
推出的一个新的功能,可以为我们的项目自动化地构建工作流,例如代码检查,自动化打包,测试,发布版本等等。入口在项目pull request
的旁边。
这里就不再详细介绍 Github Actions 了,贴一下我写的 workflows 文件
workflows
1 | # 钉钉 rss 推送机器人 |
其中三个环境变量需要我们自行配置,在项目的 Settings 中的 Secrets 中设置
其中 TOKEN 是 Person access tokens,需要在个人设置中申请,申请时需要勾选 admin:repo_hook,repo,workflow 三个选项。
Person access tokens 主要是用来将修改推送到仓库的,借助 Github Actions 运行完成之后会把代码删除,会导致产生的修改丢失,这样子的话历史记录就无法保存,因此我们需要在每次推送完成之后,将对数据库的修改推送到仓库中。
总结
到此所有配置完成,Github Actions 会定时执行 rss 推送任务。
有兴趣的可以用钉钉搜索群号:35731271,或者扫描二维码