编注:此为 Workflow 系列教程补全计划,本文首发于 越狱指南


《如何上手 Workflow》中用「同时把内容发送到微博和 Twitter」这个例子带大家体验了一下 Workflow 的简单易上手。但是 Workflow 不是一款这么简单的软件,它值得按部就班地学习。在这一部分,我们先看看 Workflow 跟 iOS 内置的那些原生软件结合可以做出什么样的事情。

确定 Wi-Fi 后再打开相应服务

我时不时的会看 Twitch 上一些游戏直播,我只看原画质所以对网速有一定的要求。我平时出门用的是移动 Wi-Fi,回家以后用家里的。移动 Wi-Fi 供不起原画质,但是因为它一直关联着设备,所以导致有时候我从外面回到家想看 Twitch 的时候,打开 Twitch 觉得卡,然后才发现原来手机连的还是移动 Wi-Fi。

所以我利用 Workflow 内置的 Get Network Name 这个动作,做了个 Workflow:

检测现在连接着的网络的名称 → 如果名称包含的是家里 Wi-Fi 的名称 → 通过 URL Schemes 打开 Twitch → 如果匹配的不是家里的 Wi-Fi → 弹出换 Wi-Fi 的提示。

我把这个 Workflow 放到 Launch Center Pro 里,来代替我打开 Twitch 的动作。而且 Launch Center Pro 还可以基于地理位置提供提示,这一点也值得好好利用。

条件匹配——Filter

Workflow 在2月13日发布了它的 1.1 版本,Filter 就是其中最亮眼的更新之一:

Filter 可以精确地分类和定位你的各种资料和信息,Mac 上,从某种程度上来说,有没有 Filter 是判断这个软件在同类软件里的地位的一个标准。在这里,我打算用图片的 Filter 来具体说明它是什么。

比如说我手机容量不够了,一看相册里有 1000 张照片,而且好多都是屏幕截图,那我第一步肯定是把屏幕截图都删了,但是除了一张一张看以外,有什么办法能够精确地一下把所有的截图都给提出来呢?最简单的办法是分辨率。屏幕截图的图片的宽和高肯定和屏幕一致,所以你只要知道其中一项,你就能匹配出截图。而且 Workflow 甚至提供了专门的Is a Screenshot(是屏幕截图)的选项,避免你相册中有那种和屏幕截图分辨率一样的图片。

比如我要筛选出所有 iPhone 5 的屏幕截图,它的 Filter 就是这样的:

首先来看框里的第一条:All of the following are true(符合所有条件),点它你能看到另一项:Any of the following are true(符合任一条件)

这两项是 Filter 的第一前提,你必须先告诉软件你下面列出的条件它需要都匹配还是匹配到任何一项就可以。一般来说默认的是匹配所有条件,但符合任一条件也是很有用的,但这里不展开说了。

然后来看上图里颜色不同的部分。每个颜色不同的部分都是一个菜单,可修改:

Filter 使用的思路就是:一般来说你要先确定一个对象或者类型,再确定一个范围,再确定具体的起始数字。学会使用 Filter 可以让你更清楚你要操作的对象是什么,让你更清楚你要干什么。这种思维方式不光在使用软件和智能设备上有用,在日常生活中也很有用处。

找餐馆然后打电话然并确定路线

有时候决定吃什么是个问题,而且还有个问题是你决定好吃什么了以后那里有可能没空位了。所以不知道吃什么的时候,在自己常吃的类别里选一样(甚至可以或者随机选一样),然后马上给店家打预约电话,同时获取最短路线应该是个很实用的功能。

应该的意思是,根据 Workflow 支持的地图在我国的表现,本功能实际上可能并不那么实用……

这个 Workflow 的起始是选择一项我们常吃的东西,所以我们需要做个列表。上篇文章里我写过了 List 的用法,但这里有更简单的创建 List 的方式,其中用到了 Split Text(分割文本) 这个功能:

