From d836b385ae7597865e869754c4a00c31739e86b0 Mon Sep 17 00:00:00 2001 From: jxxghp Date: Thu, 7 Sep 2023 07:20:10 +0800 Subject: [PATCH] fix --- app/modules/fanart/__init__.py | 294 ++++++++++++++++++++++++++++++ app/modules/themoviedb/scraper.py | 18 +- 2 files changed, 307 insertions(+), 5 deletions(-) diff --git a/app/modules/fanart/__init__.py b/app/modules/fanart/__init__.py index a783174f..aaf8a8c2 100644 --- a/app/modules/fanart/__init__.py +++ b/app/modules/fanart/__init__.py @@ -11,6 +11,299 @@ from app.schemas.types import MediaType class FanartModule(_ModuleBase): + """ + { + "name": "The Wheel of Time", + "thetvdb_id": "355730", + "tvposter": [ + { + "id": "174068", + "url": "http://assets.fanart.tv/fanart/tv/355730/tvposter/the-wheel-of-time-64b009de9548d.jpg", + "lang": "en", + "likes": "3" + }, + { + "id": "176424", + "url": "http://assets.fanart.tv/fanart/tv/355730/tvposter/the-wheel-of-time-64de44fe42073.jpg", + "lang": "00", + "likes": "3" + }, + { + "id": "176407", + "url": "http://assets.fanart.tv/fanart/tv/355730/tvposter/the-wheel-of-time-64dde63c7c941.jpg", + "lang": "en", + "likes": "0" + }, + { + "id": "177321", + "url": "http://assets.fanart.tv/fanart/tv/355730/tvposter/the-wheel-of-time-64eda10599c3d.jpg", + "lang": "cz", + "likes": "0" + }, + { + "id": "155050", + "url": "http://assets.fanart.tv/fanart/tv/355730/tvposter/the-wheel-of-time-6313adbd1fd58.jpg", + "lang": "pl", + "likes": "0" + }, + { + "id": "140198", + "url": "http://assets.fanart.tv/fanart/tv/355730/tvposter/the-wheel-of-time-61a0d7b11952e.jpg", + "lang": "en", + "likes": "0" + }, + { + "id": "140034", + "url": "http://assets.fanart.tv/fanart/tv/355730/tvposter/the-wheel-of-time-619e65b73871d.jpg", + "lang": "en", + "likes": "0" + } + ], + "hdtvlogo": [ + { + "id": "139835", + "url": "http://assets.fanart.tv/fanart/tv/355730/hdtvlogo/the-wheel-of-time-6197d9392faba.png", + "lang": "en", + "likes": "3" + }, + { + "id": "140039", + "url": "http://assets.fanart.tv/fanart/tv/355730/hdtvlogo/the-wheel-of-time-619e87941a128.png", + "lang": "pt", + "likes": "3" + }, + { + "id": "140092", + "url": "http://assets.fanart.tv/fanart/tv/355730/hdtvlogo/the-wheel-of-time-619fa2347bada.png", + "lang": "en", + "likes": "3" + }, + { + "id": "164312", + "url": "http://assets.fanart.tv/fanart/tv/355730/hdtvlogo/the-wheel-of-time-63c8185cb8824.png", + "lang": "hu", + "likes": "1" + }, + { + "id": "139827", + "url": "http://assets.fanart.tv/fanart/tv/355730/hdtvlogo/the-wheel-of-time-6197539658a9e.png", + "lang": "en", + "likes": "1" + }, + { + "id": "177214", + "url": "http://assets.fanart.tv/fanart/tv/355730/hdtvlogo/the-wheel-of-time-64ebae44c23a6.png", + "lang": "cz", + "likes": "0" + }, + { + "id": "177215", + "url": "http://assets.fanart.tv/fanart/tv/355730/hdtvlogo/the-wheel-of-time-64ebae472deef.png", + "lang": "cz", + "likes": "0" + }, + { + "id": "156163", + "url": "http://assets.fanart.tv/fanart/tv/355730/hdtvlogo/the-wheel-of-time-63316bef1ff9d.png", + "lang": "cz", + "likes": "0" + }, + { + "id": "155051", + "url": "http://assets.fanart.tv/fanart/tv/355730/hdtvlogo/the-wheel-of-time-6313add04ca92.png", + "lang": "pl", + "likes": "0" + }, + { + "id": "152668", + "url": "http://assets.fanart.tv/fanart/tv/355730/hdtvlogo/the-wheel-of-time-62ced3775a40a.png", + "lang": "pl", + "likes": "0" + }, + { + "id": "142266", + "url": "http://assets.fanart.tv/fanart/tv/355730/hdtvlogo/the-wheel-of-time-61ccd93eeac2b.png", + "lang": "de", + "likes": "0" + } + ], + "hdclearart": [ + { + "id": "164313", + "url": "http://assets.fanart.tv/fanart/tv/355730/hdclearart/the-wheel-of-time-63c81871c982c.png", + "lang": "en", + "likes": "3" + }, + { + "id": "140284", + "url": "http://assets.fanart.tv/fanart/tv/355730/hdclearart/the-wheel-of-time-61a2128ed1df2.png", + "lang": "pt", + "likes": "3" + }, + { + "id": "139828", + "url": "http://assets.fanart.tv/fanart/tv/355730/hdclearart/the-wheel-of-time-61975401e894c.png", + "lang": "en", + "likes": "1" + }, + { + "id": "164314", + "url": "http://assets.fanart.tv/fanart/tv/355730/hdclearart/the-wheel-of-time-63c8188488a5f.png", + "lang": "hu", + "likes": "1" + }, + { + "id": "177322", + "url": "http://assets.fanart.tv/fanart/tv/355730/hdclearart/the-wheel-of-time-64eda135933b6.png", + "lang": "cz", + "likes": "0" + }, + { + "id": "142267", + "url": "http://assets.fanart.tv/fanart/tv/355730/hdclearart/the-wheel-of-time-61ccda9918c5c.png", + "lang": "de", + "likes": "0" + } + ], + "seasonposter": [ + { + "id": "140199", + "url": "http://assets.fanart.tv/fanart/tv/355730/seasonposter/the-wheel-of-time-61a0d7c2976de.jpg", + "lang": "en", + "likes": "1", + "season": "1" + }, + { + "id": "176395", + "url": "http://assets.fanart.tv/fanart/tv/355730/seasonposter/the-wheel-of-time-64dd80b3d79a9.jpg", + "lang": "en", + "likes": "0", + "season": "1" + }, + { + "id": "140035", + "url": "http://assets.fanart.tv/fanart/tv/355730/seasonposter/the-wheel-of-time-619e65c4d5357.jpg", + "lang": "en", + "likes": "0", + "season": "1" + } + ], + "tvthumb": [ + { + "id": "140242", + "url": "http://assets.fanart.tv/fanart/tv/355730/tvthumb/the-wheel-of-time-61a1813035506.jpg", + "lang": "en", + "likes": "1" + }, + { + "id": "177323", + "url": "http://assets.fanart.tv/fanart/tv/355730/tvthumb/the-wheel-of-time-64eda15b6dce6.jpg", + "lang": "cz", + "likes": "0" + }, + { + "id": "176399", + "url": "http://assets.fanart.tv/fanart/tv/355730/tvthumb/the-wheel-of-time-64dd85c9b618c.jpg", + "lang": "en", + "likes": "0" + }, + { + "id": "152669", + "url": "http://assets.fanart.tv/fanart/tv/355730/tvthumb/the-wheel-of-time-62ced53d16574.jpg", + "lang": "pl", + "likes": "0" + }, + { + "id": "141983", + "url": "http://assets.fanart.tv/fanart/tv/355730/tvthumb/the-wheel-of-time-61c6d04a6d701.jpg", + "lang": "en", + "likes": "0" + } + ], + "showbackground": [ + { + "id": "177324", + "url": "http://assets.fanart.tv/fanart/tv/355730/showbackground/the-wheel-of-time-64eda1833ccb1.jpg", + "lang": "", + "likes": "0", + "season": "all" + }, + { + "id": "141986", + "url": "http://assets.fanart.tv/fanart/tv/355730/showbackground/the-wheel-of-time-61c6d08f7c7e2.jpg", + "lang": "", + "likes": "0", + "season": "all" + }, + { + "id": "139868", + "url": "http://assets.fanart.tv/fanart/tv/355730/showbackground/the-wheel-of-time-6198ce358b98a.jpg", + "lang": "", + "likes": "0", + "season": "all" + } + ], + "seasonthumb": [ + { + "id": "176396", + "url": "http://assets.fanart.tv/fanart/tv/355730/seasonthumb/the-wheel-of-time-64dd80c8593f9.jpg", + "lang": "en", + "likes": "0", + "season": "1" + }, + { + "id": "176400", + "url": "http://assets.fanart.tv/fanart/tv/355730/seasonthumb/the-wheel-of-time-64dd85da7c5e9.jpg", + "lang": "en", + "likes": "0", + "season": "0" + } + ], + "tvbanner": [ + { + "id": "176397", + "url": "http://assets.fanart.tv/fanart/tv/355730/tvbanner/the-wheel-of-time-64dd80da9a255.jpg", + "lang": "en", + "likes": "0" + }, + { + "id": "176401", + "url": "http://assets.fanart.tv/fanart/tv/355730/tvbanner/the-wheel-of-time-64dd85e8904ea.jpg", + "lang": "en", + "likes": "0" + }, + { + "id": "141988", + "url": "http://assets.fanart.tv/fanart/tv/355730/tvbanner/the-wheel-of-time-61c6d34bceb5f.jpg", + "lang": "en", + "likes": "0" + }, + { + "id": "141984", + "url": "http://assets.fanart.tv/fanart/tv/355730/tvbanner/the-wheel-of-time-61c6d06c1c21c.jpg", + "lang": "en", + "likes": "0" + } + ], + "seasonbanner": [ + { + "id": "176398", + "url": "http://assets.fanart.tv/fanart/tv/355730/seasonbanner/the-wheel-of-time-64dd80e7dbd9f.jpg", + "lang": "en", + "likes": "0", + "season": "1" + }, + { + "id": "176402", + "url": "http://assets.fanart.tv/fanart/tv/355730/seasonbanner/the-wheel-of-time-64dd85fb4f1b1.jpg", + "lang": "en", + "likes": "0", + "season": "0" + } + ] + } + """ + # 代理 _proxies: dict = settings.PROXY @@ -40,6 +333,7 @@ class FanartModule(_ModuleBase): if not result or result.get('status') == 'error': logger.warn(f"没有获取到 {mediainfo.title_year} 的Fanart图片数据") return + # FIXME 季图片要区分季号 for name, images in result.items(): if not images: continue diff --git a/app/modules/themoviedb/scraper.py b/app/modules/themoviedb/scraper.py index 20c7295d..f4e27567 100644 --- a/app/modules/themoviedb/scraper.py +++ b/app/modules/themoviedb/scraper.py @@ -15,7 +15,6 @@ from app.utils.http import RequestUtils class TmdbScraper: - tmdb = None def __init__(self, tmdb): @@ -56,11 +55,11 @@ class TmdbScraper: image_name = attr_name.replace("_path", "") + Path(attr_value).suffix self.__save_image(url=attr_value, file_path=file_path.with_name(image_name)) - # 电视剧 + # 电视剧,路径为每一季的文件名 名称/Season xx/名称 SxxExx.xxx else: # 识别 meta = MetaInfo(file_path.stem) - # 不存在时才处理 + # 根目录不存在时才处理 if not file_path.parent.with_name("tvshow.nfo").exists(): # 根目录描述文件 self.__gen_tv_nfo_file(mediainfo=mediainfo, @@ -84,16 +83,25 @@ class TmdbScraper: self.__gen_tv_season_nfo_file(seasoninfo=seasoninfo, season=meta.begin_season, season_path=file_path.parent) - # 季的图片 + # TMDB季poster图片 + sea_seq = str(meta.begin_season).rjust(2, '0') + if seasoninfo.get("poster_path"): + # 后缀 + ext = Path(seasoninfo.get('poster_path')).suffix + # URL + url = f"https://{settings.TMDB_IMAGE_DOMAIN}/t/p/original{seasoninfo.get('poster_path')}" + self.__save_image(url, file_path.parent.with_name(f"season{sea_seq}-poster{ext}")) + # FIXME 季的其它图片 for attr_name, attr_value in vars(mediainfo).items(): if attr_value \ and attr_name.startswith("season") \ + and not attr_name.endswith("poster") \ and attr_value \ and isinstance(attr_value, str) \ and attr_value.startswith("http"): image_name = attr_name.replace("_path", "").replace("season", - f"{str(meta.begin_season).rjust(2, '0')}-") \ + f"{sea_seq}-") \ + Path(attr_value).suffix self.__save_image(url=attr_value, file_path=file_path.parent.with_name(f"season{image_name}"))