每个开发者都应该编写一个个性化的自动化 API
IFTTT,个人自动化的基础架构
几年前,我爱上了If This Then That (IFTTT)。它是一款卓越的免费服务,可以让你为数百种应用程序、网络服务、物联网设备等等创建简单的规则。它的理念非常棒,而且功能强大到我在这篇文章里都无法充分描述。如果你还不了解 IFTTT(或者微软新推出的竞争对手Flow),那就赶紧放下手头的事情,去体验一下吧。真的,我等不及了。
IFTTT 填补了我数字生活中一个之前从未想过的空白。但使用一段时间后,我发现自己渴望更高层次的自定义功能。我想要转换输出、将规则串联起来,以及添加条件语句。简而言之,我希望 IFTTT 成为一个免费的、托管的定时任务执行器,拥有友好的用户界面、移动应用以及数百个可供使用的库。我喜欢它提供的基本规则引擎的简洁性,但我想要更多。我猜想很多开发者也有同样的感受。
幸运的是,IFTTT 听取了开发者的呼声,新增了Maker Channel,开启了无限可能。你可以把它想象成 IFTTT 本身一个非常简单、标准化的 API 接口——一个包裹着 IFTTT 支持的所有应用/服务的 HTTP API 外壳。你是不是经常希望自己使用的某个服务能有个简单的 API,不需要繁琐的设置、OAuth 认证、SDK 和文档?现在,IFTTT 满足你的愿望了。
Maker 通道不仅能够接收请求,还能调用任意 HTTP 端点,它为你提供了构建任何你梦寐以求的自动化流程所需的一切。需要一些灵感吗?以下是我使用 API 实现的一些应用。
关于您自己的 API 的想法
位置报告
我在我的手机和我妻子的手机上都安装了Tasker,并设置了一条规则,以便每次我们的手机连接或断开 Wi-Fi 网络时,以及每隔几分钟当我们未连接到 Wi-Fi 时,我们的手机都会调用我的 API 并报告其位置和连接的网络。
在 API 端,我将每个人分为“在家”或“外出”两类。这样,你就可以追踪历史记录、查看最新位置等等。这本身就是一个简洁明了的替代方案,可以替代功能更全面的第三方应用,例如 Life360 或 Google+ 位置小部件。它在紧急情况下(或需要不在场证明时)很有用,但更重要的是,它对接下来要介绍的功能至关重要。
智能家居自动化
我们安装了一套智能报警系统和温控器,它们都兼容 IFTTT。当我的 API 检测到所有手机都显示“离家”状态时,它会自动启动报警系统并将温控器切换到离家模式。我们任何人一开车回家,手机就会自动连接 Wi-Fi 并向 API 报告我们已在家。API 会在我们进屋之前就解除报警系统并将温控器设置为在家模式。除了基于位置的离家/在家自动化功能外,我还编写了一个定时任务来自动切换报警系统和温控器的白天和夜晚模式。
我发现我们报警系统里的玻璃破碎传感器超级灵敏。它经常在听到制冰机的声音、盘子碰撞的声音,甚至我打喷嚏的时候触发警报。所以我还在我的 Pebble 手表上安装了一个简单的 HTTP 请求应用,这样我就可以通过按一下手腕上的按钮来解除警报了。
如果闹钟响起后一分钟内无人关闭,系统会向附近一位懂技术的亲戚发送短信,告知他们如果没接到我们的电话,可能出了问题。我在手表上也设置了SOS紧急呼叫功能,也能实现同样的效果。
构建监控
大多数构建监控系统都有某种构建后钩子,你可以很方便地将其连接到你的 API。即便没有,几乎所有系统都会在每次构建完成后发送电子邮件。我目前的工作就是这么做的。我将所有构建消息过滤到工作 Gmail 的一个特定文件夹中,并设置了一个脚本,每分钟检查该文件夹是否有新的构建消息。脚本会查看并解析消息,以确定构建的当前状态以及我是否参与了构建。如果构建失败且我参与了构建,脚本会调用我的 API,通过Pushbullet 向我的手机发送一条警告信息,然后通过 Pushbullet监控我的手机。
网站正常运行时间监控
最近,学校一个对完成作业至关重要的网站资源出现了严重的服务器问题,而且问题频发。所以我添加了一个 API 定时任务,用来查询UptimeRobot的服务器状态,并在网站宕机或恢复时将状态更新到班级的 Slack 频道。这样,我们就可以在等待网站恢复的时候去做其他事情,而不用不停地刷新页面了。
自动化库存管理
是的,IFTTT 的确有一个非常基础的股票监控集成功能。但是它提供的数据深度实在有限。因此,我为我的 API 添加了一个功能,用于维护一个我正在关注的股票代码列表,并每隔几分钟从几乎没有文档的雅虎财经 API查询这些股票代码的更丰富的数据。当股票价格触及 52 周高点/低点的特定阈值时,我就会收到通知,以便进行买卖操作。
额外提示:如果你胆子够大,听说可以用Robinhood账户及其秘密 API实现全程自动化。如果自动化操作得当,免费交易几乎是完美的交易。但如果你实在不想这么麻烦,不如直接注册Quantopian,用正规的方式操作。
通用数据查询
真的,只要你想,任何东西都可以变成API。我举个例子。在我和妻子最终决定买第二辆车之前,我每天都坐公交车上下班。但根据我当时的位置和时间,不同的公交线路在不同的时间段停靠不同的站点,选择也很多。每天要把四条不同的公交线路时刻表拼凑起来,简直是噩梦。
所以我把所有我关心的路线和站点时刻表信息都输入到了一个谷歌表格里。然后我给API添加了查询下一班车到站信息的功能,并在我的智能手表上设置了相应的触发器。下课后,我只需按一下按钮,就能收到通知,清楚地知道接下来哪些公交车会到达哪些站点,以及它们什么时候能把我送到公司。简单却超级实用。
远程关闭/重启您的计算机
我的工作电脑如果几个小时没用,就会停止响应远程桌面连接。完全不知道为什么。我试过“检查电源设置”和“检查BIOS”,但都没用。甚至还检查过扩展坞固件,看是不是网络问题。
幸运的是,在这种状态下,机器仍然可以接收和响应所有其他网络流量。但 TeamViewer、LogMeIn 和 Chrome 远程桌面都无法使用。所以我写了一个简单的 Windows 任务,顾名思义,它会每隔 5 分钟向我的 API 查询是否需要重启。这只是一个临时的解决方案(我真心希望如此),但到目前为止,它已经足够实用(而且使用频率很高),以至于这个操作已经在我的手机主屏幕上占据了一个“执行”按钮的位置。
编写自己的 API
那么,你如何编写 API?你会使用什么技术栈?托管问题又该如何解决?如果你已经拥有一个运行着你所选技术栈的个人网站,那真是太棒了。但如果没有,我有一个优秀、强大且免费的替代方案可以推荐:
如果您不想费力搭建自己的服务器,并且熟悉 JavaScript,不妨考虑使用Google Apps Script作为 API 解决方案。您可以配置脚本,使其按计划执行您选择的函数,并像服务器一样处理 HTTP 请求、调用其他 API,以及运行您想要的任何代码。此外,它还内置了丰富的库,让您可以与帐户中的 Google 日历、Gmail、云端硬盘、文档以及其他几乎所有服务进行交互。
另一方面,如果你想要一个真正专业的服务器环境,但又不想花钱,可以看看那些提供免费小型Linux虚拟机的供应商。Cloud9大概是我最喜欢的。如果你能在Linux虚拟机上安装.NET Core,并用漂亮的C#编写API,那就更棒了,因为你完全可以做到:) Azure、AWS和其他平台也是不错的选择。
我最终选择了使用 Google Apps Script。之前写GmailSnooze的时候就用过 Google Apps Script ,所以对它比较熟悉。即使是我自己的个人账户,也从未接近过他们的速率限制,稳定性方面也没有任何问题。目前为止,我一点也不后悔。如果你也想尝试一下 Google Apps Script,我会在下一篇文章中详细介绍我是如何搭建自己的 API 的。敬请期待。
值得吗?
在开发这个个人 API 项目的过程中,我经常会想到兰德尔·门罗著名的自动化工作量图表:
我经常问自己:“与最初的任务相比,我真的节省了多少时间?我是不是只是陷入了自动化无底洞?”我知道在某些方面,自动化确实很方便,但并没有改变生活。而且有些功能确实需要花费大量时间进行调试和重写才能达到理想效果。但是,随着我不断向 API 添加新功能,下一个功能的实现就变得更加容易了。
但最重要的是,我的思维方式发生了改变。每当脑海中冒出“唉,真希望不用……”这样的想法时,结尾通常都会变成“……我能不能想办法把它自动化?”。而实际上,这正是软件开发的精髓所在。我们整天在工作中不断调整、自动化、优化和改进业务的各个方面。但我们又有多少次会抽出几分钟时间,思考如何将这些经验应用到生活中呢?谁知道呢,你或许能找到一种自动化特定任务的方法,而它最终可能会成为下一个热门技术。
糟糕,我的手表震动了一下。得去修复一下构建问题了 :)
本文最初发表于Another Dev Blog 。
文章来源:https://dev.to/anotherdevblog/every-developer-should-write-a-personal-automation-api









