Examples
Note
These examples use pyanilist.AniList
but you can do the same thing with pyanilist.AsyncAniList
since they share the same methods
AniList ID
from pyanilist import AniList
media = AniList().get(id=16498)
print(media.title.english)
#> Attack on Titan
Search
from pyanilist import AniList
media = AniList().get("Attack on titan")
print(media.format)
#> TV
print(media.title.romaji)
#> Shingeki no Kyojin
print(media.episodes)
#> 25
Search with constraints
from pyanilist import AniList, MediaSeason, MediaType, MediaStatus, MediaFormat
media = AniList().get(
"My Hero Academia",
season=MediaSeason.SPRING,
season_year=2016,
type=MediaType.ANIME,
format=MediaFormat.TV,
status=MediaStatus.FINISHED,
)
print(media.title.romaji)
#> Boku no Hero Academia
print(media.start_date.iso_format())
#> 2016-04-03
print(media.site_url)
#> https://anilist.co/anime/21459
Related media
from pyanilist import AniList
media = AniList().get("violet evergarden")
print(media.format)
#> TV
for relation in media.relations:
print(f"{relation.title.romaji} ({relation.format}) - {relation.site_url}")
#> Violet Evergarden: Kitto "Ai" wo Shiru Hi ga Kuru no Darou (OVA) - https://anilist.co/anime/101432
#> Violet Evergarden (NOVEL) - https://anilist.co/manga/97298
#> Violet Evergarden Gaiden: Eien to Jidou Shuki Ningyou (MOVIE) - https://anilist.co/anime/109190
#> Violet Evergarden CM (ONA) - https://anilist.co/anime/154164
Characters
from pyanilist import AniList, CharacterRole
media = AniList().get(id=20954)
all_characters = [character.name.full for character in media.characters]
# Filter main characters
main_characters = [character.name.full for character in media.characters if character.role is CharacterRole.MAIN]
print(all_characters)
#> ['Shouya Ishida', 'Shouko Nishimiya', 'Yuzuru Nishimiya', 'Naoka Ueno', 'Miyako Ishida', 'Maria Ishida', 'Miki Kawai', 'Satoshi Mashiba', 'Tomohiro Nagatsuka', 'Yaeko Nishimiya', 'Ito Nishimiya', 'Miyoko Sahara', 'Kazuki Shimada', 'Takeuchi', 'Pedro', 'Keisuke Hirose', 'Ishida no Ane', 'Kita']
print(main_characters)
#> ['Shouya Ishida', 'Shouko Nishimiya']
Retries
AniList API is flaky, sometimes it might return an error for a perfectly valid request. pyanilist
handles this by simply retrying failed requests a specified number of times (default is 5) before raising an error.
from pyanilist import AniList
# Configure the number of retries. Setting it to 1 disables retrying.
anilist = AniList(retries=1)
media = anilist.get("violet evergarden")
print(f"{media.title.english} - {media.site_url}")
#> Violet Evergarden - https://anilist.co/anime/21827
Client
pyanilist
lets you pass keyword arguments to the internal httpx.Client
used to send the POST request.