和 API 的结合是 Workflow 最复杂的功能,大概也是 iOS 里的效率软件目前能够做到的最效率的事,掌握了如何在 Workflow 里使用 API 就可以说这个 App 已经被你征服了。

API 是 Application Programming Interface 的缩写,中文译为应用程序接口,术语解释到此结束,你对这单词有个感觉就行。

普通用户使用 API 的理由不外乎方便,很多时候我们对搜索结果的期待只是一些具体的内容或数值,比如汇率的数值、气温的度数等等,能够直接抓取这些内容对于开发者很重要,但对于我们普通用户来说,如果能够直接获取数值或字符,也省去了每次都打开以及加载网页的时间和流量。

这篇文章以以下三个例子带大家入门 API 以及如何在 Workflow 里使用 API(文章长,如果没耐性,可以只读第二个例子,因为它最详尽)

  • 在 iOS 上做到一键让 PC 上下载自己 iOS 设备的最新固件
  • 在 iOS 上做到 Search Link
  • 在 iOS 上做到批量保存 Google Image 第一个搜索结果

利用 Transloader 一键下载最新固件

这部分内容并没有在 Workflow 里调用 API,主要目的通过做个小玩意儿使你接触这个东西,知道它是什么,减低对它的恐惧。

作为一个 Jailbreaker,跟固件打交道是常有的事,尤其是当越狱突然放出的时候,我会马上更新到最新固件然后越狱。但是,固件发布当时我未必在家,加上固件都不小回家以后要下载很久。所以必须想个办法能够让我在手机上点一下,家里的电脑就会自动下载我的设备的最新版固件。

Workflow 结合 ipsw.me 的 API 再加上 Transloader 可以解决这个问题,只要我知道自己设备的型号,就能够通过 Transloader 在家里的 Mac 上下载最新版的固件,这样回到家以后,新鲜的固件就躺在那里等着我了。

想要用好 API,要养成翻开发者文档的习惯,你或许对「文档」这两个字的理解是枯燥乏味以及晦涩难懂。这是正常的,因为它们不是睡前读物,它们更多的是工具,要做到的是规范和高效,所以它们的用词才会机械,从而也便于搜索和定位。

ipsw.me 的 URL 格式在其 官方文档 里有很明确的表述。

我们想要下载的是自己设备的最新固件,用到的 URL 就是:

http://api.ipsw.me/v2.1/设备的Identifier/latest/url

比如说我的 iPhone 6 Plus 的最新固件下载链接的 API 页面,就是:

http://api.ipsw.me/v2.1/iPhone7,1/latest/url

打开这个界面,你会看到一串网址:

相信你应该能看出来这串网址就是固件的下载链接。

你可能还不太明白为什么会是这样的结果,我们来看一个关于固件的稍复杂一点的 API 的页面,应该能让你理解地更轻松一些。

这个 页面 列出了所有的固件信息,我们只取其中一个的一部分来看:

这是该页面最顶部的一部分内容,它包含了 Apple TV 2G 这款设备的 7.1.2 版本固件的所有信息。

在图中,首先我们可以看到一个明显的层级关系,分别由不同的大括号所区分。最顶级的只有一个内容:devices。在下一层也就是第二层,我们看到了 Apple TV 2G 的 Identifier:AppleTV2,1,这一层下面有一些内容,最下面的是第三层:firmwares,里面包括了更多的信息。图片里截下来的部分只是 7.1.2 版固件的信息,再往下翻,还有同层级的其它版本固件的信息。

你可以注意到,在这个页面里,信息都是引号冒号引号的格式,冒号前的引号中是类别,冒号后的引号中是具体信息。我们通过 API 要做的,就是在知道左边的类别后获取右边的信息。

图片里我标记了三个箭头,分别在 name(名称)version(版本)url(链接) 之前,你可以通过这三项你比较熟悉的对象来增强理解。如果你也越狱,你应该还能看见 signed 这一项,这一项后面如果是 true,就说明可以恢复到这个版本。

