はじめに
この記事はAnkiのアプリを使用しているけど単語の登録が面倒なのでプログラミング(Python)で解決したいという方向けです。
Anki Connectとは
AnkiConnectは、Ankiデスクトップアプリに対する外部APIであり、Pythonなどのスクリプト言語からAnkiデータにアクセスするために使用されます。AnkiConnectプラグインをインストールすることで、Ankiデスクトップアプリに対してHTTPリクエストを送信することができ、Ankiのカードやノート、デッキなどのデータを操作することができます。
AnkiConnectプラグインを使用することで、以下のような操作が可能になります。
カードやノートを作成、編集、削除する
デッキを作成、編集、削除する
タグを追加、編集、削除する
学習結果を取得する
Ankiの設定を変更する
AnkiConnectは、Ankiデスクトップアプリの内部APIであるAnkiConnectライブラリを使用して実装されています。AnkiConnectライブラリは、Ankiのカードやノート、デッキなどのデータにアクセスするための関数を提供し、HTTPリクエストを受け取って、それらの関数を実行します。
AnkiConnectプラグインは、Ankiのバージョン2.1.20以降で使用することができます。AnkiConnectプラグインは、Ankiの公式ウェブサイトからダウンロードすることができます。
Pythonコード
import requests
import json
# Define the note information
note = {
"deckName": "Eng",
"modelName": "Basic",
"fields": {
"Front": "表面カード",
"Back": "裏面カード"
},
# "tags": [
# "タグを設定できます"
# ]
}
# Send the request to AnkiConnect to add the note to the deck
response = requests.post('http://127.0.0.1:8765', json.dumps({
'action': 'addNote',
'version': 6,
'params': {
'note': note
}
}))
# Check if the deck exists and the note was added successfully
if response.status_code == 200:
result = response.json()
if result['error'] is not None:
# Check if the error message indicates that the deck does not exist
if 'deck not found' in result['error']:
print('Error: Deck does not exist')
else:
print(f"Error: {result['error']}")
else:
print('Note added successfully')
else:
print('Error adding note to deck')
上記のコードは事前にAnkiConnectをご自身のAnkiアプリにインストールしておかないと動きませんのでご注意ください。
コード解説
note = {
"deckName": "Eng",
"modelName": "Basic",
"fields": {
"Front": "表面カード",
"Back": "裏面カード"
},
"tags": [
"Your tag"
]
}
“deckName”: 作成ずみのデッキの名前を一言一句間違わずに入力してください。
“modelName”: 基本的にここは”Basic”で問題ないです。
“Front”: 表面のカードを登録してください
“Back”: 裏面のカードを登録してください
FrontとBackで改行したい場合は<br>と入力すると改行できます。
“tags”:本コードはコメントアウトしていますが、必要であれば解除して登録できます。
response = requests.post('http://127.0.0.1:8765', json.dumps({
'action': 'addNote',
'version': 6,
'params': {
'note': note
}
}))
このコードではAnkiConnectに対して、HTTP POSTリクエストを送信しています。AnkiConnectは、Ankiデスクトップアプリのローカルサーバーに接続して、指定されたアクションを実行します。json.dumps()関数は、PythonオブジェクトをJSON形式の文字列に変換します。
‘http://127.0.0.1’はループバックアドレスの一つであり、自分自身を指すIPアドレスです。ループバックアドレスにパケットを送信すると、それらのパケットはネットワークには送信されず、同じマシン内のIPスタックに直接送信されます。
8765はAnkiConnectが使用するポート番号です。
デフォルトのAnkiConnect設定を変更する場合は以下の手順で実行できます。
- Ankiデスクトップアプリを起動します。
- AnkiConnectプラグインの設定画面にアクセスします。設定画面にアクセスするには、Ankiデスクトップアプリの「ツール」メニューを選択し、「アドオン」を選択します。
- AnkiConnectプラグインを選択し、設定ボタン(Config)をクリックします。
- 設定画面で、デフォルトの設定を変更します。たとえば、ポート番号を変更する場合は、適切なフィールドに新しいポート番号を入力します。
- 変更を保存します。設定画面の下部にある「OK」ボタンをクリックして、変更を保存します。
コードの改変案
もちろん、今回のコードは、Ankiに単語を自動的に追加するためのサンプルコードに過ぎません。そのため、このコードを直接使用するだけではなく、ご自身のニーズに合わせてカスタマイズする必要があります。
例えば、私が使用している例ですと以下のようなアプリで自動化を実現しています。
- DiscordのChannelにメッセージを送る
- Discordのbotがメッセージを取り出してhttps://dictionary.cambridge.org/で単語を検索して意味と例文を保存
- Frontに単語、Backに意味と例文を挿入してAnkiに自動で登録する
上記のコードを実行する場合はHTMLの知識も必要になってくるのでより高度になるかと思います。
このようなプログラムは、サーバー上で24時間稼働する必要があるため、クラウドサービスの利用など、一定の費用がかかる場合があります。ただし、ラズパイなどの不要なPCを使用すれば、サーバーを自作することも可能です。
以下の記事で自動化した詳しい手順やコードが見れます。
これらの例はプログラミング完全素人の私が考えた案ですので、WEBアプリに落とし込んで販売したりカスタマイズ次第では色々なアプローチが出来ると思います。
「PythonでAnkiに単語を自動で追加するスクリプト AnkiConnectで開発」への1件のフィードバック