This commit is contained in:
jxxghp
2025-01-27 11:09:05 +08:00
parent db684de6e9
commit 7d13e43c6f
9 changed files with 81 additions and 21 deletions
+17
View File
@@ -21,6 +21,23 @@ def calendar(page: int = 1,
return RecommendChain().bangumi_calendar(page=page, count=count) 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]) @router.get("/credits/{bangumiid}", summary="查询Bangumi演职员表", response_model=List[schemas.MediaPerson])
def bangumi_credits(bangumiid: int, def bangumi_credits(bangumiid: int,
page: int = 1, page: int = 1,
+8
View File
@@ -118,6 +118,8 @@ def tmdb_person_credits(person_id: int,
def tmdb_movies(sort_by: str = "popularity.desc", def tmdb_movies(sort_by: str = "popularity.desc",
with_genres: str = "", with_genres: str = "",
with_original_language: str = "", with_original_language: str = "",
vote_average: float = 0,
release_date: str = "",
page: int = 1, page: int = 1,
_: schemas.TokenPayload = Depends(verify_token)) -> Any: _: 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, return RecommendChain().tmdb_movies(sort_by=sort_by,
with_genres=with_genres, with_genres=with_genres,
with_original_language=with_original_language, with_original_language=with_original_language,
vote_average=vote_average,
release_date=release_date,
page=page) page=page)
@@ -133,6 +137,8 @@ def tmdb_movies(sort_by: str = "popularity.desc",
def tmdb_tvs(sort_by: str = "popularity.desc", def tmdb_tvs(sort_by: str = "popularity.desc",
with_genres: str = "", with_genres: str = "",
with_original_language: str = "", with_original_language: str = "",
vote_average: float = 0,
release_date: str = "",
page: int = 1, page: int = 1,
_: schemas.TokenPayload = Depends(verify_token)) -> Any: _: 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, return RecommendChain().tmdb_tvs(sort_by=sort_by,
with_genres=with_genres, with_genres=with_genres,
with_original_language=with_original_language, with_original_language=with_original_language,
vote_average=vote_average,
release_date=release_date,
page=page) page=page)
+6
View File
@@ -17,6 +17,12 @@ class BangumiChain(ChainBase, metaclass=Singleton):
""" """
return self.run_module("bangumi_calendar") 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]: def bangumi_info(self, bangumiid: int) -> Optional[dict]:
""" """
获取Bangumi信息 获取Bangumi信息
+2 -1
View File
@@ -158,7 +158,7 @@ class RecommendChain(ChainBase, metaclass=Singleton):
@log_execution_time(logger=logger) @log_execution_time(logger=logger)
@cached(ttl=recommend_ttl, region=recommend_cache_region) @cached(ttl=recommend_ttl, region=recommend_cache_region)
def tmdb_movies(self, sort_by: str = "popularity.desc", with_genres: str = "", 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热门电影 TMDB热门电影
""" """
@@ -166,6 +166,7 @@ class RecommendChain(ChainBase, metaclass=Singleton):
sort_by=sort_by, sort_by=sort_by,
with_genres=with_genres, with_genres=with_genres,
with_original_language=with_original_language, with_original_language=with_original_language,
vote_average=vote_average,
page=page) page=page)
return [movie.to_dict() for movie in movies] if movies else [] return [movie.to_dict() for movie in movies] if movies else []
+5 -1
View File
@@ -15,18 +15,22 @@ class TmdbChain(ChainBase, metaclass=Singleton):
""" """
def tmdb_discover(self, mtype: MediaType, sort_by: str, with_genres: str, 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 mtype: 媒体类型
:param sort_by: 排序方式 :param sort_by: 排序方式
:param with_genres: 类型 :param with_genres: 类型
:param with_original_language: 语言 :param with_original_language: 语言
:param vote_average: 评分
:param release_date: 上映日期
:param page: 页码 :param page: 页码
:return: 媒体信息列表 :return: 媒体信息列表
""" """
return self.run_module("tmdb_discover", mtype=mtype, return self.run_module("tmdb_discover", mtype=mtype,
sort_by=sort_by, with_genres=with_genres, sort_by=sort_by, with_genres=with_genres,
with_original_language=with_original_language, with_original_language=with_original_language,
vote_average=vote_average, release_date=release_date,
page=page) page=page)
def tmdb_trending(self, page: int = 1) -> Optional[List[MediaInfo]]: def tmdb_trending(self, page: int = 1) -> Optional[List[MediaInfo]]:
+9
View File
@@ -165,3 +165,12 @@ class BangumiModule(_ModuleBase):
if credits_info: if credits_info:
return [MediaInfo(bangumi_info=credit) for credit in credits_info] return [MediaInfo(bangumi_info=credit) for credit in credits_info]
return [] 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 []
+7
View File
@@ -13,6 +13,7 @@ class BangumiApi(object):
""" """
_urls = { _urls = {
"discover": "v0/subjects",
"search": "search/subjects/%s?type=2", "search": "search/subjects/%s?type=2",
"calendar": "calendar", "calendar": "calendar",
"detail": "v0/subjects/%s", "detail": "v0/subjects/%s",
@@ -194,3 +195,9 @@ class BangumiApi(object):
for item in result: for item in result:
ret_list.append(item) ret_list.append(item)
return ret_list return ret_list
def discover(self, **kwargs):
"""
发现
"""
return self.__invoke("discover", **kwargs)
+19 -9
View File
@@ -357,25 +357,35 @@ class TheMovieDbModule(_ModuleBase):
return self.scraper.get_metadata_img(mediainfo=mediainfo, season=season, episode=episode) 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, 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 mtype: 媒体类型
:param sort_by: 排序方式 :param sort_by: 排序方式
:param with_genres: 类型 :param with_genres: 类型
:param with_original_language: 语言 :param with_original_language: 语言
:param vote_average: 评分
:param release_date: 发布日期
:param page: 页码 :param page: 页码
:return: 媒体信息列表 :return: 媒体信息列表
""" """
if mtype == MediaType.MOVIE: if mtype == MediaType.MOVIE:
infos = self.tmdb.discover_movies(sort_by=sort_by, infos = self.tmdb.discover_movies({
with_genres=with_genres, "sort_by": sort_by,
with_original_language=with_original_language, "with_genres": with_genres,
page=page) "with_original_language": with_original_language,
"vote_average.gte": vote_average,
"release_date.gte": release_date,
"page": page
})
elif mtype == MediaType.TV: elif mtype == MediaType.TV:
infos = self.tmdb.discover_tvs(sort_by=sort_by, infos = self.tmdb.discover_tvs({
with_genres=with_genres, "sort_by": sort_by,
with_original_language=with_original_language, "with_genres": with_genres,
page=page) "with_original_language": with_original_language,
"vote_average.gte": vote_average,
"release_date.gte": release_date,
"page": page
})
else: else:
return [] return []
if infos: if infos:
+8 -10
View File
@@ -1080,18 +1080,17 @@ class TmdbApi:
logger.error(str(e)) logger.error(str(e))
return {} return {}
def discover_movies(self, **kwargs) -> List[dict]: def discover_movies(self, params: dict) -> List[dict]:
""" """
发现电影 发现电影
:param kwargs: :param params: 参数
:return: :return:
""" """
if not self.discover: if not self.discover:
return [] return []
try: try:
logger.debug(f"正在发现电影:{kwargs}...") logger.debug(f"正在发现电影:{params}...")
params_tuple = tuple(kwargs.items()) tmdbinfo = self.discover.discover_movies(tuple(params.items()))
tmdbinfo = self.discover.discover_movies(params_tuple)
if tmdbinfo: if tmdbinfo:
for info in tmdbinfo: for info in tmdbinfo:
info['media_type'] = MediaType.MOVIE info['media_type'] = MediaType.MOVIE
@@ -1100,18 +1099,17 @@ class TmdbApi:
logger.error(str(e)) logger.error(str(e))
return [] return []
def discover_tvs(self, **kwargs) -> List[dict]: def discover_tvs(self, params: dict) -> List[dict]:
""" """
发现电视剧 发现电视剧
:param kwargs: :param params: 参数
:return: :return:
""" """
if not self.discover: if not self.discover:
return [] return []
try: try:
logger.debug(f"正在发现电视剧:{kwargs}...") logger.debug(f"正在发现电视剧:{params}...")
params_tuple = tuple(kwargs.items()) tmdbinfo = self.discover.discover_tv_shows(tuple(params.items()))
tmdbinfo = self.discover.discover_tv_shows(params_tuple)
if tmdbinfo: if tmdbinfo:
for info in tmdbinfo: for info in tmdbinfo:
info['media_type'] = MediaType.TV info['media_type'] = MediaType.TV