From 0fd69d03dd807ae04b84dcfbd51438c8fb87672d Mon Sep 17 00:00:00 2001 From: Benexl Date: Thu, 24 Jul 2025 02:47:49 +0300 Subject: [PATCH] feat: relations recommendation stubs --- fastanime/libs/api/anilist/api.py | 36 +++++++++++++++++-- .../api/anilist/queries/media-relations.gql | 1 + .../libs/api/anilist/queries/recommended.gql | 12 +++---- fastanime/libs/api/params.py | 24 +++++++++++++ 4 files changed, 62 insertions(+), 11 deletions(-) diff --git a/fastanime/libs/api/anilist/api.py b/fastanime/libs/api/anilist/api.py index 663ce66..e1d09f1 100644 --- a/fastanime/libs/api/anilist/api.py +++ b/fastanime/libs/api/anilist/api.py @@ -1,6 +1,6 @@ import logging from enum import Enum -from typing import List, Optional +from typing import Optional from httpx import Client @@ -8,8 +8,12 @@ from ....core.config import AnilistConfig from ....core.utils.graphql import ( execute_graphql, ) -from ..base import ( - BaseApiClient, +from ..base import BaseApiClient +from ..params import ( + MediaAiringScheduleParams, + MediaCharactersParams, + MediaRecommendationParams, + MediaRelationsParams, MediaSearchParams, UpdateUserMediaListEntryParams, UserMediaListSearchParams, @@ -204,6 +208,32 @@ class AniListApi(BaseApiClient): else False ) + def get_recommendation_for(self, params: MediaRecommendationParams): + variables = {"mediaRecommendationId": params.id, "page": params.page} + response = execute_graphql( + ANILIST_ENDPOINT, self.http_client, gql.GET_RECOMMENDATIONS, variables + ) + return response + + def get_characters_of(self, params: MediaCharactersParams): + variables = {"id": params.id} + response = execute_graphql( + ANILIST_ENDPOINT, self.http_client, gql.GET_CHARACTERS, variables + ) + return response + + def get_related_anime_for(self, params: MediaRelationsParams): + variables = {"id": params.id} + response = execute_graphql( + ANILIST_ENDPOINT, self.http_client, gql.GET_MEDIA_RELATIONS, variables + ) + + def get_airing_schedule_for(self, params: MediaAiringScheduleParams): + variables = {"id": params.id} + response = execute_graphql( + ANILIST_ENDPOINT, self.http_client, gql.GET_AIRING_SCHEDULE, variables + ) + if __name__ == "__main__": from httpx import Client diff --git a/fastanime/libs/api/anilist/queries/media-relations.gql b/fastanime/libs/api/anilist/queries/media-relations.gql index 1f9ab86..9e9d6e0 100644 --- a/fastanime/libs/api/anilist/queries/media-relations.gql +++ b/fastanime/libs/api/anilist/queries/media-relations.gql @@ -21,6 +21,7 @@ query ($id: Int) { } description episodes + duration trailer { site id diff --git a/fastanime/libs/api/anilist/queries/recommended.gql b/fastanime/libs/api/anilist/queries/recommended.gql index 92a00e8..7c71ef5 100644 --- a/fastanime/libs/api/anilist/queries/recommended.gql +++ b/fastanime/libs/api/anilist/queries/recommended.gql @@ -1,6 +1,6 @@ -query ($mediaRecommendationId: Int, $page: Int) { - Page(perPage: 50, page: $page) { - recommendations(mediaRecommendationId: $mediaRecommendationId) { +query ($id: Int, $page: Int,$per_page:Int) { + Page(perPage: $per_page, page: $page) { + recommendations(mediaRecommendationId: $id) { media { id idMal @@ -18,13 +18,9 @@ query ($mediaRecommendationId: Int, $page: Int) { medium large } - mediaListEntry { - status - id - progress - } description episodes + duration # Added duration here trailer { site id diff --git a/fastanime/libs/api/params.py b/fastanime/libs/api/params.py index dfb64c0..4931feb 100644 --- a/fastanime/libs/api/params.py +++ b/fastanime/libs/api/params.py @@ -81,3 +81,27 @@ class UpdateUserMediaListEntryParams: status: Optional[UserMediaListStatus] = None progress: Optional[str] = None score: Optional[float] = None + + +@dataclass(frozen=True) +class MediaRecommendationParams: + id: int + page: Optional[int] = 1 + per_page: Optional[int] = None + + +@dataclass(frozen=True) +class MediaCharactersParams: + id: int + + +@dataclass(frozen=True) +class MediaRelationsParams: + id: int + # page: Optional[int] = 1 + # per_page: Optional[int] = None + + +@dataclass(frozen=True) +class MediaAiringScheduleParams: + id: int