上星期我们认识了如何在捷径之中与 API 打交道。不过那部分的文章的主要目的是为了让各位认识整个流程,所以没有添加任何复杂的细节。

而在和 API 打交道的过程中,我们其实会遇到很多细节上的问题,其中最重要的一个,就是授权。授权是让服务知道现在发起请求的是你本人(比如 Hum),而只有这样,我们才能通过 API 做一些更具体的、更与自己有关的事,而不是只做一些对谁来说都没有区别的事。当然,除了授权,在捷径中使用 API 时还会遇到一些典型的问题,这些问题我们也都会在这周集中解决。

为了讲解本周的内容,我选择了 Toggl 作为示例的服务。利用 Toggl API 制作的捷径,也是我个人每天都会用,如果能统计捷径运行次数的话,恐怕也是我运行最多的捷径。

Toggl 是个时间记录的服务,和其它工具有什么区别呢?最大的区别就是它是个在线服务。在自动化方面,在线服务比本地工具——特别是 iOS 上的本地工具——体验好很多。最直观的表现是不需要跳转,不管多复杂的东西都会在后台云端处理。这也让它的协作性更好,服务和服务之间可以很轻松地协作,互相支持。比如 Slack 和 TrelloTrello 和 TogglToggl 和 TodoistTodoist 和 Slack 等等,不能直接互相关联的服务,也可以通过 IFTTTZapier 这样串联服务的服务来协作。最后还有团队属性更强,本地工具都很难实现团队层面的应用,都只局限在了个人使用的层面上……本地工具和服务之间的区别我此前专门在本教程里写了一篇《专栏:在线服务与本地工具的区别》,读到这里有兴趣的可以翻回去读一下这篇文章,结合起来会有更深的理解。

话说回来,时间记录每个人还是可以试试的,小团队更应该试试,它至少有以下几个好处:

  1. 对自己完成任务的时间预估更加准确
  2. 从而在时间安排上能有所依据,做到更加客观
  3. 对自己有一定的监督和督促作用
  4. 团队方面可以掌握员工在某项工作上的耗时
付费组成员本周在线阅读时长

比如上图是我们付费内容组的 Toggl。为了使组内成员了解在线阅读时长1 与选题能力与写作能力的关系,我们共用了一个 Toggl Team,来统计我们的阅读时间。

为了让他们统计得更加准确,以及使用的阻力更小,我专门为整组成员做了这样的捷径:



视频里发生的事是这样的:

  1. 用 3D Touch 调用 Launch Center Pro 的 QuickAction
  2. 选择「Pocket」:此时运行捷径,开始使用 Toggl 计时并且打开 Pocket
  3. 重复 1,选择「RSS」:此时运行捷径,停止 Pocket 计时,告知我阅读 Pocket 阅读了多长时间,并询问我是否开始阅读 RSS
  4. 选择「是」:开始使用 Toggl 计时并且打开我的 RSS 客户端(可根据设备设定不同的客户端)

这个思路当然可以应用到更多的方面,比如你可以用这种方法,在打开王者荣耀的时候就开始计时,统计「打游戏打了多久」;同理,打开 Ulysses 时就开始计时,统计「写作写了多久」;还有「看视频看了多久」「读论文读了多久」「做音乐做了多久」「剪视频剪了多久」「画画画了多久」……

这样一来,我们在 iOS 上也算实现了一种「启动即计时」的机制,来统计我们使用某个软件的时间。

有人会说,iOS 上已经有了「屏幕时间」,我们直接看它不就行了吗?从某方面来说屏幕时间确实把这件事做得比较简单,也有不错的统计结果展示。但是「屏幕时间」仅限于 iOS 平台,数据也不能和其它平台共享。相比之下我们还是更需要一个全平台的时间记录工具,能够整体统计我们的时间使用情况,而不是在每个平台都有它独自的时间记录工具,给我们提供零碎的信息。比如说统计玩游戏的时间,我们在电脑上玩 Steam 里的游戏,也是应该被统计的。我们最终希望只在一张饼状图上就看到自己玩游戏玩了多久,哪个平台、哪个游戏占用了多久,而不是打开好几个设备上的好几个软件,再去把它们的时间都统计在一起,再加起来去新做一个饼状图。

总之,时间记录值得尝试。如果你希望尝试时间记录,我更推荐全平台的服务,而 Toggl 就是一个现成的好选择,同时它也提供了相对规范又易懂的 API。再加上 Toggl 的 iOS 应用一直做得比较鸡肋,实际上还不如结合捷径使用来得更效率。综合这些原因,我们这周将以 Toggl 作为示例,来讲解捷径和 API 相关的进阶技巧。


这周的内容将主要由以下几个部分组成:

一、在捷径中完成 Toggl 认证

我们最初要解决的,也是和上周内容最不同的,就是在捷径中如何通过 API 认证,或者说登录你的账号。让 Toggl 能够判断现在发起请求的是你本人,随后返给你那些只有你本人才能获取的内容,比如说你记录时间的项目(Project)和任务(Task)。

二、本捷径的主干部分

第二篇文章开始搭建整个捷径的主干部分。在这个主干部分有一个关键知识点,是制作词典。

在记录时间时,我们会建立不同的项目和不同的任务。而当捷径通过 API 请求到这些内容时,我们同时需要这些项目和任务的标题以及它们的编号。这是因为我们是靠标题知道谁是谁的,而 Toggl 的 API 是通过编号知道谁是谁的。所以最好的方法,就是把标题和编号绑在一起,我们看着标题选,完事儿捷径传输我们选的那个标题的编号。如果你对词典这个概念还有印象的话,会发现我们其实要的就是这个东西。

三、根据结果决定下一步运行的内容

这部分比较简单,具体来说是让捷径能做到:

  1. 当没有计时器运行时,直接运行新的计时器
  2. 当有计时器运行时,停止当前计时器,并询问是不是运行新的计时器
  3. 如果是的话,就再运行一遍这个捷径

这里的精髓是第三条,再运行一遍这个捷径。这是一个新的技巧,专业一点叫做「递归」,但是这个在捷径里的实现又特别简单,用一个「运行捷径」的操作就解决问题。