diff --git a/app/modules/themoviedb/__init__.py b/app/modules/themoviedb/__init__.py index 4f85b539..3bcc826d 100644 --- a/app/modules/themoviedb/__init__.py +++ b/app/modules/themoviedb/__init__.py @@ -132,6 +132,11 @@ class TheMovieDbModule(_ModuleBase): else: logger.info(f"{tmdbid} 识别结果:{mediainfo.type.value} " f"{mediainfo.title_year}") + + # 补充剧集年份 + episode_years = self.tmdb.get_tv_episode_years(info.get("id")) + if episode_years: + mediainfo.season_years = episode_years return mediainfo else: logger.info(f"{meta.name if meta else tmdbid} 未匹配到媒体信息") diff --git a/app/modules/themoviedb/tmdbapi.py b/app/modules/themoviedb/tmdbapi.py index eb09a7ef..91fc8093 100644 --- a/app/modules/themoviedb/tmdbapi.py +++ b/app/modules/themoviedb/tmdbapi.py @@ -1167,3 +1167,35 @@ class TmdbHelper: 清除缓存 """ self.tmdb.cache_clear() + + def get_tv_episode_years(self, tv_id: int): + """ + 查询剧集组年份 + """ + episode_groups = self.tv.episode_groups(tv_id) + if not episode_groups: + return {} + try: + episode_years = {} + for episode_group in episode_groups: + logger.info(f"正在获取剧集组年份:{episode_group.get('id')}...") + if episode_group.get('type') != 6: + # 只处理剧集部分 + continue + group_episodes = self.tv.group_episodes(episode_group.get('id')) + if not group_episodes: + continue + for group_episode in group_episodes: + order = group_episode.get('order') + episodes = group_episode.get('episodes') + if not episodes or not order: + continue + # 当前季第一季时间 + first_date = episodes[0].get("air_date") + if not first_date and str(first_date).split("-") != 3: + continue + episode_years[order] = str(first_date).split("-")[0] + return episode_years + except Exception as e: + print(str(e)) + return {} diff --git a/app/modules/themoviedb/tmdbv3api/objs/tv.py b/app/modules/themoviedb/tmdbv3api/objs/tv.py index d9a21711..5dc6932b 100644 --- a/app/modules/themoviedb/tmdbv3api/objs/tv.py +++ b/app/modules/themoviedb/tmdbv3api/objs/tv.py @@ -33,6 +33,7 @@ class TV(TMDb): "on_the_air": "/tv/on_the_air", "popular": "/tv/popular", "top_rated": "/tv/top_rated", + "group_episodes": "/tv/episode_group/%s", } def details(self, tv_id, append_to_response="videos,trailers,images,credits,translations"): @@ -130,6 +131,17 @@ class TV(TMDb): key="results" ) + def group_episodes(self, group_id): + """ + 查询剧集组所有剧集 + :param group_id: int + :return: + """ + return self._request_obj( + self._urls["group_episodes"] % group_id, + key="groups" + ) + def external_ids(self, tv_id): """ Get the external ids for a TV show.