Home

Awesome

AnkiTools

Build Status PyPI version shields.io PyPI license PyPI pyversions

Please my new project, ankisync, which will be active instead of this one.

An Anki *.apkg and collection.anki2 reader and editor to work with in Python. Also included a module on AnkiConnect.

I also created a new sync system called AnkiDirect.

The *.apkg format specification can be viewed from Anki decks collaboration Wiki and AnkiDroid. In my AnkiDirect, I tried to comply with the format specification as much as possible.

Installation

pip install AnkiTools

Featured modules

Anki file conversion

>>> from AnkiTools import anki_convert
>>> anki_convert('Chinese.apkg', out_file='Chinese_anki.xlsx')
>>> anki_convert('my_workbook.xlsx', out_format='.apkg')

The supported formats are .xlsx, .apkg and .anki2.

AnkiDirect API

You can directly edit the Anki app data in user's Application Data path.

from AnkiTools import AnkiDirect
import json

with open('payload.json') as f:
    payload = json.load(f)
with AnkiDirect() as api
    api.add(payload)

Some supported payloads include:

{
  "data": {
    "note_type A": [
      {
        "data": {
          "header A": "a",
          "header B": "b"
        },
        "decks": {
          "Forward": "Test Deck::Forward",
          "Backward": "Test Deck::Backward"
        }
      }
    ]
  },
  "definitions": {
    "note_type A": {
      "templates": [
        {
          "name": "Forward",
          "data": {
            "qfmt": "{{header A}}",
            "afmt": "{{FrontSide}}\r\n\r\n<hr id=answer>\r\n\r\n{{header B}}"
          }
        },
        {
          "name": "Backward",
          "data": {
            "qfmt": "{{header B}}",
            "afmt": "{{FrontSide}}\r\n\r\n<hr id=answer>\r\n\r\n{{header A}}"
          }
        }
      ],
      "css": ".card {\r\n font-family: arial;\r\n font-size: 20px;\r\n text-align: center;\r\n color: black;\r\n background-color: white;\r\n}\r\n"
    }
  }
}

AnkiConnect

>>> from AnkiTools import AnkiConnect
>>> AnkiConnect.is_online()
True
>>> params = {'actions': [{'action': 'deckNames'}, {'action': 'browse', 'params': {'query': 'deck:current'}}]}
>>> AnkiConnect.post('multi', params=params)
{'result': [['Default', 'SpoonFed', 'Chinese Hanzi Freq', 'Chinese Vocab'], None], 'error': None}

The actual addable actions and parameters can be viewed from AnkiConnect.

Plans

Contributions