MENU

Actionsflow:开源又一次胜利

October 10, 2020 • 开发

随着 IFTTT 涨价至 $9.99,而免费套餐仅有三个应用(applet)额度,很多人开始寻找 IFTTT 的免费替代方案。

先前我通过 IFTTT 和 RSS 将自己的文章、推文等各平台动态聚合在了 Telegram 频道中,随便一用就超出了额度。虽然在 10 月 7 日前可以用最低价 $1.99 购买 Pro,但 IFTTT 一天一封提醒订阅 Pro 计划的邮件还是将我推向了替品的怀抱。

当然这也是因为我并不是 IFTTT 的重度用户,以及续费仍需以 $9.99 这一较为高额价格支付的缘故(说到底还是穷)

IFTTT-Pro

在它涨价前前我也有尝试过其他类似产品,IFTTT 不支持一个事件多个触发。而其他产品也都不尽如人意,就选择继续使用 IFTTT 直到现在。

优缺点ActionsflowIFTTTMicrosoft FlowZapierHuginnn8n
是否开源开源闭源闭源闭源开源开源
搭建难度无需无需无需无需困难快速
付费价格0$9.99/m (免费 3 个应用)$15/m$19.99/m (免费 5 个应用)00
对接平台多,但其中微软产品占主要较多
操作难度傻瓜化新手操作繁琐新手操作有所难度新手操作有所难度新手操作繁琐

我再次寻找并重新体验类似产品时,我列出了这个表格,这应该能够为大家删去很多选项。也不难看出,对我这样一个追求免费、高效并能接受一定学习成本的用户而言,Actionsflow 无疑是最好的选择。

什么是 Actionsflow

The free Zapier/IFTTT alternative for developers to automate your workflows based on Github actions - Actionsflow GitHub repo.

与 IFTTT 的自动化思路相似,ActionsFlow 的工作流(workflow)也是由触发器(trigger)和动作(action)两部分构成,并依托 GitHub Actions 所提供的免费服务。不带可视化界面给非开发或从未使用过 GitHub Actions 的用户造成了一定的学习成本,但 Actions 采用的是相较于 JSON、XML 结构更为清晰的 YAML1 格式,还是比较方便理解的。

推送博客文章到电报频道

通过我实现自身需求的流程,你可以搞清怎么使用它,它的执行流程又是怎样的。

所需内容

目标:当博客有新文章时将文章发生到 Telegram 频道中。

三段式流程输入、运行和产出,现在还缺少运行,在使用 IFTTT 时,我们是通过 Telegram Bot 在频道发送文章的。在 ActionsFlow 中也不例外,那么运行就是 Telegram Bot。我们得到了如下的流程图,我们需要准备说明也很明确了。

流程图

Telegram 频道

你需要一个频道并获取它的 id,可以借助第三方客户端或 @getIDs_bot 获取。

Telegram Bot

你可以通过 @BotFather 创建一个 Bot。示范如下,下图中框出的部分为 Bot Token,它将在后文的配置中用到,它也是我们操控机器人的准入证。

BotFather

配置 Actionsflow

创建仓库

根据 Actionsflow 所提供的模板创建一个仓库,打开仓库将会看到如下的文件结构。

├── .github
│   └── workflows
│       └── actionsflow-reset-cache.yml
│       └── actionsflow-update-dependencies.yml
│       └── actionsflow-upgrade-actionsflow.yml
│       └── actionsflow.yml
└── workflows
│   └── rss.yml
├── .gitignore
├── LICENSE
├── README.md
├── package-lock.json
└── package.json

新建工作流

workflow 文件夹下创建 Blog2Telegram.yml 文件。

编写工作流

打开 Blog2Telegram.yml 文件,输入以下内容。

on:
  rss:
    url: https://scvoet.me/feed
jobs:
  telegram:
    name: Send a telegram message
    runs-on: ubuntu-latest
    steps:
      - name: Send a telegram message
        uses: appleboy/[email protected]
        with:
          to: ${{ secrets.TELEGRAM_TO }}
          token: ${{ secrets.TELEGRAM_TOKEN }}
          message:  |
            《${{on.rss.outputs.title}}》
            ${{on.rss.outputs.contentSnippet}}
      
            ${{on.rss.outputs.link}}
  • ${{on.rss.outputs.title}}:文章标题
  • ${{on.rss.outputs.link}}:文章链接
  • ${{on.rss.outputs.contentSnippet}}:文字描述

你可以查看通过 Actionsflow 的文档查阅更详细的字段信息。

设置 Secret

打开 https://github.com/username/repo/settings/secrets。在准备环节中获取到的频道 ID 和 Bot Token 将在此处用到。在 Name 中分别填入 TELEGRAM_TOTELEGRAM_TOKEN,在 Value 中则输入与之对应的值。

  • TELEGRAM_TO:频道 ID
  • TELEGRAM_TOKEN:Bot Token

GitHub Secret

至此你的工作流完成了,现在你可以通过 GitHub Actions 推送文章到 Telegram 频道中了。你可以前往我的频道 @scvoet_channel 查看本篇文章的推送。

做些别的

在 Actions 中,所有的 trigger 都是由你自行托管的。这在可控化的同时造成了麻烦。你需要申请许多平台的 API。而许多平台的申请都是需要审核的,这无疑造成了很多麻烦。

我通过 RSSHub + Actionsflow 曲线救国的方式解决了这个问题,我们借助 RSSHub 官方提供的实例来获取 RSS。再通过 Actionsflow 进行订阅,这就省去了我们申请 API 的步骤。这是因为 RSSHub 官方实例已经获得相关平台的接口并部署。

和 ActionsFlow 搭配使用的 RSSHub 自然也是可控化的,你可以选择自行部署,但部署 RSSHub 时部分平台信息仍需申请到接口后才能获取,所以使用第三方已实现相关平台接口接入的实例可能才是我们最好的选择。

RSSHub 官方所提供的服务被墙了,GitHubActions 可以无视这点。但在你阅读文档时,你仍需科学上网。

现在我使用的软件都在由开源软件替代,可定制化、去中心化,开源的魅力莫过于此。


  1. Yet Another Markup Language
Last Modified: May 24, 2021
Leave a Comment

5 Comments
  1. 这个方案对RSS的抓取是实时的吗,不是的话,多久抓取一次呢?

    1. Scvoet Scvoet

      @三棵树人五分钟一次

  2. Jan Jan

    有人做了Actionsflow的rsshub 触发器,这样相当于直接把rsshub部署到github actions,更方便了,不用关心官方的rsshub挂的问题。

    https://github.com/theowenyoung/actionsflow-trigger-rsshub

    1. Scvoet Scvoet

      @Jan好!

  3. 开源大势所趋