手把手教你制作一个「有爱」的 workflow 动作

如果你是以为「异地恋」患者,每天问候一下你的远程伴侣就变成了一件例行公事。比如说我(匿名作者),每天早上喜欢习惯性发一条短信给她。可能是一条很无聊的短信,提醒一下今天的天气和空气情况,送去一份小小的「温暖」。

当然,现在的 app 做的都很棒,你往往只需要通过自带的分享插件就可以将这些信息转发出去。但是,自己动手 DIY 的感觉还是很棒的嘛,所有我决定做一个 workflow,每天早上只需要点一下就可以搞定这件事情。

初步构思

想做一个一键发送问候短信的 workflow,首先得有两个模块,那就是「文本」和「短信发送」。其实,我也从来没有完整地将 workflow 里的每一个动作都浏览一遍。但通过猜想,「文本」动作可能包含 text 关键词,搜索之后果然有。同理搜索 message,也就找到了短信发送的动作。

找到这两个动作之后,首先在文本框填入你想发送的内容。其中,有些内容是固定不变的,有些是可变的。比如我这篇文章中要发送的天气和空气信息,每天都不一样。固定内容可以先直接输入,而变化的内容需要用 workflow 的 Variables 变量来控制。

从本例的实际情况来看,由于我习惯早上发短信,所以直接填入早上好。当然,你也可以通过 workflow 来实现根据当前时间自动填入「早上好」、「中午好」、「晚上好」等内容。我相信看完本文之后,自己就可以实现了。本文的三个变量 Nickname 称谓,比如:今天叫「小可爱」,明天得换一个,每天都一样会被发现的。weather 是天气信息,air 是空气信息。这些都是 workflow 里的Variables 变量。

获取天气信息

接下来是先获取天气信息,当然获取这些信息的操作是要放在上面动作之前的。天气信息从哪里获取呢?最好,最准确的方式是通过一些天气 API。听到 API 就头疼,不用担心,很简单。常见的天气应用都是通过购买 API 来保证服务的稳定性,由于个人的请求量不大,所以上网搜索一些公开的 API 就可以了。比如,我找到了一个 http://i.tianqi.com 提供的 API,它的请求链接是这样的。

http://i.tianqi.com/index.php?c=code&id=8&icon=1&py=city&num=1

你可以把这个链接粘贴到浏览器里看看返回了什么?是北京市当前的天气信息。仔细观察链接你就能看出想要返回自己城市的天气信息该怎么办了,答案是替换 city 的值。把 city 换成你所在的城市试一试,主要要用拼音。例如:

http://i.tianqi.com/index.php?c=code&id=8&icon=1&py=chengdu&num=1

上面的链接就返回了成都市的天气情况。city 支持中国所有的市/区/县,你可以输入所在区的拼音名称,获得更精准的天气。

接下来就是将 API 返回的信息变成你想要的内容。其实,大多数 API 会返回一种叫 JSON 的数据文件,它就是字符,可以直接插入到短信文本中。但是,很遗憾这里并不是。所以我们需要曲线救国。

思路:将返回的页面转换成 HTML 源代码,然后从中匹配关键字,替换为自己想要的文本内容。

这里使用到常用的 Get Contents of URL 获取网页内容,再通过 Make Rich Text from HTML 将源码转换为文本。如果你觉得思路有一些跳,可以单独放一个插件试一试会返回什么内容。

测试一下,通过这个 workflow 返回了如下图所示,我想要的天气文本内容。

这个时候,你可以直接将这段文本内容 Set Variable 插入到短信中。但是,你有没有感觉这段天气信息特别生硬,和 app 分享的内容没有什么区别。

这里我们通过文本替换,将内容变成自己的话叙述出来。用 If 条件来判别,包含「雨」字时,说明要下雨,你可以加一个 emoji 让内容活泼起来。

正常情况下,天气信息包含晴、阴、雨、雪等内容。你可以到网上查到这些信息,然后根据所在地实际情况设置条件即可。例如,海南几乎不存在下雪的可能,所以就无须设置匹配「雪」的条件。这就是文本替换的作用,它很灵活。设置完这一串条件,将最终输出使用 Set Variable 存为一个叫 weather 的变量即可。

获取空气信息

接下来就是获取空气信息。其实和天气信息一样,我们需要先找到一个可用的 API。有很多可用免费申请的服务,例如:aqicn.org 以及 pm25.in。你可以查看相应的说明,填写资料申请一个私有 AppKey。这两个服务都直接能返回 JSON 格式的数据,使用起来非常方便,参考天气信息获取方法就好了。

由于我需要的成都市空气信息在美国领事馆网站上也有提供,所以我准备直接采用了美领馆的数据。目前,美领馆只提供了北京/上海/沈阳/广州/成都五个城市的数据。本来我想通过和获取天气数据同样的方法,但是意外发现美领馆的数据竟然提供了 RSS 链接(成都市数据 示例)。于是,就换一种思路吧。

这里,我们使用到了 Get Items from RSS Feed 这个动作,填入 url 地址,只获取最新的一条数据。

然后查看到美国的空气质量分级表。

接下来,使用上面相似的 If 判断语句完成文本替换。仿照上文设置完这一串条件,将最终输出使用 Set Variable 存为一个叫 air 的变量。

需要的两个变量信息都已经有了,最后测试一下这个 workflow 试试看,大功告成。

小结

最近,随着苹果收购 workflow,让更多的人知道了这个强大而有趣的应用。本文主要是写给一些刚刚用上 workflow 的朋友,提供一个引导示例。当然,少数派已经有 JailbreakHum 写的一系列出色的 教程文章,以及许多 Matrix 作者的 个人分享。俨然已经成为了最大最全的中文 workflow 教程集中地。你现在要做的就是大开脑洞,亲自动手实现自己想要的 workflow 吧。这将会是一个非常有意思的过程。1


  1. 本文所使用的 workflow 不提供公开下载,如果你仍然有不明白的地方,可以私信索取。