Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

THEGOLDENPRO/anmoku

Open more actions menu

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

140 Commits
140 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🌸 Anmoku 安黙

A peaceful and fully typed MyAnimeList / Jikan Python API wrapper with caching and proper rate limiting.

Pypi Version Python Versions Pypi Downloads


Note

Anmoku is currently a work in progress so the features below may not be complete yet or experimental.

Features ✨

  • Rate limiting 🎀 (with actual waiting).
  • Supports caching. ⚡
  • Fully type hinted. 🌌 yes you heard me correctly

Examples ⚗️

Anmoku is probably the simplest Jikan API wrapper you'll ever use. All you need is the client and the 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()

Merge that with gradio and you have a GUI.

import gradio # pip install gradio
from anmoku import Anime, Anmoku, RatelimitError
client = Anmoku(debug = True)
def search_anime(query: str):
anime_list = []
try:
anime_list = client.search(Anime, query)
except RatelimitError as e: # NOTE: This is here because rate limiting hasn't been implemented yet in this version.
raise gradio.Error(e.message)
return [(x.image.get_image(), str(x.name)) for x in anime_list]
demo = gradio.Interface(
search_anime,
inputs = "text",
outputs = gradio.Gallery(height = 600)
)
if __name__ == "__main__":
demo.launch(show_api = False)

gradio_gui.mp4

Type hinting support! 🌌

API responses in our library are strongly typed.

On top of that, we even provide class interfaces if you wish for stability and ease of use.


Python's future Jikan API wrapper.

Releases

Packages

Used by

Contributors

Languages

Morty Proxy This is a proxified and sanitized view of the page, visit original site.