Usage

Getting a client

>>> import wanikani_api.client as client
>>> wk_api = client.Client("enter your V2 API key here")

User Information

>>> import wanikani_api.client as client
>>> wk_api = client.Client("enter your V2 API key here")
>>> user_info = wk_api.user_information()
>>> user.username
"Tadgh"

Subjects

This is how to retrieve all Subjects in Wanikani. Subjects are either models.Kanji, models.Radical, or models.Vocabulary.

>>> vocabulary = wk_api.subjects(types="vocabulary")
>>> for vocab in vocabulary:
>>>    print(vocab.readings[0].reading)
"いち"
"ひとつ"
"なな"
"ななつ"
"きゅう"
"ここのつ"
...
>>> print(len(vocabulary))
1000

Note that by default the client will only retrieve the first Page of results. This can be changed by passing fetch_all=True to any client function which returns multiple results. Like so:

>>> vocabulary = wk_api.subjects(types="vocabulary", fetch_all=True)
>>> print(len(vocabulary))
6301

Alternatively, if you decide afterwards you’d like to fill in the missing data, you can do this:

>>> vocabulary = wk_api.subjects(types="vocabulary")
>>> print(len(vocabulary))
1000
>>> vocabulary.fetch_all_pages()
>>> print(len(vocabulary))
6301

You are also free to fetch one page at a time. Note also that you can access indiviual models.Page objects if you like.

>>> vocabulary = wk_api.subjects(types="vocabulary")
>>> print(len(vocabulary))
1000
>>> vocabulary.fetch_next_page()
>>> print(len(vocabulary))
2000
>>> print(len(vocabulary.pages))
2
# Iterate only over elements in the second page:
>>> for vocab in vocabulary.pages[1]:
>>>     print(vocab.parts_of_speech)
['noun', 'suru_verb']
['noun']
['intransitive_verb', 'godan_verb']

This works for any client function that is plural, e.g. assignments(), subjects(), reviews(), etc.

By default, the Wanikani API returns only subject IDs when referring to a subject. Therefore, for any resource which contains a field subject_id or subject_ids can make use of convenient properties subject and subjects, respectively. This allows you to quickly grab related subjects without making a separate explicit call to the subjects endpoint. See below.

Assignments

>>> assignments = wk_api.assignments(subject_types="vocabulary")
>>> for assignment in assignments:
>>>    print(assignment.srs_stage)
>>>    print(assignment.subject.meaning) # The client will automatically go and fetch this subject for you.
9
"One"
9
"One Thing"

Note that the above will make a new API call every time you call subject on a new assignment.

Review Statistics

Here’s how to get your review statistics for your level 30 vocabulary and kanji (but not radicals), that you have gotten correct at most 50%

>>> subjects = wk_api.subjects(types=["vocabulary", "kanji"], level=30)
>>> stats = wk_api.review_statistics(subject_ids=[subject.id for subject in subjects], percentages_less_than=50)
>>> for stat in stats:
>>>     print(stat.percentage_correct)
44
42
49
31

Study Materials

Here’s how to get all study materials for any vocabulary that have the slug 毛糸. The slug is a simple identifier on the wanikani site (like this: https://www.wanikani.com/vocabulary/毛糸)

>>> subjects = wk_api.subjects(slugs="毛糸", types="vocabulary")
>>> study_mats = wk_api.study_materials(subject_ids=[subject.id for subject in subjects])
>>> for study_material in study_mats:
>>> print (", ".join(study_material.meaning_synonyms)
"wool,yarn"