article_image

前注1:看本文前需要了解 Anki 的一些专有名词和 CSV 的简单用法。如果完全没有概念,建议先读一下《越过驾驭 Anki 前的那几道坎儿》和《Shortcuts 结合 CSV,在本地创建、读取和修改表格》。

前注2:本文仅是以最简单的用例介绍了发送卡片的核心原理。读者如需自定义自己的自动化,需要阅读原理详解部分来对操作进行修改。日后会发布一篇文章来介绍一个相对复杂的例子。如果不太容易搞定或者有相关疑问需要尽快解决,请加入 UTGD 会员,文章作者会负责任地为你解决文章相关问题。

在 iPad 上用批量发送单词到 Anki

Drafts 动作:Add to Anki (Shortcuts)

Shortcuts 动作:Anki

用法

整个手动分为三步:

  1. 下载上方提供的 2 个动作到各自的 App
  2. 手动记录单词,要按照格式记录
  3. 手动选择 Drafts 的“Add to Anki”发送动作

事先准备:先下载上面提供链接的两个动作,一个是 Drafts 的,一个是 Shortcuts 的。

【手动记录单词】首先,在 Drafts 里按照以下格式(也就是 CSV 的格式)记录新单词:

新单词, 中文意思

举例

untag, 移除…的标签
essential, (形容词)完全必要的、本质的、基本的

【选择 Drafts 动作】接下来,选择你刚才下载到 Drafts 中的 “Add to Anki(Shortcuts)”。

【自动步骤】Drafts 就会把文本发送到 Shortcuts 并触发 Shorctus 里你刚才下载的 “Anki”,随后你就可以感受 App 来回切换的华尔兹体验。

原理详解

明白原理后就不用囿于具体工具。你可以用任何你喜欢和顺手的工具来实现本文功能。

关键 URL Schemes 拆解

在 iOS 上批量给 Anki 发单词要用到的是 iOS 系统上最传统的自动化方法——URL Schemes。具体的,它使用的是这一段 URL Schemes:

anki://addnote?profile=User%201&type=Basic&deck=Default&fldFront=front%20text&fldBack=back%20text

URL 很难看懂,这没关系,我们来拆它一下。

