feat: relations recommendation stubs

This commit is contained in:
Benexl
2025-07-24 02:47:49 +03:00
parent 3a9be3f699
commit 0fd69d03dd
4 changed files with 62 additions and 11 deletions

View File

@@ -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

View File

@@ -21,6 +21,7 @@ query ($id: Int) {
}
description
episodes
duration
trailer {
site
id

View File

@@ -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

View File

@@ -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