引入
IFTTT 看少数派多的朋友大概是非常熟悉了,其简单的 If this then that 的理念却帮助我们提高了效率。它的 Channel 数多到数不清,甚至在不断增加,但总有些时候感觉差了些什么,我们的 Applet 被限定在一个框体内,没有完全交给我们自定义的地方,于是 Maker Channel 就诞生了。

2015 年 6 月 17 日,IFTTT 正式公布了这个新的 Channel。它们说到:所有的 DIY 爱好者,和那些热爱创造的人,我们非常高兴地向你们介绍全新的 Maker 频道。Maker 频道将 IFTTT 的巨大能力发展到任何你的自制 DIY 产品,你可以将任何请求直接以网络连接的形式激活,当你将它连接上 Raspberry Pi 或是 Auduino 的时候,你会发现用 Maker 制作 Applet 没有什么不可能。

那么它到底是什么呢?你可以简单地理解为,你可以将「访问一个特定的网站」设置为 IF 条件,也就是说,
当你访问这个网站的时候,你的 Applet 就激活了
,并且网站还可以传递最多三个参数(说实话,挺少的……)。
也就是说,只要你有一个能够访问互联网的设备,它都能够作为 IFTTT 的 IF 条件终端。

IFTTT Maker 支持作为 IF 或 That 使用,作为 IF 时它的作用是「当该网页被请求的时候」,作为 That 的时候是「发出一个 Web 请求,可以是 GET ,PUT, POST, HEAD, DELETE, PATCH 或者 OPTIONS 之中的任何一种,你甚至还可以制定 Content Type 和 Body,嗯,看得懂的人都知道我在说什么 :)
如果你对这些 HTTP 名词感到陌生,可以看一下 这篇文章的原理部分 ,里面详细讲解了这些名词的意思。

我也有一个树莓派,简单了解它的作用后,我发现这个 Channel 潜力无穷,便自己做了一些小工具,下面我也将介绍一些。
· 用它来接收动态物流信息

· 用它来自动刷新全国(球) Apple Store 零售店的特别活动

· 类似 Yo 的,快速给你的朋友发送简短消息

开始
访问 IFTTT Maker Channel 的网站 http://maker.ifttt.com 并点击 Connect

当你在右上角看到 Documentations 和 Settings 后点击前者,你将会被定向到另一网页。

最大加粗的文字就是你的 Maker Key 了,你可以在刚刚位置的 Settings 点击 Edit Connection,如果你的 Key 被他人得知并滥用,在那里可以直接获取一个新的 Key,原 Key 就会作废。

而 Make a POST or GET web request to 后面所接的就是上文所说的「特定网址」了,它的格式一般如下 https://maker.ifttt.com/trigger/{event}/with/key/[你的KEY ]
这个 {event} 是什么呢?你可以在请求的时候设置一个名字,比如我以 event 为 raw 的时候用一个 IFTTT Applet 来处理 IF 之后的 That,另一个 event 为 test 的时候用另一个 Applet 来处理这个 IF 的 That,这样方便你区分不同的请求,并让 IFTTT 作出不同的反应。

你可以直接访问这个网站,不附带任何参数,也就是做一个 GET 请求,这个时候 IFTTT 已经捕捉到了你的操作,类似 IFTTT 之前的另一个产品 Do Button,直接访问这个网站,就好像直接通过网站激活你的 Applet。如果你在 iOS,可以用 IFTTT Widget / IFTTT Apple Watch 应用 / Workflow 等灯做到和它完全一样的操作,但是对于并没有 IFTTT 客户端的设备,比如 Windows / Mac,或者其他的嵌入式设备,那么访问这个网站来激活你的 Trigger 也是一种非常好的办法。

当我们明白它的具体流程后,就来创建一个新的 Applet 吧!首先我们以最简单的举例子,创建一个通知工具,也就是说你访问这个网站时附带一句话,直接让 IFTTT 把这句话发到手机上通知给你。在 IF 中选择 Maker Webhooks。

这里有一个必填参数是 Event Name,也就是上文说的 {event},对于不同的 event 你可以以不同的方式处理,因此需要这个参数来区分,我们以 test 举例,你也可以随意选择一个词语,今后你可以对不同的 event 做不同的 applet。

