Quantcast
Channel: 少数派
Viewing all articles
Browse latest Browse all 13772

利用 API 在 Workflow 内调用更多 Todoist 的功能

$
0
0

听了 @JailbreakHum 的两场关于任务管理的 Live后,我把任务管理从 OmniFocus 迁到了 Todoist。但在使用过程中发现了个问题——使用 Workflow 内置动作向 Todoist 添加任务时,无法为任务打上标签。经过一番摸索后发现,我们可以利用 Todoist 的 API 实现打标签这个需求。这样,我们也可以实现批量用 Workflow 向 Todoist 添加任务,并且附上标签、项目等详细信息

运行效果图

Workflow 下载:批量添加任务、打上标签、加上快速评论并分配至指定项目

一、获取 Token 令牌

和所有需要验证身份的 Workflow 一样,这个 Workflow 下载以后也不能直接使用,而是需要先在 Worklfow 里填一个叫组 Token 的东西,它等于你的 Todoist 账户密码,所以不要外泄。好在 Todoist 对这一点实现得非常容易

Token 填写位置

进入 Todoist 网页版,登录之后在页面右上角点击「齿轮图标」,在设置页面最后一个标签页「整合」的最下方,有一个「API 令牌」,这就是后文中调用 API 需要用到的 Token。

请输入图片标题

二、获取并处理标签的 ID

对 Todoist 内的条目进行的操作,大都需要用到对应的 ID,比如每一个项目的 ID,每一条任务的 ID,以及这里需要用到的标签的 ID。

根据官网提供的说明,使用不同的参数,能够获取不同类别条目的 ID。这里只是为了给任务添加标签,参数填入 Labels即可。

Todoist 提供的示例代码只有 Shell 和 Python 的,在使用 Workflow 获取 ID 时需要稍微改一下格式。

请输入图片标题

运行 Workflow 之后,返回的内容如下,每个花括号内就是一个标签。里面包含了标签的 ID "id",标签的名称 "name",我们只需要这两项信息。

请输入图片标题

接下来就需要用到 Workflow 内置的一些功能,将这两项信息提取出来,整合在一起,做成一个「Dictionary」,将标签名定义为「Dictionary」里面条目的关键字,将标签的 ID 定义为「Dictionary」里面对应条目的值,供后续的动作进行调用。获取及处理标签的具体方法请下载下面的 Workflow 来查看。

请输入图片标题

Workflow 下载:获取并处理标签的 ID

三、在 Workflow 内为单条新任务打上标签

Todoist 提供的 API 中,有一个功能是「Update an item」更新任务,有着非常丰富的参数可以选用,可以更改任务内容、优先级、日期等等。这里我们所要做的是,先利用 Workflow 自带的 Todoist 模块添加任务,再用 API 为刚刚添加的任务加上标签

请输入图片标题

1. 添加标签

使用 Workflow 自带模块添加完一个任务后,会返回一个链接,这个链接最后的数字就是此任务的 ID。

请输入图片标题

根据官网所提供的示例代码,操作的命令为 item_update更新任务,将上一步最后得到的任务的 ID,以及需要添加的标签的 ID 填入指定的位置,多个标签 ID 需要用 英文逗号隔开,并用 []中括号括起来。成功之后会提示 ok

请输入图片标题

需要特别注意的是,第二张图中 uuid的数值和最后返回的 ok前面的那串数值是一致的,而且每次操作都必须使用不同的 uuid,这是为了避免出现重复操作或者数据错乱[^1]。

因此,我们需要用到 Online UUID Generator Tool这家网站所提供的服务,来为每一次操作生成一个 uuid。

请输入图片标题

2. 利用 Workflow 自动填充标签

如果每次操作都要手动输入标签的 ID,那可是相当痛苦的。所以在文中第二部分,获取并处理标签的 ID的最后,我用 Workflow 生成了一个存有全部标签的 「Dictionary」,这里要做的就是通过调用 「Dictionary」内的数据实现快速填充标签的 ID。