当你把列表做出来,就得在里面选一个,前面说可以随机,是你实在没主意的时候,可以用 Get Item from List(从列表中获取)这个动作 ,它内部有个动作是 Random Item(随机一项)。而如果你有主意的话,可以在列表下面接 Choose from List(从列表中选择) 这个动作。

选出一个类别以后,就可以利用 Workflow 里 Search Local Businesses(搜索本地商户) 这个动作,来搜索具体饭店了。同一类别的店铺未必只有一个,所以你还要再接一个Choose from List(从列表中选择)来选一家你想去的店铺。

在地图信息里,一般都会有店铺的电话,所以你可以用 Get Phone Numbers from Input(从 Input 中获取电话号码) 这个动作从店铺信息中获取电话。下面再接上 Call 这个动作,就能在获取电话号码后直接打电话预约了。

至于怎么同时搜索并确定路线,你可以自己想想。

快速得到具体某天的空闲时间

动作略复杂,可以先在自己设备里下载了这个动作后结合文章理解。

这是 Workflow 的 Gallery 里自带的一个动作,叫做 Share Availability。它是和 iOS 的日历软件相结合的一个非常有用的动作,当别人问你具体某天什么时候有空的时候,有时候你也不清楚,你需要查看一下日程,最后自己总结一下什么时候有闲,给别人答复。这个工作,Workflow 完全可以帮你做到,不过前提是,你会把你每天的事务安排记录在 iOS 设备上的日历里。

除了实用,这个 Workflow 里还够复杂,里面涉及了不少具体的动作的用法,研究透它以后这些动作你就都能搞懂了。

首先是 Get Upcoming Events(获取接下来的日历事件)

这是这个 Workflow 的第一个动作,默认选择了所有的日历(很多人不会只用一个日历,因为需要给工作、家庭、个人事务等建立不同的日历,便于区分);下一行的 Get 20 Events 是选取20个事件,你可以根据自己的繁忙情况选择事件数;下一行的 Day 后面默认的是 Specified Day,你可以设为今天或者明天,当你选择 Specified Day 以后,会出现新的选项,内容是 Ask When Run,这是让你临时选择具体的一天。

下面的动作大部分都被括在 Repeat with EachEnd Repeat(结束重复) 里,这个 Repeat with Each 的隐含要求是上一个动作的结果应该是个列表,Repeat with Each 做的就是对上个动作产生的列表中的每一项都进行 Repeat with EachEnd Repeat 之间的所有操作。

然后来看在这个 Workflow 中, Repeat with EachEnd Repeat 之间有什么:

第一,设定变量 Event:这是把上个动作产生的列表中的每一项都设为一个变量,在这个例子里是每一个具体的日历事件。

第二,用 Get Detail of Calendar Events 获取起始时间 Start Date——用 Set Variable 给起始时间设定变量——并用 Format Date将其设定为最简短的时间格式。

第三,用 Get Variable 获取之前设定的日历事件变量 Event。因为我们除了事件的起始时间,还要获得事件的终结时间。但刚才在获得起始时间的时候,我们用了一次 Event 这个事件了,如果现在直接在下面再用 Get Detail of Calendar Events 来获取终结事件,肯定会报错。这是软件不如人聪明的地方,当我们要对一个信息使用两次,我们就得调用它两次,所以要使用到 Get Variable。它是个做复杂 Workflow 非常常用的动作。

第四,和第二步基本一致,只是事件的起始时间要改为事件的终结事件。

第五,因为你这是在回答你具体某天什么时候有空,所以你回复对方的时候,也要先跟对方说那一天的日期,然后再说什么时候有空。所以你得先获取当天的日期,这第五部分就是再用一次 Get Variable 获取事件(也就是获取日期),然后 设为变量。

最后,生成一个文本框:

这个文本框里是每一个事件的起始时间和终结时间,中间有一个连接符-

