diff --git a/app/api/endpoints/tmdb.py b/app/api/endpoints/tmdb.py index 48a0f55e..3212fff2 100644 --- a/app/api/endpoints/tmdb.py +++ b/app/api/endpoints/tmdb.py @@ -67,15 +67,16 @@ def tmdb_recommend(tmdbid: int, @router.get("/credits/{tmdbid}/{type_name}", summary="演员阵容", response_model=List[schemas.TmdbPerson]) def tmdb_credits(tmdbid: int, type_name: str, + page: int = 1, _: schemas.TokenPayload = Depends(verify_token)) -> Any: """ 根据TMDBID查询演员阵容,type_name: 电影/电视剧 """ mediatype = MediaType(type_name) if mediatype == MediaType.MOVIE: - tmdbinfos = TmdbChain().movie_credits(tmdbid=tmdbid) + tmdbinfos = TmdbChain().movie_credits(tmdbid=tmdbid, page=page) elif mediatype == MediaType.TV: - tmdbinfos = TmdbChain().tv_credits(tmdbid=tmdbid) + tmdbinfos = TmdbChain().tv_credits(tmdbid=tmdbid, page=page) else: return [] if not tmdbinfos: diff --git a/app/chain/tmdb.py b/app/chain/tmdb.py index 9b53d42b..2fe32982 100644 --- a/app/chain/tmdb.py +++ b/app/chain/tmdb.py @@ -76,19 +76,21 @@ class TmdbChain(ChainBase): """ return self.run_module("tv_recommend", tmdbid=tmdbid) - def movie_credits(self, tmdbid: int) -> List[dict]: + def movie_credits(self, tmdbid: int, page: int = 1) -> List[dict]: """ 根据TMDBID查询电影演职人员 :param tmdbid: TMDBID + :param page: 页码 """ - return self.run_module("movie_credits", tmdbid=tmdbid) + return self.run_module("movie_credits", tmdbid=tmdbid, page=page) - def tv_credits(self, tmdbid: int) -> List[dict]: + def tv_credits(self, tmdbid: int, page: int = 1) -> List[dict]: """ 根据TMDBID查询电视剧演职人员 :param tmdbid: TMDBID + :param page: 页码 """ - return self.run_module("tv_credits", tmdbid=tmdbid) + return self.run_module("tv_credits", tmdbid=tmdbid, page=page) def person_detail(self, person_id: int) -> dict: """ diff --git a/app/modules/themoviedb/__init__.py b/app/modules/themoviedb/__init__.py index 3e301d2e..3329a6a4 100644 --- a/app/modules/themoviedb/__init__.py +++ b/app/modules/themoviedb/__init__.py @@ -359,19 +359,21 @@ class TheMovieDbModule(_ModuleBase): """ return self.tmdb.get_tv_recommend(tmdbid=tmdbid) - def movie_credits(self, tmdbid: int) -> List[dict]: + def movie_credits(self, tmdbid: int, page: int = 1) -> List[dict]: """ 根据TMDBID查询电影演职员表 :param tmdbid: TMDBID + :param page: 页码 """ - return self.tmdb.get_movie_credits(tmdbid=tmdbid) + return self.tmdb.get_movie_credits(tmdbid=tmdbid, page=page) - def tv_credits(self, tmdbid: int) -> List[dict]: + def tv_credits(self, tmdbid: int, page: int = 1) -> List[dict]: """ 根据TMDBID查询电视剧演职员表 :param tmdbid: TMDBID + :param page: 页码 """ - return self.tmdb.get_tv_credits(tmdbid=tmdbid) + return self.tmdb.get_tv_credits(tmdbid=tmdbid, page=page) def person_detail(self, person_id: int) -> dict: """ diff --git a/app/modules/themoviedb/tmdbapi.py b/app/modules/themoviedb/tmdbapi.py index 3d490ec0..bbec9172 100644 --- a/app/modules/themoviedb/tmdbapi.py +++ b/app/modules/themoviedb/tmdbapi.py @@ -1094,30 +1094,36 @@ class TmdbHelper: print(str(e)) return [] - def get_movie_credits(self, tmdbid: int) -> List[dict]: + def get_movie_credits(self, tmdbid: int, page: int = 1, count: int = 24) -> List[dict]: """ 获取电影的演职员列表 """ if not self.movie: return [] try: - logger.info(f"正在获取电影演职员:{tmdbid}...") + logger.info(f"正在获取电影演职人员:{tmdbid}...") info = self.movie.credits(movie_id=tmdbid) or {} - return info.get('cast') or [] + cast = info.get('cast') or [] + if cast: + return [c.to_dict() for c in cast][(page - 1) * count: page * count] + return [] except Exception as e: print(str(e)) return [] - def get_tv_credits(self, tmdbid: int) -> List[dict]: + def get_tv_credits(self, tmdbid: int, page: int = 1, count: int = 24) -> List[dict]: """ 获取电视剧的演职员列表 """ if not self.tv: return [] try: - logger.info(f"正在获取电视剧演职员:{tmdbid}...") + logger.info(f"正在获取电视剧演职人员:{tmdbid}...") info = self.tv.credits(tv_id=tmdbid) or {} - return info.get('cast') or [] + cast = info.get('cast') or [] + if cast: + return [c.to_dict() for c in cast][(page - 1) * count: page * count] + return [] except Exception as e: print(str(e)) return [] diff --git a/app/modules/themoviedb/tmdbv3api/tmdb.py b/app/modules/themoviedb/tmdbv3api/tmdb.py index dd46cb3c..6a8cacfb 100644 --- a/app/modules/themoviedb/tmdbv3api/tmdb.py +++ b/app/modules/themoviedb/tmdbv3api/tmdb.py @@ -29,7 +29,7 @@ class TMDb(object): def __init__(self, obj_cached=True, session=None): if self.__class__._session is None or session is not None: self.__class__._session = requests.Session() if session is None else session - self._base = "https://api.themoviedb.org/3" + self.domain = "api.themoviedb.org" self._remaining = 40 self._reset = None self.obj_cached = obj_cached @@ -143,8 +143,8 @@ class TMDb(object): if self.api_key is None or self.api_key == "": raise TMDbException("No API key found.") - url = "%s%s?api_key=%s&%s&language=%s" % ( - self._base, + url = "https://%s/3%s?api_key=%s&%s&language=%s" % ( + self.domain, action, self.api_key, params,