From a0b8cc6719f03b561e1a70374feaf230bff6dad7 Mon Sep 17 00:00:00 2001 From: thsrite Date: Sat, 9 Sep 2023 21:24:07 +0800 Subject: [PATCH] =?UTF-8?q?feat=20=E8=A1=A5=E5=85=85=E5=89=A7=E9=9B=86?= =?UTF-8?q?=E5=85=A8=E9=83=A8=E5=AD=A3=E5=B9=B4=E4=BB=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/modules/themoviedb/__init__.py | 5 ++++ app/modules/themoviedb/tmdbapi.py | 32 +++++++++++++++++++++ app/modules/themoviedb/tmdbv3api/objs/tv.py | 12 ++++++++ 3 files changed, 49 insertions(+) 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..8a16aa09 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.append(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.