diff --git a/app/api/endpoints/douban.py b/app/api/endpoints/douban.py index a7974b58..48931f6d 100644 --- a/app/api/endpoints/douban.py +++ b/app/api/endpoints/douban.py @@ -127,6 +127,28 @@ def tv_animation(page: int = 1, return [MediaInfo(douban_info=tv).to_dict() for tv in tvs] +@router.get("/movie_hot", summary="豆瓣热门电影", response_model=List[schemas.MediaInfo]) +def movie_hot(page: int = 1, + count: int = 30, + _: schemas.TokenPayload = Depends(verify_token)) -> Any: + """ + 热门电影 + """ + movies = DoubanChain().movie_hot(page=page, count=count) + return [MediaInfo(douban_info=movie).to_dict() for movie in movies] + + +@router.get("/tv_hot", summary="豆瓣热门电视剧", response_model=List[schemas.MediaInfo]) +def tv_hot(page: int = 1, + count: int = 30, + _: schemas.TokenPayload = Depends(verify_token)) -> Any: + """ + 热门电视剧 + """ + tvs = DoubanChain().tv_hot(page=page, count=count) + return [MediaInfo(douban_info=tv).to_dict() for tv in tvs] + + @router.get("/{doubanid}", summary="查询豆瓣详情", response_model=schemas.MediaInfo) def douban_info(doubanid: str, _: schemas.TokenPayload = Depends(verify_token)) -> Any: diff --git a/app/chain/douban.py b/app/chain/douban.py index 77102b1c..f2e49832 100644 --- a/app/chain/douban.py +++ b/app/chain/douban.py @@ -1,6 +1,7 @@ from typing import Optional, List from app.chain import ChainBase +from app.core.config import settings from app.schemas import MediaType from app.utils.singleton import Singleton @@ -10,7 +11,7 @@ class DoubanChain(ChainBase, metaclass=Singleton): 豆瓣处理链,单例运行 """ - def movie_top250(self, page: int = 1, count: int = 30) -> List[dict]: + def movie_top250(self, page: int = 1, count: int = 30) -> Optional[List[dict]]: """ 获取豆瓣电影TOP250 :param page: 页码 @@ -18,19 +19,19 @@ class DoubanChain(ChainBase, metaclass=Singleton): """ return self.run_module("movie_top250", page=page, count=count) - def movie_showing(self, page: int = 1, count: int = 30) -> List[dict]: + def movie_showing(self, page: int = 1, count: int = 30) -> Optional[List[dict]]: """ 获取正在上映的电影 """ return self.run_module("movie_showing", page=page, count=count) - def tv_weekly_chinese(self, page: int = 1, count: int = 30) -> List[dict]: + def tv_weekly_chinese(self, page: int = 1, count: int = 30) -> Optional[List[dict]]: """ 获取本周中国剧集榜 """ return self.run_module("tv_weekly_chinese", page=page, count=count) - def tv_weekly_global(self, page: int = 1, count: int = 30) -> List[dict]: + def tv_weekly_global(self, page: int = 1, count: int = 30) -> Optional[List[dict]]: """ 获取本周全球剧集榜 """ @@ -50,8 +51,24 @@ class DoubanChain(ChainBase, metaclass=Singleton): return self.run_module("douban_discover", mtype=mtype, sort=sort, tags=tags, page=page, count=count) - def tv_animation(self, page: int = 1, count: int = 30) -> List[dict]: + def tv_animation(self, page: int = 1, count: int = 30) -> Optional[List[dict]]: """ 获取动画剧集 """ return self.run_module("tv_animation", page=page, count=count) + + def movie_hot(self, page: int = 1, count: int = 30) -> Optional[List[dict]]: + """ + 获取热门电影 + """ + if settings.RECOGNIZE_SOURCE != "douban": + return None + return self.run_module("movie_hot", page=page, count=count) + + def tv_hot(self, page: int = 1, count: int = 30) -> Optional[List[dict]]: + """ + 获取热门剧集 + """ + if settings.RECOGNIZE_SOURCE != "douban": + return None + return self.run_module("tv_hot", page=page, count=count) diff --git a/app/modules/douban/__init__.py b/app/modules/douban/__init__.py index 4e576bd8..b0f7b942 100644 --- a/app/modules/douban/__init__.py +++ b/app/modules/douban/__init__.py @@ -477,6 +477,26 @@ class DoubanModule(_ModuleBase): return [] return infos.get("subject_collection_items") + def movie_hot(self, page: int = 1, count: int = 30) -> List[dict]: + """ + 获取豆瓣热门电影 + """ + infos = self.doubanapi.movie_hot_gaia(start=(page - 1) * count, + count=count) + if not infos: + return [] + return infos.get("subject_collection_items") + + def tv_hot(self, page: int = 1, count: int = 30) -> List[dict]: + """ + 获取豆瓣热门剧集 + """ + infos = self.doubanapi.tv_hot(start=(page - 1) * count, + count=count) + if not infos: + return [] + return infos.get("subject_collection_items") + def search_medias(self, meta: MetaBase) -> Optional[List[MediaInfo]]: """ 搜索媒体信息