A third party object-oriented python3 client library for MyAnimeList's official REST API. Originally created by @JFryy, dropped around 2 years ago, picked up and rewritten by ModerNews to fit more modern standards and new REST API functions.
Unsure what to do? Check out our documentation
Python 3.9 or newer required, this is due to changes in type hinting guidelines, for more info regarding this issue read PEP 585
Install the latest stable version from PyPI
pip install malclient-upgraded
Or current unstable version directly from GitHub:
pip install git+https://github.com/ModerNews/MAL-API-Client-Upgraded
Client library uses OAuth2 authorization, all you need to do is register your app here. Main auth requires access token:
import malclient
malclient.client(access_token=token)
Alternatively can authenticate using your client ID
import malclient
malclient.client(client_id=id)
You can generate token old-fashioned way using this tutorial
Or you can use function implemented in API
import malclient
print(malclient.generate_token("<YOUR_CLIENT_ID>", "<YOUR_CLIENT_SECRET>"))
Although remember to call it only once and, then use the token generated this way, optionally with Client.refresh_bearer_token
method
As mentioned previously, if you're scared that your token will time out you can also utilize Client.refresh_bearer_token
function
client.refresh_bearer_token(
client_id="<your-client-id>",
client_secret="<your-client-secret>",
refresh_token="<your-refresh-token>")
For any other issues regarding authentication, please refer to the following guide.
I contained some examples of usage of this wrapper, note that all responses are converted to python objects using pydantic
import malclient
# nsfw filter is enabled by default, although it's recommended to disable it if your results are missing titles,
# you can also enable/disable it for every query individually
client = malclient.Client(access_token="<your-access-token>", nsfw=True)
# search anime, returns list
anime = client.search_anime("cowboy", limit=20)
for item in anime:
# prints only titles
print(item)
# prints all attributes of object
print(repr(item))
# search anime, returns list
manga = client.search_manga("Monogatari", limit=20)
for item in manga:
# prints only titles
print(manga)
# prints all attributes of object
print(repr(manga))
# Get individual anime by ID
anime = client.get_anime_details(1)
print(anime)
print(repr(anime))
# Update anime List based off of search results
anime = client.search_anime("Monogatari", limit=1)
If anything bugs you, you can always reach me out at discord Gruzin#0911 as well