上面就是 Repeat 的整个过程,它对每一个事件都生成了起始时间和终结时间,然后填入最后的文本框里。但是这里的文本框还不能直接用,因为它们是分开的,每个事件都有自己的文本框。如果你在下面用 Quick Look 这个动作来直接看结果,你会看到很多个分散的结果,我们必须把它们汇聚成一个结果。所以需要使用到 Combine Text,把它们聚合在一起。

最后再用一个文本框,生成最终的文本。

在这个文本框里, Date 是之前在 Repeat 的过程里获得过的日期,input 是继承的上个动作的结果,也就是你用 Combine Text 整合的当天所有事件的起始和终结时间。而且你要看这个文本框里,有变量,有 Input ,说明文本框里不光可以输入东西,还可以往里放变量,或者直接用 Input 来使用上个动作的结果。

最后这个文本内容你可以通过分享的方式给任何一个人。

具体 Workflow 你可以在 Gallary 的 Calander 分类中下载,你可以修改最后的文本框,让它变得更加本地化。而且你还可以获取事件名,从而你可以告诉对方,你在某天的几点到几点是因为什么没空。这些也当作业来练手吧。

图片找路

这部分是使用 Workflow 获取照片的拍摄地,然后可以在地图上显示从本地到照片上的地址的具体路径、或者复制地址等。这个功能的重点在于它背后的 Content Graph

获取图片的地理位置信息有很多用处,比如,我和朋友约了一个我没去过的地方见面,他到了我没到,我问他具体怎么走,他给我拍了张标志性建筑物的照片,我从这张照片获取地址信息,然后还能在地图上打开路径,最后到了地方还能对照这张照片看看我找的对不对(比 Google 街景还要即时哟)。而且这个功能还有个家庭伦理的用法,就是你问另一半在哪,让他/她拍个照片给你,你可以获取这个照片的拍摄时间,来知道他/他是不是拿以前的照片糊弄你,然后你可以获得地址,然后你懂得。

具体的做法很简单,就是在 Workflow 里用 Select Photos 这个动作获取一张照片,然后如果你想获取路径,可以用 Show Directions 直接获取路径。如果你想复制地址,你可以先用 Get Addresses from Input 获得地址,然后再用 Copy to Clipboard 把地址复制下来。而如果你想又复制地址,又在地图里显示路径,那么你可以复习下这篇文章前面写到的内容,想想当你要对同一个信息多次的时候,该怎么办?(提示,Get Variables

再说回这个动作,其实你应该感到纳闷,「为什么可以在照片里获取地址信息呢?」这就是 Workflow 的核心功能——’Content Graph’。Workflow 里对这个 View Content Graph 这动作的描述是——the technology that powers Workflow。

在 Workflow 里,每一个动作都会产生一个或多个结果,而它能够产生什么结果,你可以用 View Content Graph 这动作来看看它能产生什么结果。

我们把 View Content Graph 放在 Select Photos 下面,选一张你手机拍的照片,正常情况下就会出现图中的结果:

最中央的就是照片文件本身,它发散出来 TextDateLocationImage四个节点,我们获取的地址信息就是在这个 Location 里,而我们之所以能够直接在自带的地图软件里显示这个地址是因为 Location 后面有 Maps link

所以当你不知道你对一个动作的结果能做什么处理的时候,可以考虑先用 View Content Graph 看看。

小结

这篇的主题是探讨仅用 Workflow 在 iOS 设备上能干什么,所以用的全部是 Workflow 自身的动作和 iOS 内置的软件。关于 URL Schemes 还有如何利用网页服务跟 API 来制作更「神奇」的 Workflow 的办法会在以后的教程中写到。

复习

看完本文你应该懂得的关于 Workflow 比较重要的用法有:

      • Filter
      • Split Text
      • Repeat
      • Get Variable
      • 在 Text 里将变量和字符结合
      • Combine Text
      • View Content Graph

Workflow 系列文章