That 部分直接选择 Notifications,也就是发送一条通知到 IFTTT App,也就是发送到你的手机上,内容我们清空,选择「Add Ingredient」,并选择 Value1,它会自动变为 {{Value1}}。接下来就可以保存了,这条 Applet 的意思就是,将 event name 为 test 的请求参数直接发送通知给你。

POST 的数据需要是 JSON 格式,比如:
{"value1": "第一个 Value"}
{"value1": "第一个 Value", "value2": "第二个 Value"}
curl 的 POST 请求方法:
curl -X POST -H "Content-Type: application/json" -d '[你的JSON]' [URL链接]
在手机上收到通知后,就表明你已经成功创建了这条 Applet 并通过了测试。
如果你对网络请求不熟悉,可能并不能理解 POST 和 JSON 的意义,如果你并不想做复杂的参数传递请求,可以将它就作为仅 GET 使用,访问网站对于大家都不是难事。

举例 1: 物流实时推送

我自己从去年 10 月其实就开始写这个 Python,来完成物流更新的实时推送,一开始我使用的其实是另一个叫做 Instapush 的服务,它与 IFTTT Maker 非常相似,但是是一个简化的版本,因为它只能用来发送通知,不能像 IFTTT 一样再结合另外的各种程序来做 That 联动。后来 Instapush 的服务器出了问题,Pushbots 公司也无心再管这个东西,于是我只好寻找他的替代品,正好找到了 IFTTT Maker。

整个程序的逻辑其实非常简单,与我之前分享的 Workflow 通知中心查快递 逻辑是相似的,只是利用了电脑更优秀的处理效率增加了一些别的优化,而 IFTTT 的部分呢?其实就只有一点点。
def pushbots(pushRaw):
os.system('curl -X POST -H "Content-Type: application/json" -d' + "'" + '{"value1":'" + pushRaw + '"}' + '"https://maker.ifttt.com/trigger/raw/with/key/[我的ID]")
也就是说,我在程序中只需要调用 pushbots("你好"),它就会给我的手机发送一句你好了,真正用到 IFTTT 的部分就只有一个网络连接,也正好体现出它的便捷之处,你所有的请求,就仅仅是打开一个特定的网页而已。

同样 Event_IFTTT.py 也是一样,刷新全中国 Apple Store 零售店官网的源代码,分析特别活动的部分,当有特别活动的时候,再调用类似上面程序的部分发送 IFTTT 通知即可。

从这张图你就可以看到,6:50 获取到了 6:40 的物流更新,8:50 获取到了 8:48 的更新,13:41 获取到了 13:39 的签收信息,该 Python 自动退出运行,如果我把刷新时间间隔改成 30s,那就可以得到完全实时的通知。

Today at Apple 是 Apple Store 的全新讲座项目,用 IFTTT Maker,我制作了一个 Telegram Channel 自动推送工具,你可以在 Telegram 页面 关注果铺知道,接受 Apple Store 特别活动通知。

上面三个源代码在 junyilou.github.io 开源。
举例 2: 发送一条类似 Yo 的短消息给你的朋友

Yo 是一个很有趣的 App,整个 App 只有一个功能,选择一个人,发给他一句 Yo! 但是其实它的用处还是很大的,因为真正使用它的人都明白这句 Yo 的含义:如果老板跟下属发 Yo,也许是邀请他来办公室喝茶;如果女朋友跟男朋友发 Yo,也许是叫他快来她的地方…… 有些时候和朋友的交流只需要一个词,并不需要太多文字,也能传达你的意思。

让你的朋友授权 IFTTT Maker,并让他告知你他的 Key,他创建一个接收通知的 Applet,以后你可以直接用 Workflow 后者其他工具,打开这个网址,然后它就会收到一条 Yo 消息了(你不需要安装 IFTTT App),当然 Yo! 这句话你也可以自己定制,比如改成「科科,你是不是又在玩手机了?好好上班!」
总结

对于有开发板,例如树莓派,或 VPS 等设备的人来说,IFTTT Maker 将 Trigger 简单的变为了一个网页请求,如果你将你的开发版连接上智能家庭项目,你就可以设置比如,开门时向手机发送通知;或者如果你只是将树莓派作为下载机,也可以让他下载完毕后通过 IFTTT 给你的手机发送通知,等等。可以说 Maker 给予了 IFTTT 更多可能,富有创意的开发者一定能用它作出更多精彩的 Applet。