Workflow 用了一段时间以后会积攒一些自己常用的动作,这些动作用顺手了就会想在不同的设备上做到。虽然很难想象,但 Workflow 至今也没有推出一个备份/恢复/同步动作的方案,不过以这个应用的能力,做到这点也并非难事。

如果对 Workflow 比较熟悉,可以直接看「步骤说明」,如果想了解整个制作的思路可以看「思路说明」

步骤说明

思路说明

第一步:找到动作的下载链接

在将 Workflow 分享到他人和其它设备的方法里,我最常用的是通过链接下载这种老式的方法,在下载的时候我发现,其实 Workflow 的下载页面里的那个 GET WOKRFLOW 的按钮是另一个链接,这个链接才是存放你要下载的动作的地方,我叫它下载链接,而通过 Workflow 的设置分享出来的,我叫它网页链接

通过下载链接,你就不需要每次都打开一个网页才能下载相应的动作,你可以在 Workflow 里试试:新建一个动作,在 Text 栏里填上下载链接,再在下面放上 Open URLs 这个动作,然后运行这个动作,就能在不打开 Safari 的情况下直接将一个动作下载到你的设备上。

但是 Workflow 导入动作有个默认设定,就是导入后会自动打开(但不运行)这个动作。如果这个默认设定不改变,就没办法保持同一个 Workflow 的运行,也就是说每次只能导入一个动作,导入一个动作后就被迫中断原本正在运行的导入动作,打开新的动作。这样那样也不能提高多少效率。

解决这个办法异常地容易,只要在导入的 URL 后面加上一句: &silent=true 就可以做到导入动作以后不打开。

经过以上步骤,我们已经可以做到直接导入一个动作而不打开它了,下一步我们只要能重复这个步骤,即导入多个动作而不打开它们,就成功了。

第二步:认识下载链接的格式

我们在上面图片中看到的直接下载动作的链接,是这样的:

workflow://import-workflow/?url=https://workflow-gallery.s3.amazonaws.com/workflow/6894c6e8fa164088b4ecf6c5f027efc2.wflow&name=Example

在这一长串链接里,只需要注意最后一个 / 后面的部分:

  • .wflow&name 之前,是每个 Workflow 动作的链接的路径的最后一部分,这一串字符是独一无二的,每个 Workflow 都不同。
  • .wflow&name 之后,是每个 Workflow 动作的名称。

所以我们现在要做的事情是两件:

  1. 获取 Workflow 动作的链接的最后一部分字符。
  2. 获取这个动作的名称。

而这两件事对于 Workflow 来说都很容易。

第三步:获取动作名称

通过 Workflow 动作的链接打开的网页的名称,就是那个 Workflow 的名称,所以只要获取网页名称即可。

获取网页名称的办法很简单:先下载网页内容,然后获取其名称。

这些名称有的含有空格等字符,需要编码,否则不能作为链接的一部分,所以要在后面加上 URL Encode 这一步对名称进行编码。

第四步:获取动作链接的关键部分

网址的不同位置都是用 / 来分割的,我在《Workflow 本身能做什么?》这篇文章里写过 Split Text 的用法,这里正好可以用到。

通过 Split Text 可以把一个 Workflow 的网址分为几段,比如一个 Workflow 的网址是:

https://workflow.is/workflows/6894c6e8fa164088b4ecf6c5f027efc2

那么可以将其分割成:

  • https:
  • 空白
  • workflow.is
  • workflows
  • 6894c6e8fa164088b4ecf6c5f027efc2

而我们要的是最后一部分,所以可以直接用 Get Item from List 这个功能,获取最后一项也就是 Last Item

第五步:获取网页链接

我们现在可以从 Workflow 动作的网页链接里获取每个动作的名称和关键字符来组成下载链接了。那么问题是,网页链接怎么获取?

在这里还是没什么聪明办法,每个动作的网页链接还是要大家手动获取,但是获取以后可以存放到一些可以在各个设备上同步的应用里,可以一劳永逸。

我的做法是存放到 Drafts 里,因为 Workflow 可以通过 Drafts 里笔记的 UUID1 获取笔记内容,不需要通过网络。

获取 Drafts 任一笔记的 UUID 可以用这个 Drafts 的动作

然后在笔记中,你可以按照

动作名称:动作网页链接

这样的格式在 Drafts 里规矩地排放好每一个动作,同时,你也可以把你的动作分组放到不同的笔记里。比如常用的和测试用的,iPad 用的和 iPhone 用的等。设备的使用情境不同,Workflow 的使用应该也是不一样的。

然后在 Get Contents of Draft 这一步的下面,接上 Get URLs from Input 就能直接获取所有的链接而不获取名称了。

第六步:循环下载动作

目前为止,我们知道了:

  1. 无需打开网页就能在 Workflow 里下载单个动作的链接。
  2. 我们可以获得下载链接所需要的关键字符和名称。
  3. 我们可以获得网页链接从而得到下载链接。

最后一步要做的是重复这些步骤,下载所有备份的 Workflow。在 Workflow 里,通过 Repeat 就能做到这一点。

因为我们要重复的是从获取动作链接到打开下载链接的这部分,所以从 Drafts 获取网页链接的部分以外全部需要框在 RepeatEnd Repeat 之间。

结语

Workflow 是肯定会加入备份/恢复/同步动作这些功能的,只是时间问题。但是不是说这些尝试就是鸡肋呢?这要看你对自己的要求。看你是愿意动动脑子完成一件目前你需要但是官方没有给出的功能呢,还是愿意听天由命求开发者看对方心情赏给你。

除此之外,通过对 Workflow 的探索是对各功能认识加深的过程,光指望下载别人做好的动作不会有太大长进。这也是我几乎不会在 Workflow 文章里直接分享下载链接的原因。

除了情怀,实用性上通过这种方法备份也是有好处的。这种方法可以把 Workflow 的动作分开保存,可以针对不同的设备和目的保存到不同的 Drafts 笔记中,恢复的时候可以有选择性地恢复。同时,这种方法经过简单修改,也可以做到直接从文章和网页中下载别人分享的 Workflow,具体怎么做还请你动脑想想。


  1. UUID 是通用唯一识别码的英文 Universally Unique Identifier 的缩写,在这里你可以理解为,UUID 是每一条笔记的唯一标识。 ↩︎

阅读少数派更多关于 Workflow 的文章 >