请输入图片标题

这里一共有三个步骤:

  1. 从 「Dictionary」里获取标签名称,进行排序,供用户选择(图 1 和图 2);
  2. 根据用户所选标签名称,再从「Dictionary」里获取标签的 ID(图 2);
  3. 获取新增任务的 ID,与第 2 步得到的标签的 ID 一同填入代码中,最后发送给 Todoist 服务器(图 3)。

四、最终目标:批量添加任务,打上标签、添加快速评论、再分配至指定项目

使用 Workflow 自带 Todoist 模块批量添加任务,并将每一条任务分配至不同的「项目」,只能使用 Ask When Run来选择「项目」,这个过程需要点击多次,非常难看且效率低下。

下图左边为 Workflow 自带模块选择「项目」的方式,右边为最终实现的更高效的选择方式:

请输入图片标题

为了实现更高的效率,我想实现的是,把所有的「项目」生成一个列表,在添加任务的过程中,只需一次点击就能分配至指定任务。再将此功能与打标签、添加快速评论的功能结合在一起,做到真正的高效批量添加任务。

1. 打标签、分配任务、添加快速评论

在这个 Workflow 运行过程中需要同时获取「标签」和「项目」的 ID。

请输入图片标题

获取「标签」和「项目」的 ID 之后,需要使用与上文一致的方法,将它们分别制作成两个「Dictionary」,在运行时调用相应的「Dictionary」选择「标签」和「项目」。

利用 Workflow 的 Repeat with EachChoose from List为每一个任务加上标签 ID 及项目 ID。再用 Ask for Input输入任务的快速评论/Notes。由于每条任务可以有多个标签,所以在选择标签时需要开启 Select Multiple

请输入图片标题

上述操作完成后形成的文本包含了每一条任务该有的信息:

请输入图片标题

2. 转化格式

每条任务的信息都整合完成后,还需要将这些信息转化为 Todoist 服务器能识别的专用格式文本发送出去。要注意的是,包含与不包含「快速评论/Notes」的任务所需要生成的专用格式文本还有所不同。

下面两张图中红色部分代表一条命令,item_add新建任务,其内容是一致的,意思是告诉 Todoist 服务器,需要生成的任务及其对应标签和所属项目。

左图中蓝色部分则是第二条命令,note_add添加「快速评论/Notes」,意思是告诉服务器,为刚刚生成的那条任务加上对应的快速评论。

请输入图片标题

再把上面左图单独拿出来看看,下半部分(上面左图中蓝色部分) args后面 {}大括号内 item _id的值,必须要和上半部分(上面左图中红色部分)temp_id的值完全一致。只有数值一致,Todoist 服务器才知道,这条「快速评论/Notes」要添加给刚才新建的那条任务。temp_id同样可以利用上文提到的 Online UUID Generator Tool 来生成。

请输入图片标题

所有的信息都正确填充后,将专用格式文本发送给 Todoist 服务器,就完成了整个操作。

请输入图片标题

效果演示请看下图(为了演示方便,输入「任务」和「快速评论/Notes」的地方使用了自动填充):

运行效果图

这个 Workflow 最终能实现「添加多条/单条任务、打上标签、加上快速评论并分配至指定项目」。整个流程相对比较复杂,需要一定的 Workflow 知识才能完全理解,相关的地方我都进行了标注。具体的运行流程请下载后进行查看。

五、结语

通过 Workflow 去调用各家服务的 API,能够做的事情太多了。本文中介绍了 Workflow 调用 Todoist API 中的 Update an itemAdd an item能够完成的一些操作。 如果上文中的使用场景与你的需求不符,那就去看看其他 API 接口,动动手实现自己的需求吧。制作 Workflow 就是第一次费时费力,后续长久有用这么一个概念。

至于 Todoist 本身的用法,一起期待 JailbreakHum的系列文章吧。

[^1]: UUID 及后文提到的 temp_id 具体作用参见官方说明


Viewing all articles
Browse latest Browse all 13772

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>