想了解 API 的话你以后会经常看到这样的界面,但现在我们是想要下载自己设备的最新版本的固件,那么只需要知道自己设备的 Identifier 就足够了。查看设备 Identifier 首先得知道设备型号,设备型号就在设备的背面印着,看一眼就行了:

图片来自 OSXDaily.com

搞清楚机型以后就可以在这个 页面 对应查询到该设备的 Identifier。

下一步要做的是和 Transloader 这个应用的联动:

整个动作很简单,首先做一个菜单,将自己的设备名和带有 Identifier 的 API 页面的 URL 关联起来,然后下一步是从 API 页面获取下载地址,并复制到剪切板。最后通过 Transloader 的 URL Schemes,可以直接跳转到 Transloader 并开始下载剪切板链接里的内容。

Transloader 的机制是,将下载链接保存到 iCloud,如果 Mac 同样运行着 Transloader 并链接到了网络上,就会直接获取链接开始下载。

Search Link

在 iOS 上也做到 Search Link 的效果,自定义的余地比较大。

Brett Terpstra 做过一个名叫 Search Link 的小工具,如果你下载了这个工具,当你选中一串字符——比如 @JailbreakHum——再按下设定好的 Search Link 的快捷键,就能做到把 @JailbreakHum 外面套上中括号,并且在后面加上一个小括号,小括号内是 Google 搜索的第一个结果的链接——[@JailbreakHum](weibo.com/jailbreakhum)。这对用 Markdown 写作的人来说是个很方便的工具,而这个工具核心就是 Google Search 的 API。一旦知道了这个 API,那么在 iOS 就可以通过 Workflow 做到同样的事情。

Google Web Search API 的官方文档 新手没有必要看,我们通过 Workflow 来使用 API,最关键的是找到我们需要的 JSON(新手不需要彻底知道是什么)页面,在 Search Link 这个动作中,我们需要的页面的 URL 是:

https://ajax.googleapis.com/ajax/services/search/web?v=1.0&q=JailbreakHum&rsz=1

这就是使用 Google 搜索 JailbreakHum 以后第一个搜索结果的 JSON 页面:

在这个 URL 里,要注意的只有最后那一小段(因为前面的是固定格式):q= 后面的字符是你要搜索的关键字,而 &rsz=1 则是只获取(第)一个数据的意思,数字可以改,但我们只想获取第一个结果所以在这里要让它是1

在上面的图片里,也就是这个地址打开后的界面里,你会看到 unescapedUrl:

而在它后面的那个链接,就是在 Google 搜索 JailbreakHum 以后会出现的第一个结果的链接,也就是微博链接:

http://weibo.com/jailbreakhum

如果能够自动获取这个 URL,就能够获取在 Google 上搜索 JailbreakHum 的第一个结果的链接了,同理,你也可以获得你想搜索的任何关键词的第一个结果的链接,这就是 Search Link 的核心。而如果你想给关键字套上中括号,给链接套上小括号,这都是 Workflow 里的基础操作了。

下面我们具体来结合 Workflow 的动作流程看看如何实现这个功能:

第一步:获取/输入关键词,编码,填入 URL

首先,因为 iOS 上目前还没办法直接在选中字符后打开 Sharesheet,所以我用的是通过获取剪切板内容来获取关键词,使用这种办法的好处是可以直接用 Launch Center Pro 或者 Launcher 这样的应用直接激活动作。另外你也可以在这里建一个菜单,设一个 Ask for Input 这样的动作,这样你可以临时输入关键词。

然后说解码,简单来说,URL 里只能填入最基本的字符,其它的都需要编码。要养成一个填入 URL 之前编码的好习惯。

把关键词填入 URL 就是那个 text 文本框做的事,也可以使用 URL 这个动作,但 URL 我一直都不喜欢用,因为不好修改里面的内容。

第二步:获取链接

这一步是 Workflow 跟 API 打交道的重要步骤:

首先下载链接内容,也就是获取 JSON 页面。然后从页面中获取词典(不用纠结,只要知道有这一步即可)。

下一步开始一步一步获取 key:先是获取第一层的 key——responsedData 的内容,再获取第二层的 key——results 的内容,最后获取我们想要的 key——unescapedUrl 的内容,也就是 http://weibo.com/jailbreakhum

