A peaceful and fully typed MAL / Jikan Python API wrapper with caching and proper rate limiting.
Examples ⚗️¶
Anmoku is probably the simplest Jikan API wrapper you’ll ever use. All you need is a client and a resource. 🌊
from anmoku import Anmoku, AnimeCharacters
client = Anmoku(debug = True)
anime_characters = client.get(AnimeCharacters, id = 28851) # ID for the anime film "A Silent Voice".
for character in anime_characters:
print(f"{character.name} ({character.url})")
client.close()
We also have an async client:
import asyncio
from anmoku import AsyncAnmoku, AnimeCharacters
async def main():
client = AsyncAnmoku(debug = True)
anime_characters = await client.get(AnimeCharacters, id = 28851) # ID for the anime film "A Silent Voice".
for character in anime_characters:
print(f"{character.name} ({character.url})")
await client.close()
asyncio.run(main())
Output:
[DEBUG] (anmoku) - [AsyncAnmoku] GET --> https://api.jikan.moe/v4/anime/28851/characters
Ishida, Shouya (https://myanimelist.net/character/80491/Shouya_Ishida)
Nishimiya, Shouko (https://myanimelist.net/character/80243/Shouko_Nishimiya)
Headteacher (https://myanimelist.net/character/214351/Headteacher)
Hirose, Keisuke (https://myanimelist.net/character/97569/Keisuke_Hirose)
Ishida, Maria (https://myanimelist.net/character/97943/Maria_Ishida)
Ishida, Sister (https://myanimelist.net/character/118723/Sister_Ishida)
# ... more characters below but I cut them off for the convenience of this readme
Searching! 🤩¶
Here are some searching examples you can try:
from anmoku import Anmoku, Character
client = Anmoku(debug = True)
characters = client.search(Character, "anya forger")
for character in characters:
print(f"{character.name} ({character.image.url})")
client.close()
Errors¶
- exception anmoku.errors.HTTPError(resp: ErrorResponseDict)[source]¶
Bases:
AnmokuException
- message: str¶
- report_url: str | None¶
- status: int¶
- type: str¶