From 7d13e43c6f00e46e6bc01708e0b7ba25300a2a55 Mon Sep 17 00:00:00 2001 From: jxxghp Date: Mon, 27 Jan 2025 11:09:05 +0800 Subject: [PATCH] fix apis --- app/api/endpoints/bangumi.py | 17 +++++++++++++++++ app/api/endpoints/tmdb.py | 8 ++++++++ app/chain/bangumi.py | 6 ++++++ app/chain/recommend.py | 3 ++- app/chain/tmdb.py | 6 +++++- app/modules/bangumi/__init__.py | 9 +++++++++ app/modules/bangumi/bangumi.py | 7 +++++++ app/modules/themoviedb/__init__.py | 28 +++++++++++++++++++--------- app/modules/themoviedb/tmdbapi.py | 18 ++++++++---------- 9 files changed, 81 insertions(+), 21 deletions(-) diff --git a/app/api/endpoints/bangumi.py b/app/api/endpoints/bangumi.py index f9ac4f46..08be6618 100644 --- a/app/api/endpoints/bangumi.py +++ b/app/api/endpoints/bangumi.py @@ -21,6 +21,23 @@ def calendar(page: int = 1, return RecommendChain().bangumi_calendar(page=page, count=count) +@router.get("/subjects", summary="搜索Bangumi", response_model=List[schemas.MediaInfo]) +def bangumi_subjects(type: int, + cat: int, + sort: str, + year: int, + page: int = 1, + count: int = 20, + _: schemas.TokenPayload = Depends(verify_token)) -> Any: + """ + 搜索Bangumi + """ + medias = BangumiChain().bangumi_discover(type=type, cat=cat, sort=sort, year=year) + if medias: + return [media.to_dict() for media in medias[(page - 1) * count: page * count]] + return [] + + @router.get("/credits/{bangumiid}", summary="查询Bangumi演职员表", response_model=List[schemas.MediaPerson]) def bangumi_credits(bangumiid: int, page: int = 1, diff --git a/app/api/endpoints/tmdb.py b/app/api/endpoints/tmdb.py index dc0bab4f..61c39ca3 100644 --- a/app/api/endpoints/tmdb.py +++ b/app/api/endpoints/tmdb.py @@ -118,6 +118,8 @@ def tmdb_person_credits(person_id: int, def tmdb_movies(sort_by: str = "popularity.desc", with_genres: str = "", with_original_language: str = "", + vote_average: float = 0, + release_date: str = "", page: int = 1, _: schemas.TokenPayload = Depends(verify_token)) -> Any: """ @@ -126,6 +128,8 @@ def tmdb_movies(sort_by: str = "popularity.desc", return RecommendChain().tmdb_movies(sort_by=sort_by, with_genres=with_genres, with_original_language=with_original_language, + vote_average=vote_average, + release_date=release_date, page=page) @@ -133,6 +137,8 @@ def tmdb_movies(sort_by: str = "popularity.desc", def tmdb_tvs(sort_by: str = "popularity.desc", with_genres: str = "", with_original_language: str = "", + vote_average: float = 0, + release_date: str = "", page: int = 1, _: schemas.TokenPayload = Depends(verify_token)) -> Any: """ @@ -141,6 +147,8 @@ def tmdb_tvs(sort_by: str = "popularity.desc", return RecommendChain().tmdb_tvs(sort_by=sort_by, with_genres=with_genres, with_original_language=with_original_language, + vote_average=vote_average, + release_date=release_date, page=page) diff --git a/app/chain/bangumi.py b/app/chain/bangumi.py index aaab0f8d..5fba9aa4 100644 --- a/app/chain/bangumi.py +++ b/app/chain/bangumi.py @@ -17,6 +17,12 @@ class BangumiChain(ChainBase, metaclass=Singleton): """ return self.run_module("bangumi_calendar") + def bangumi_discover(self, **kwargs) -> Optional[List[MediaInfo]]: + """ + 发现Bangumi番剧 + """ + return self.run_module("bangumi_discover", **kwargs) + def bangumi_info(self, bangumiid: int) -> Optional[dict]: """ 获取Bangumi信息 diff --git a/app/chain/recommend.py b/app/chain/recommend.py index e9ff4e54..a0b18a8c 100644 --- a/app/chain/recommend.py +++ b/app/chain/recommend.py @@ -158,7 +158,7 @@ class RecommendChain(ChainBase, metaclass=Singleton): @log_execution_time(logger=logger) @cached(ttl=recommend_ttl, region=recommend_cache_region) def tmdb_movies(self, sort_by: str = "popularity.desc", with_genres: str = "", - with_original_language: str = "", page: int = 1) -> Any: + with_original_language: str = "", vote_average: float = 0, page: int = 1) -> Any: """ TMDB热门电影 """ @@ -166,6 +166,7 @@ class RecommendChain(ChainBase, metaclass=Singleton): sort_by=sort_by, with_genres=with_genres, with_original_language=with_original_language, + vote_average=vote_average, page=page) return [movie.to_dict() for movie in movies] if movies else [] diff --git a/app/chain/tmdb.py b/app/chain/tmdb.py index bd84aa94..d6335322 100644 --- a/app/chain/tmdb.py +++ b/app/chain/tmdb.py @@ -15,18 +15,22 @@ class TmdbChain(ChainBase, metaclass=Singleton): """ def tmdb_discover(self, mtype: MediaType, sort_by: str, with_genres: str, - with_original_language: str, page: int = 1) -> Optional[List[MediaInfo]]: + with_original_language: str, vote_average: float, + release_date: str, page: int = 1) -> Optional[List[MediaInfo]]: """ :param mtype: 媒体类型 :param sort_by: 排序方式 :param with_genres: 类型 :param with_original_language: 语言 + :param vote_average: 评分 + :param release_date: 上映日期 :param page: 页码 :return: 媒体信息列表 """ return self.run_module("tmdb_discover", mtype=mtype, sort_by=sort_by, with_genres=with_genres, with_original_language=with_original_language, + vote_average=vote_average, release_date=release_date, page=page) def tmdb_trending(self, page: int = 1) -> Optional[List[MediaInfo]]: diff --git a/app/modules/bangumi/__init__.py b/app/modules/bangumi/__init__.py index 736d4a2d..c98896c8 100644 --- a/app/modules/bangumi/__init__.py +++ b/app/modules/bangumi/__init__.py @@ -165,3 +165,12 @@ class BangumiModule(_ModuleBase): if credits_info: return [MediaInfo(bangumi_info=credit) for credit in credits_info] return [] + + def bangumi_discover(self, **kwargs) -> Optional[List[MediaInfo]]: + """ + 发现Bangumi番剧 + """ + infos = self.bangumiapi.discover(**kwargs) + if infos: + return [MediaInfo(bangumi_info=info) for info in infos] + return [] diff --git a/app/modules/bangumi/bangumi.py b/app/modules/bangumi/bangumi.py index fc1db92b..a53953e5 100644 --- a/app/modules/bangumi/bangumi.py +++ b/app/modules/bangumi/bangumi.py @@ -13,6 +13,7 @@ class BangumiApi(object): """ _urls = { + "discover": "v0/subjects", "search": "search/subjects/%s?type=2", "calendar": "calendar", "detail": "v0/subjects/%s", @@ -194,3 +195,9 @@ class BangumiApi(object): for item in result: ret_list.append(item) return ret_list + + def discover(self, **kwargs): + """ + 发现 + """ + return self.__invoke("discover", **kwargs) diff --git a/app/modules/themoviedb/__init__.py b/app/modules/themoviedb/__init__.py index 130b4f37..a8b63dd9 100644 --- a/app/modules/themoviedb/__init__.py +++ b/app/modules/themoviedb/__init__.py @@ -357,25 +357,35 @@ class TheMovieDbModule(_ModuleBase): return self.scraper.get_metadata_img(mediainfo=mediainfo, season=season, episode=episode) def tmdb_discover(self, mtype: MediaType, sort_by: str, with_genres: str, with_original_language: str, - page: int = 1) -> Optional[List[MediaInfo]]: + vote_average: float, release_date: str, page: int = 1) -> Optional[List[MediaInfo]]: """ :param mtype: 媒体类型 :param sort_by: 排序方式 :param with_genres: 类型 :param with_original_language: 语言 + :param vote_average: 评分 + :param release_date: 发布日期 :param page: 页码 :return: 媒体信息列表 """ if mtype == MediaType.MOVIE: - infos = self.tmdb.discover_movies(sort_by=sort_by, - with_genres=with_genres, - with_original_language=with_original_language, - page=page) + infos = self.tmdb.discover_movies({ + "sort_by": sort_by, + "with_genres": with_genres, + "with_original_language": with_original_language, + "vote_average.gte": vote_average, + "release_date.gte": release_date, + "page": page + }) elif mtype == MediaType.TV: - infos = self.tmdb.discover_tvs(sort_by=sort_by, - with_genres=with_genres, - with_original_language=with_original_language, - page=page) + infos = self.tmdb.discover_tvs({ + "sort_by": sort_by, + "with_genres": with_genres, + "with_original_language": with_original_language, + "vote_average.gte": vote_average, + "release_date.gte": release_date, + "page": page + }) else: return [] if infos: diff --git a/app/modules/themoviedb/tmdbapi.py b/app/modules/themoviedb/tmdbapi.py index 2c8c4c86..bfcb9f5e 100644 --- a/app/modules/themoviedb/tmdbapi.py +++ b/app/modules/themoviedb/tmdbapi.py @@ -1080,18 +1080,17 @@ class TmdbApi: logger.error(str(e)) return {} - def discover_movies(self, **kwargs) -> List[dict]: + def discover_movies(self, params: dict) -> List[dict]: """ 发现电影 - :param kwargs: + :param params: 参数 :return: """ if not self.discover: return [] try: - logger.debug(f"正在发现电影:{kwargs}...") - params_tuple = tuple(kwargs.items()) - tmdbinfo = self.discover.discover_movies(params_tuple) + logger.debug(f"正在发现电影:{params}...") + tmdbinfo = self.discover.discover_movies(tuple(params.items())) if tmdbinfo: for info in tmdbinfo: info['media_type'] = MediaType.MOVIE @@ -1100,18 +1099,17 @@ class TmdbApi: logger.error(str(e)) return [] - def discover_tvs(self, **kwargs) -> List[dict]: + def discover_tvs(self, params: dict) -> List[dict]: """ 发现电视剧 - :param kwargs: + :param params: 参数 :return: """ if not self.discover: return [] try: - logger.debug(f"正在发现电视剧:{kwargs}...") - params_tuple = tuple(kwargs.items()) - tmdbinfo = self.discover.discover_tv_shows(params_tuple) + logger.debug(f"正在发现电视剧:{params}...") + tmdbinfo = self.discover.discover_tv_shows(tuple(params.items())) if tmdbinfo: for info in tmdbinfo: info['media_type'] = MediaType.TV