每个 key 的引号后面的全部字符都是这个 key 的内容,所以必须一步步精确到我们要的那一层,计算机不会跳步,你直接要 unescapedUrl 它就不知道该怎么办了。

第三步:处理链接

获得链接以后,最后一步就是处理这个链接,这一步就简单了:

你可以做个菜单,选择复制到剪切板或是跳转到你常用的文本编辑软件。相信对于读过我之前教程的人都不是难事。有能力的,甚至可以和 Editorial 里的动作进行搭配,在 Editorial 里完全做到 Search Link 也并非不可能。

批量保存 Google Images 的第一个搜索结果

同样使用 Google 的 API,但比 Search Link 简单些,可以作为练手。

批量保存图片的情况属于那种不常遇到,但如果遇到的话会很麻烦的事情。在 Google 一张一张地搜索再一张一张的打开原图保存,那酸爽……比如有时候软件测评媒体经常会做这样一种专题图,它要有许许多多的大牌应用图标作为背景,一张一张图搜了下载是个办法、直接从 ipa 文件里获取也是办法,但若论效率的话直接以 应用名icon 输入所有应用的名称然后从 Google Image 获取第一个下载结果应该是更好的办法1而通过活用 Google Image Search 的 API,可以轻松的在 Workflow 做到这件事。

有了前面 Google Search 的例子,这里的描述会容易很多。首先,我们要找的是那个含有 JSON 页面的 URL:

https://ajax.googleapis.com/ajax/services/search/images?v=1.0&q=关键词&rsz=1

然后我们直接结合 Workflow 的动作流程来看看如何在 Search Link 的基础上稍作修改做到直接下载 Google Image 搜索结果的第一张:

第一步:输入关键词

在图中我们看到多了一步 Split Text,这是我们用过多次的将文本转换成列表的功能,使用它是为了在需要批量下载图片的时候方便一些。在 Split Text 里我们看到是用 Space 也就是空格来划开字符,那么当你需要下载多张图片的时候,只需要在不同的关键词之间输入空格即可。(不要忘记编码~)

第二步:填入 URL,获取图片

首先用 Repeat 把动作框起来,这样的话单张多张图片搜索的时候都可以用。

下一步和 Search Link 一样,就是把关键词填入 URL,获取词典,再不断地获取 Key,直到获取了图片的网址。

下一步用下载网址的内容或从网址获取图片都可以,但最后不要忘记把它们存到相机胶卷。当然你也可以改存到其它位置,看个人需求。

小结及补充

1. 用 JSON FORMATTER & VALIDATOR 将 JSON 页面变得整洁2

本文涉及的 API 内容都是 JSON,一般 JSON 的代码看起来是一坨:

想要把这一坨东西按照层级排列起来可以用 JSON FORMATTER & VALIDATOR 这个服务,把代码粘贴进去,整洁的结果就出来了:

2. 其它公共 API 获取的地方

API 分公共 API 和私有 API,公共的可以不用注册专门的账户直接用,私有的则不可以。而 Workflow 能用的也只是部分公共 API 能做到的事情,比较有名的公共 API 库有 ProgrammableWeb, Mashape API, 和 Data.gov3。除此之外,你也可以使用 Apple 的 iTunes Search API 跟 Yahoo 等公司的公共 API 来做有意思的事,比如 Search Link 有直接获取 App 的 iTunes 链接的功能,你可以参考上面的文章来挑战一下这个。另外 @do-fine 就给用 Yahoo Weather 的 API 做了个给女朋友发天气的 Workflow,虽然实用性好像不如 IFTTT,但也是很好的练手方法。


  1. 在这里你当然也可以使用 Apple 的 API,我以 Google Image 为例是因为 Google Image 的整体实用范围更广,当然如果你的使用情境更侧重于 iOS 应用,那么可以参看 Apple 的文档,相信你看了这篇文章应该也会使用 Workflow 结合 Apple 的 API 做一些事情了。 ↩︎
  2. 该网站由 @geekdada 分享。↩︎
  3. 来自 Geekwithjuniors↩︎

继续阅读更多关于 Workflow 的文章 >