Source code for Pymoe.anime.search.kitsu

from datetime import date
from http import server
import ujson
import requests
from ....errors import methodNotSupported, serverError, serializationFailed
from ....helpers import kitsuWrapper, whatSeason
from ...get.kitsu import show

settings = {
    'header': {
        'Content-Type': 'application/vnd.api+json',
        'User-Agent': 'Pymoe (github.com/ccubed/PyMoe)',
        'Accept': 'application/vnd.api+json'
    },
    'apiurl': 'https://kitsu.io/api/edge'
}

[docs]def characters(term : str): """ Search for characters that match the term in the Kitsu API. :param term: Search Term """ r = requests.get( settings['apiurl'] + "/characters", params = { 'filter[name]': term }, headers = settings['header'] ) if r.status_code != 200: raise serverError(r.text, r.status_code) try: jsd = ujson.loads(r.text) except ValueError: raise serializationFailed(r.text, r.status_code) else: if jsd['meta']['count']: return kitsuWrapper( jsd['data'], jsd['links']['next'] if 'next' in jsd['links'] else None, settings['header'] ) else: return jsd
[docs]def shows(term: str): """ Search for shows that match the term in the Kitsu API. :param term: Search Term """ r = requests.get( settings['apiurl'] + "/anime", params={ 'filter[text]': term }, headers = settings['header'] ) if r.status_code != 200: raise serverError(r.text, r.status_code) try: jsd = ujson.loads(r.text) except ValueError: raise serializationFailed(r.text, r.status_code) else: if jsd['meta']['count']: return kitsuWrapper( jsd['data'], jsd['links']['next'] if 'next' in jsd['links'] else None, settings['header'] ) else: return jsd
[docs]def staff(term : str): """ Kitsu doesn't support text filtering on the anime-staff endpoint. Method not supported. """ raise methodNotSupported("pymoe.anime.search.kitsu.staff", "kitsu")
[docs]def studios(term : str): """ Kitsu doesn't support text filtering on the anime-producers endpoint. Method not supported. """ raise methodNotSupported("pymoe.anime.search.kitsu.studios", "kitsu")
[docs]def season(season : str = None, seasonYear : int = date.today().year): """ Given a season and a year, return a list of shows airing in that season and year. This can also pull historical and future data. (Though not too far in the future) :param season: Which Season? See pymoe.helpers for a list of seasons. :param seasonYear: What year? """ myseason = season if season else whatSeason(date.today().month) r = requests.get( settings['apiurl'] + "/anime", params = { "filter[season]": myseason, "filter[seasonYear]": seasonYear }, headers = settings['header'] ) if r.status_code != 200: raise serverError(r.text, r.status_code) try: jsd = ujson.loads(r.text) except ValueError: raise serializationFailed(r.text, r.status_code) else: if jsd['meta']['count']: return kitsuWrapper( jsd['data'], jsd['links']['next'] if 'next' in jsd['links'] else None, settings['header'] ) else: return jsd
[docs]def streaming(item_id : int): """ Given a media ID, return all streaming links related to that media. Unlike anilist, this returns one link per streaming service. :param term: Search Term """ data = show(item_id) r = requests.get( data['data']['relationships']['streamingLinks']['links']['related'], headers = settings['header'] ) if r.status_code != 200: raise serverError(r.text, r.status_code) try: jsd = ujson.loads(r.text) except ValueError: raise serializationFailed(r.text, r.status_code) else: if jsd['meta']['count']: return kitsuWrapper( jsd['data'], jsd['links']['next'] if 'next' in jsd['links'] else None, settings['header'] ) else: return jsd