From b6ac5f0f846de43e35f9354a145ad76d49ae8483 Mon Sep 17 00:00:00 2001 From: jxxghp Date: Sat, 18 Nov 2023 22:37:23 +0800 Subject: [PATCH] =?UTF-8?q?feat=20=E5=AE=8C=E5=96=84=E8=B1=86=E7=93=A3?= =?UTF-8?q?=E8=AF=A6=E6=83=85API?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/api/endpoints/media.py | 1 + app/modules/douban/__init__.py | 29 ++++++++++++++++++ app/modules/douban/apiv2.py | 48 ++++++++++++++++++++++-------- app/modules/themoviedb/__init__.py | 2 ++ 4 files changed, 68 insertions(+), 12 deletions(-) diff --git a/app/api/endpoints/media.py b/app/api/endpoints/media.py index 3185bf16..c990fc34 100644 --- a/app/api/endpoints/media.py +++ b/app/api/endpoints/media.py @@ -131,5 +131,6 @@ def media_info(mediaid: str, type_name: str, return schemas.MediaInfo() mediainfo = MediaChain().recognize_media(tmdbid=tmdbid, doubanid=doubanid, mtype=mtype) if mediainfo: + MediaChain().obtain_images(mediainfo) return mediainfo.to_dict() return schemas.MediaInfo() diff --git a/app/modules/douban/__init__.py b/app/modules/douban/__init__.py index e7244f87..3b2d30fd 100644 --- a/app/modules/douban/__init__.py +++ b/app/modules/douban/__init__.py @@ -658,6 +658,35 @@ class DoubanModule(_ModuleBase): logger.error(f"刮削文件 {file} 失败,原因:{str(e)}") logger.info(f"{path} 刮削完成") + def obtain_images(self, mediainfo: MediaInfo) -> Optional[MediaInfo]: + """ + 补充抓取媒体信息图片 + :param mediainfo: 识别的媒体信息 + :return: 更新后的媒体信息 + """ + if settings.RECOGNIZE_SOURCE != "douban": + return None + if not mediainfo.douban_id: + return None + if mediainfo.backdrop_path: + # 没有图片缺失 + return mediainfo + # 调用图片接口 + if not mediainfo.backdrop_path: + if mediainfo.type == MediaType.MOVIE: + info = self.doubanapi.movie_photos(mediainfo.douban_id) + else: + info = self.doubanapi.tv_photos(mediainfo.douban_id) + if not info: + return mediainfo + images = info.get("photos") + # 背景图 + if images: + backdrop = images[0].get("image", {}).get("large") or {} + if backdrop: + mediainfo.backdrop_path = backdrop.get("url") + return mediainfo + def clear_cache(self): """ 清除缓存 diff --git a/app/modules/douban/apiv2.py b/app/modules/douban/apiv2.py index 8597974f..88261d0e 100644 --- a/app/modules/douban/apiv2.py +++ b/app/modules/douban/apiv2.py @@ -430,27 +430,51 @@ class DoubanApi(metaclass=Singleton): def movie_recommendations(self, subject_id: str, start: int = 0, count: int = 20, ts=datetime.strftime(datetime.now(), '%Y%m%d')): """ - 电影推荐 - :param subject_id: 电影id - :param start: 开始 - :param count: 数量 - :param ts: 时间戳 - """ + 电影推荐 + :param subject_id: 电影id + :param start: 开始 + :param count: 数量 + :param ts: 时间戳 + """ return self.__invoke(self._urls["movie_recommendations"] % subject_id, start=start, count=count, _ts=ts) def tv_recommendations(self, subject_id: str, start: int = 0, count: int = 20, ts=datetime.strftime(datetime.now(), '%Y%m%d')): """ - 电视剧推荐 - :param subject_id: 电视剧id - :param start: 开始 - :param count: 数量 - :param ts: 时间戳 - """ + 电视剧推荐 + :param subject_id: 电视剧id + :param start: 开始 + :param count: 数量 + :param ts: 时间戳 + """ return self.__invoke(self._urls["tv_recommendations"] % subject_id, start=start, count=count, _ts=ts) + def movie_photos(self, subject_id: str, start: int = 0, count: int = 20, + ts=datetime.strftime(datetime.now(), '%Y%m%d')): + """ + 电影剧照 + :param subject_id: 电影id + :param start: 开始 + :param count: 数量 + :param ts: 时间戳 + """ + return self.__invoke(self._urls["movie_photos"] % subject_id, + start=start, count=count, _ts=ts) + + def tv_photos(self, subject_id: str, start: int = 0, count: int = 20, + ts=datetime.strftime(datetime.now(), '%Y%m%d')): + """ + 电视剧剧照 + :param subject_id: 电视剧id + :param start: 开始 + :param count: 数量 + :param ts: 时间戳 + """ + return self.__invoke(self._urls["tv_photos"] % subject_id, + start=start, count=count, _ts=ts) + def clear_cache(self): """ 清空LRU缓存 diff --git a/app/modules/themoviedb/__init__.py b/app/modules/themoviedb/__init__.py index defac15e..1ddc666d 100644 --- a/app/modules/themoviedb/__init__.py +++ b/app/modules/themoviedb/__init__.py @@ -312,6 +312,8 @@ class TheMovieDbModule(_ModuleBase): :param mediainfo: 识别的媒体信息 :return: 更新后的媒体信息 """ + if settings.RECOGNIZE_SOURCE != "themoviedb": + return None if not mediainfo.tmdb_id: return mediainfo if mediainfo.logo_path \