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(16498)
print(media.title.english)
"""
Attack on Titan
"""
Search
from pyanilist import AniList
media = AniList().search("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().search(
"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().search("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(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. Every subsequent retry also adds an additional one-second delay between requests.
from pyanilist import AniList
# Configure the number of retries. Setting it to 1 disables retrying.
anilist = AniList(retries=1)
media = anilist.search("violet evergarden")
print(f"{media.title.english} - {media.site_url}")
"""
Violet Evergarden - https://anilist.co/anime/21827
"""
Client
pyanilist
gives you direct access to the internal httpx.Client()
used to send the POST request.