一般来说,当你拿到一个 URL Schemes,或者要写一个 URL Schemes,首先你要关心 3 个部分:

  1. 动作 action 是什么:这是文档里指定的,它后面一般接的是问号(?
  2. 变量 parameter 是什么:这一般也是文档里指定的
  3. value 你要填什么:这是你自己按照规范填进去的

在 Anki 的这段 URL 里,它的:

  1. 动作 actionaddnote,我们照搬到 URL 中,形成 anki://addnote?。接下来,
  2. 变量 parameter 有很多,分别是:profile, type, deck, fldFront, fldBack。各自对应什么呢?我们来看值的部分,
  3. value 我们分别填:
    • profile: 你的账户名。英文系统一般是 User 1,中文系统一般是 账户1。可以在 Anki App 的设置界面查看,注意空格。假设我们的账户名是账户1,那现在 URL 变成 anki://addnote?profile=账户1
    • type:你的笔记类型。在用法部分,我们用的是默认的笔记类型,也就是“问答卡”,URL 变成 anki://addnote?profile=账户1&type=问答卡
    • deck:你要加卡的牌组。在用法部分,我们用的牌组是默认的,所以默认值是“默认牌组”,URL 变成 anki://addnote?profile=账户1&type=问答卡&deck=默认牌组
    • ⚠️ fldFrontfldBack,这两个变量代表“Front”和“Back”两个字段。这是Anki 的 URL 最不一样的部分,一定要理解好。
      • 变量本身的特殊写法:这个变量本身由两个部分组成 :fld + 字段名,所以 fldFront 就代表“Front”这个字段。如果你自定义的字段名是“例句”,那你这里要填 fld例句。在中文系统的默认设定下,这两个变量应该写成 fld正面fld背面
      • 值的写法:对应的,值很简单,在 fld正面fld英文 的后面写入各自的值即可。比如我们在“正面”字段也就是卡的正面写英文单词,在“背面”字段也就是卡的背面写中文意思,那么 URL 就是 anki://addnote?profile=账户1&type=问答卡&deck=默认牌组&fld正面=untag&fld背面=移除…的标签

废了着半天劲,我们终于知道,怎么通过 URL Schemes 在 Anki 里添加 1 个单词。这看起来很得不偿失,刀都磨出火星子了才砍了一棵树?其实完全不是这样,知道了每个环节的细节和原理,你才能对它做两件事:

  1. 对它高度自定义
  2. 对它批量自动化

Anki 这样的老牌口碑工具,不意外地支持 x-callback-url。而我们已经知道,添加 1 个单词,那批量添加的答案呼之欲出。

首先,我们在 action 的前面,加上代表 x-callback-url 的部分:

anki://x-callback-url/addnote?profile=账户1&type=问答卡&deck=默认牌组&fld正面=untag&fld背面=移除…的标签

随后,我们在 URL 的末尾加上执行成功后要跳转的 App:

anki://x-callback-url/addnote?profile=账户1&type=问答卡&deck=默认牌组&fld正面=untag&fld背面=移除…的标签&x-success=shortcuts://

我们在这里要跳回的是 Shortcuts,其实用 Drafts 也可以完成,用很多其它支持 x-callback-url 的工具都可以完成。但因为 Shortcuts 操作摆在那看起来更加容易理解,所以我们在这里以 Shortcuts 做例子。

在 Drafts 中的动作

介绍完核心的 URL,我们来看在 Drafts 和在 Shortcuts 里各需要什么动作。

首先来看 Drafts,因为我们的使用方法是:通过 Drafts 把单词表发送到 Shortcuts,再由 Shortcuts 利用 URL Schemes 来给 Anki 传输单词。所以 Drafts 里只需要一个最简单最基础的“Run Shortcuts(发送内容到 Shortcuts 的操作)”:

Alt text
在 Drafts 中的 “Run Shortcuts”

它需要修改的部分,只有一个地方,就是你要运行的 Shortcuts 的名字。你刚才下载的 Shortcuts 的名字是我取的,就叫“Anki”。所以 name 的部分我们填的是“Anki”。

在 Shortcuts 中的动作

Shortcuts 中的动作也是基础中的基础。就是一个“分隔文本(Split Text) + 为每个项目重复(Repeat with each)”的操作组合:

Alt text
Shortcuts 中的动作

因为我们在 Drafts 里记单词是每个一行,所以我们在第一步就按新行来拆分 Drafts 传入的文本。拆分出来每一行的内容就是:

英文, 中文

所以接下来,重复的步骤里,我们再次拆分每一行的内容。我们做的事,就是把半角逗号之前的内容,设为变量 正面,再把半角逗号之后的内容,设为 背面

这样,我们这个 URL Schemes 里的元素就其全了:

Alt text
Shortcuts 中的 URL Schemes 的相关部分

最后,我们在文本之下加上 “打开 URL” 这个操作。

小结以及特别注意

人们普遍认为批量给 Anki 加卡片需要 Excel 来做。但实际上我们在《Shortcuts 结合 CSV,在本地创建、读取和修改表格》已经提到,通过纯文本就可以做到 Excel 需要对 Anki 做的所有事。这里也正是利用了同样的理念——“如无必要,请勿释放克拉肯”。

Anki 这样的记忆工具,很明显适合移动端的碎片时间使用。不光是背记的时候,平时看书、看剧、刷视频,看到几个有趣的单词和用法,随手用 Drafts 就能把单词发到 Anki。

这篇文章虽然看起来较长。但是它所利用的都是基础却核心的 iOS 自动化方法。它是一个典型的基础自动化结合做一件“看似不可能的事”的例子。如果仅仅为了批量给 Anki 加单词这一个目的,确实不值得浪费时间摆弄一下。但是掌握了这些方法可以为你的思维方式里增加拼图碎片,让你可以在别人还在用 Excel 批量给 Anki 加单词的时候,可以随时随地用手机悠哉地甩单词给 Anki。

⚠️ 特别注意:本文技巧虽然基础,但是有几个需要细心的地方:

  1. Drafts 动作中,指定的 Shortcuts 动作名称要与 Shortcuts 相应的动作名保持一致。
  2. URL 的所有变量和值,要和你在 Anki 里的各个相应部分保持一致,特别是 fld+字段名 这个变量。

如果整个动作没跑通,极大概率是上述两个地方出了问题。特别是 URL 的部分,有没有空格之类的小问题很多,要细心设定。我在测试的时候,把“账户1”写成了“帐户1”,纳闷了半天没搞定。