From 347262538fc8e9610e85bf106ecd944f71b495fe Mon Sep 17 00:00:00 2001 From: jxxghp Date: Fri, 4 Apr 2025 08:59:12 +0800 Subject: [PATCH] fix episodes group --- app/modules/themoviedb/__init__.py | 24 ++++++++++---------- app/modules/themoviedb/scraper.py | 6 ++--- app/modules/themoviedb/tmdbapi.py | 36 +++++++++++++++++++++--------- 3 files changed, 40 insertions(+), 26 deletions(-) diff --git a/app/modules/themoviedb/__init__.py b/app/modules/themoviedb/__init__.py index 03d68c1b..c1a52e14 100644 --- a/app/modules/themoviedb/__init__.py +++ b/app/modules/themoviedb/__init__.py @@ -120,9 +120,9 @@ class TheMovieDbModule(_ModuleBase): cache_info = self.cache.get(meta) # 查询剧集组 - group_episodes = [] + group_seasons = [] if episode_group: - group_episodes = self.tmdb.get_tv_group_episodes(episode_group) + group_seasons = self.tmdb.get_tv_group_seasons(episode_group) # 识别匹配 if not cache_info or not cache: @@ -152,7 +152,7 @@ class TheMovieDbModule(_ModuleBase): mtype=meta.type, season_year=meta.year, season_number=meta.begin_season, - group_episodes=group_episodes) + group_seasons=group_seasons) if not info: # 去掉年份再查一次 info = self.tmdb.match(name=name, @@ -167,7 +167,7 @@ class TheMovieDbModule(_ModuleBase): info = self.tmdb.match(name=name, year=meta.year, mtype=MediaType.TV, - group_episodes=group_episodes) + group_seasons=group_seasons) if not info: # 去掉年份和类型再查一次 info = self.tmdb.match_multi(name=name) @@ -219,20 +219,20 @@ class TheMovieDbModule(_ModuleBase): # 使用剧集组的集信息和年份 if mediainfo.type == MediaType.TV and mediainfo.episode_groups: - if group_episodes: + if group_seasons: # 指定剧集组时 seasons = {} season_info = [] season_years = {} - for group_episode in group_episodes: + for group_season in group_seasons: # 季 - season = group_episode.get("order") + season = group_season.get("order") # 集列表 - episodes = group_episode.get("episodes") + episodes = group_season.get("episodes") if not episodes: continue seasons[season] = [ep.get("episode_number") for ep in episodes] - season_info.append(group_episode) + season_info.append(group_season) # 当前季第一季时间 first_date = episodes[0].get("air_date") if re.match(r"^\d{4}-\d{2}-\d{2}$", first_date): @@ -249,7 +249,7 @@ class TheMovieDbModule(_ModuleBase): mediainfo.season_years = season_years # 所有剧集组 mediainfo.episode_group = episode_group - mediainfo.episode_groups = group_episodes + mediainfo.episode_groups = group_seasons else: # 每季年份 season_years = {} @@ -257,7 +257,7 @@ class TheMovieDbModule(_ModuleBase): if group.get('type') != 6: # 只处理剧集部分 continue - group_episodes = self.tmdb.get_tv_group_episodes(group.get('id')) + group_episodes = self.tmdb.get_tv_group_seasons(group.get('id')) if not group_episodes: continue for group_episode in group_episodes: @@ -499,7 +499,7 @@ class TheMovieDbModule(_ModuleBase): :param episode_group: 剧集组 """ if episode_group: - season_info = self.tmdb.get_tv_group_episodes(episode_group) + season_info = self.tmdb.get_tv_group_detail(episode_group, season=season) else: season_info = self.tmdb.get_tv_season_detail(tmdbid=tmdbid, season=season) if not season_info or not season_info.get("episodes"): diff --git a/app/modules/themoviedb/scraper.py b/app/modules/themoviedb/scraper.py index 960e7c03..e345f33c 100644 --- a/app/modules/themoviedb/scraper.py +++ b/app/modules/themoviedb/scraper.py @@ -33,9 +33,9 @@ class TmdbScraper: if season is not None: # 查询季信息 if mediainfo.episode_group: - seasoninfo = self.tmdb.get_tv_group_episodes(mediainfo.episode_group) + seasoninfo = self.tmdb.get_tv_group_detail(mediainfo.episode_group, season=season) else: - seasoninfo = self.tmdb.get_tv_season_detail(mediainfo.tmdb_id, season) + seasoninfo = self.tmdb.get_tv_season_detail(mediainfo.tmdb_id, season=season) if episode: # 集元数据文件 episodeinfo = self.__get_episode_detail(seasoninfo, meta.begin_episode) @@ -65,7 +65,7 @@ class TmdbScraper: if episode: # 集的图片 if mediainfo.episode_group: - seasoninfo = self.tmdb.get_tv_group_episodes(mediainfo.episode_group) + seasoninfo = self.tmdb.get_tv_group_seasons(mediainfo.episode_group) else: seasoninfo = self.tmdb.get_tv_season_detail(mediainfo.tmdb_id, season) if seasoninfo: diff --git a/app/modules/themoviedb/tmdbapi.py b/app/modules/themoviedb/tmdbapi.py index 6a97e23e..4b563672 100644 --- a/app/modules/themoviedb/tmdbapi.py +++ b/app/modules/themoviedb/tmdbapi.py @@ -189,7 +189,7 @@ class TmdbApi: year: Optional[str] = None, season_year: Optional[str] = None, season_number: Optional[int] = None, - group_episodes: Optional[List[dict]] = None) -> Optional[dict]: + group_seasons: Optional[List[dict]] = None) -> Optional[dict]: """ 搜索tmdb中的媒体信息,匹配返回一条尽可能正确的信息 :param name: 检索的名称 @@ -197,7 +197,7 @@ class TmdbApi: :param year: 年份,如要是季集需要是首播年份(first_air_date) :param season_year: 当前季集年份 :param season_number: 季集,整数 - :param group_episodes: 集数组信息 + :param group_seasons: 集数组信息 :return: TMDB的INFO,同时会将mtype赋值到media_type中 """ if not self.search: @@ -226,7 +226,7 @@ class TmdbApi: info = self.__search_tv_by_season(name, season_year, season_number, - group_episodes) + group_seasons) if not info: year_range = [year] if year: @@ -337,13 +337,13 @@ class TmdbApi: return {} def __search_tv_by_season(self, name: str, season_year: str, season_number: int, - group_episodes: Optional[List[dict]] = None) -> Optional[dict]: + group_seasons: Optional[List[dict]] = None) -> Optional[dict]: """ 根据电视剧的名称和季的年份及序号匹配TMDB :param name: 识别的文件名或者种子名 :param season_year: 季的年份 :param season_number: 季序号 - :param group_episodes: 集数组信息 + :param group_seasons: 集数组信息 :return: 匹配的媒体信息 """ @@ -351,12 +351,12 @@ class TmdbApi: if not tv_info: return False try: - if group_episodes: - for group_episode in group_episodes: - season = group_episode.get('order') + if group_seasons: + for group_season in group_seasons: + season = group_season.get('order') if season != season_number: continue - episodes = group_episode.get('episodes') + episodes = group_season.get('episodes') if not episodes: continue first_date = episodes[0].get("air_date") @@ -1336,9 +1336,9 @@ class TmdbApi: logger.error(str(e)) return [] - def get_tv_group_episodes(self, group_id: str) -> List[dict]: + def get_tv_group_seasons(self, group_id: str) -> List[dict]: """ - 获取电视剧剧集组集列表 + 获取电视剧剧集组季集列表 """ if not self.tv: return [] @@ -1349,6 +1349,20 @@ class TmdbApi: logger.error(str(e)) return [] + def get_tv_group_detail(self, group_id: str, season: int) -> dict: + """ + 获取剧集组某个季的信息 + """ + group_seasons = self.get_tv_group_seasons(group_id) + if not group_seasons: + return {} + for group_season in group_seasons: + if group_season.get('order') == season: + return group_season + return {} + + + def get_person_detail(self, person_id: int) -> dict: """ 获取人物详情