# 一种在 iOS 上批量给 Anki 发送卡片的方法

> 本文公开全文。

原文：https://utgd.net/article/9611

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 个部分：

- 动作 action 是什么：这是文档里指定的，它后面一般接的是问号（?）

- 变量 parameter 是什么：这一般也是文档里指定的

- 值 value 你要填什么：这是你自己按照规范填进去的

在 Anki 的这段 URL 里，它的：

- 动作 action 是 addnote，我们照搬到 URL 中，形成 anki\://addnote?。接下来，

- 变量 parameter 有很多，分别是：profile, type, deck, fldFront, fldBack。各自对应什么呢？我们来看值的部分，

- 值 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=默认牌组 ⚠️ fldFront 和 fldBack，这两个变量代表“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 个单词。这看起来很得不偿失，刀都磨出火星子了才砍了一棵树？其实完全不是这样，知道了每个环节的细节和原理，你才能对它做两件事：

- 对它高度自定义

- 对它批量自动化

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 的操作）”：

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

### 在 Shortcuts 中的动作

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

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

```
英文, 中文
```

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

这样，我们这个 URL Schemes 里的元素就其全了：

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

## 小结以及特别注意

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

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

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

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

- Drafts 动作中，指定的 Shortcuts 动作名称要与 Shortcuts 相应的动作名保持一致。

- URL 的所有变量和值，要和你在 Anki 里的各个相应部分保持一致，特别是 fld\+字段名 这个变量。

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

---

[前往标准阅读页](https://utgd.net/article/9611?audience=web)
