AnkiConnect
一个将 Anki 与其他软件连接的非常基础的 Anki 插件。
官方页面
安装需遵照官方说明。
连接方法
AnkiConnect 可以让其他软件通过 HTTP 实现和 Anki 的连接,包括读取 Anki 卡片、向 Anki 中添加卡片、更新 Anki 已有卡片等。
示例代码
import json
import requests
def request(action, **params):
"""
一个使用 requests 库调用 AnkiConnect API 的辅助函数
"""
# 构建请求体
request_payload = {
'action': action,
'params': params,
'version': 6
}
# AnkiConnect 的 API 端点
url = 'http://localhost:8765'
try:
# 发送 POST 请求
response = requests.post(url, data=json.dumps(request_payload))
# 确保请求成功
response.raise_for_status()
# 解析 JSON 响应
response_data = response.json()
# 检查 AnkiConnect 返回的错误字段
if response_data.get('error'):
raise Exception(response_data['error'])
return response_data.get('result')
except requests.exceptions.RequestException as e:
# 处理网络层面的错误 (如连接失败)
raise Exception(f"无法连接到 AnkiConnect: {e}")
except json.JSONDecodeError:
# 处理无法解析的响应
raise Exception("无法解析 AnkiConnect 的响应,它可能没有正确启动或配置。")
# --- 例子开始 ---
try:
note_id_to_update = 1752472164551 # 这是一个示例ID,请务必替换
update_data = {
"id": note_id_to_update,
"fields": {
"word": "Hello",
"rubytextHtml": "ハロー",
"exampleSentence": "Hello, everyone!"
}
}
# 在更新前,先检查卡片是否存在
if note_id_to_update in request('findNotes', query=f'nid:{note_id_to_update}'):
result = request('updateNoteFields', note=update_data)
print(f"成功更新卡片 ID: {note_id_to_update}。")
else:
print(f"错误:找不到要更新的卡片 ID: {note_id_to_update}。请确保ID正确。")
except Exception as e:
print(f"更新卡片时发生错误: {e}")
invoke 封装
在多数情况下,可以创建函数 invoke,封装一次与 AnkiConnect 的操作。
def invoke(action, **params):
"""
一个辅助函数,用于向 AnkiConnect 发送请求。
Args:
action (str): 要执行的 AnkiConnect 操作。
**params: 传递给操作的参数。
Returns:
dict: 从 AnkiConnect API 返回的 JSON 响应。
"""
payload = {"action": action, "version": 6, "params": params}
try:
response = requests.post(ANKICONNECT_URL, data=json.dumps(payload))
response.raise_for_status() # 如果请求失败(例如 404, 500),则引发异常
response_json = response.json()
if response_json.get('error'):
raise Exception(f"AnkiConnect Error: {response_json['error']}")
return response_json['result']
except requests.exceptions.RequestException as e:
raise Exception(f"无法连接到 AnkiConnect。请确保 Anki 正在运行并且 AnkiConnect 插件已安装。\n错误详情: {e}")
这样只要每次传入动作和参数就可以更新。
常用命令
findNotes
寻找指定的笔记。
参数:
- query:按 Anki 的格式搜索和晒先,例如
"deck:Japanese"就只筛选Japanese牌组的笔记。
返回值:一个列表,包含搜索到的笔记的 Note ID
BEYOND THE ARTICLE
读完了,有什么想法?
阅读已保存的问答示例,并循着引用回到原文。
— 本文完 — 返回文章列表