diff --git a/app/core/context.py b/app/core/context.py index e059f0e0..de6450c5 100644 --- a/app/core/context.py +++ b/app/core/context.py @@ -264,6 +264,8 @@ class MediaInfo: next_episode_to_air: dict = field(default_factory=dict) # 内容分级 content_rating: str = None + # 剧集组 + episode_groups: List[dict] = field(default_factory=list) def __post_init__(self): # 设置媒体信息 @@ -454,6 +456,10 @@ class MediaInfo: air_date = seainfo.get("air_date") if air_date: self.season_years[season] = air_date[:4] + # 剧集组 + if info.get("episode_groups"): + self.episode_groups = info["episode_groups"].get("results") or [] + # 海报 if info.get('poster_path'): self.poster_path = f"https://{settings.TMDB_IMAGE_DOMAIN}/t/p/original{info.get('poster_path')}" @@ -773,6 +779,7 @@ class MediaInfo: self.spoken_languages = [] self.networks = [] self.next_episode_to_air = {} + self.episode_groups = [] @dataclass diff --git a/app/modules/themoviedb/__init__.py b/app/modules/themoviedb/__init__.py index 00711acb..63092846 100644 --- a/app/modules/themoviedb/__init__.py +++ b/app/modules/themoviedb/__init__.py @@ -207,9 +207,9 @@ class TheMovieDbModule(_ModuleBase): logger.info(f"{tmdbid} TMDB识别结果:{mediainfo.type.value} " f"{mediainfo.title_year}") - # 补充剧集年份 - if mediainfo.type == MediaType.TV: - episode_years = self.tmdb.get_tv_episode_years(info.get("id")) + # 补充剧集年份为季年份 + if mediainfo.type == MediaType.TV and mediainfo.episode_groups: + episode_years = self.tmdb.get_tv_episode_years(mediainfo.episode_groups) if episode_years: mediainfo.season_years = episode_years return mediainfo diff --git a/app/modules/themoviedb/tmdbapi.py b/app/modules/themoviedb/tmdbapi.py index 5ac62ae2..8a3b0daa 100644 --- a/app/modules/themoviedb/tmdbapi.py +++ b/app/modules/themoviedb/tmdbapi.py @@ -768,11 +768,11 @@ class TmdbApi: def __get_movie_detail(self, tmdbid: int, append_to_response: Optional[str] = "images," - "credits," - "alternative_titles," - "translations," - "release_dates," - "external_ids") -> Optional[dict]: + "credits," + "alternative_titles," + "translations," + "release_dates," + "external_ids") -> Optional[dict]: """ 获取电影的详情 :param tmdbid: TMDB ID @@ -881,11 +881,12 @@ class TmdbApi: def __get_tv_detail(self, tmdbid: int, append_to_response: Optional[str] = "images," - "credits," - "alternative_titles," - "translations," - "content_ratings," - "external_ids") -> Optional[dict]: + "credits," + "alternative_titles," + "translations," + "content_ratings," + "external_ids," + "episode_groups") -> Optional[dict]: """ 获取电视剧的详情 :param tmdbid: TMDB ID @@ -1376,20 +1377,19 @@ class TmdbApi: """ self.tmdb.cache_clear() - def get_tv_episode_years(self, tv_id: int) -> dict: + def get_tv_episode_years(self, episode_groups: List[dict]) -> dict: """ 查询剧集组年份 """ try: - episode_groups = self.tv.episode_groups(tv_id) if not episode_groups: return {} episode_years = {} for episode_group in episode_groups: - logger.debug(f"正在获取剧集组年份:{episode_group.get('id')}...") if episode_group.get('type') != 6: # 只处理剧集部分 continue + logger.debug(f"正在获取剧集组年份:{episode_group.get('id')}...") group_episodes = self.tv.group_episodes(episode_group.get('id')) if not group_episodes: continue diff --git a/app/schemas/context.py b/app/schemas/context.py index 460d2a10..b9086978 100644 --- a/app/schemas/context.py +++ b/app/schemas/context.py @@ -170,6 +170,8 @@ class MediaInfo(BaseModel): runtime: Optional[int] = None # 下一集 next_episode_to_air: Optional[dict] = Field(default_factory=dict) + # 剧集组 + episode_groups: Optional[list] = Field(default_factory=list) class TorrentInfo(BaseModel):