fix meta_nfo

This commit is contained in:
jxxghp
2024-06-20 17:04:47 +08:00
parent 463fd3761a
commit ef0cd7d5c5
4 changed files with 63 additions and 10 deletions

View File

@ -765,6 +765,16 @@ class DoubanModule(_ModuleBase):
logger.error(f"刮削文件 {file} 失败,原因:{str(e)}") logger.error(f"刮削文件 {file} 失败,原因:{str(e)}")
logger.info(f"{path} 刮削完成") logger.info(f"{path} 刮削完成")
def meta_nfo(self, mediainfo: MediaInfo, season: int = None, **kwargs) -> Optional[str]:
"""
获取NFO文件内容文本
:param mediainfo: 媒体信息
:param season: 季号
"""
if settings.SCRAP_SOURCE != "douban":
return None
return self.scraper.get_meta_nfo(mediainfo=mediainfo, season=season)
def obtain_images(self, mediainfo: MediaInfo) -> Optional[MediaInfo]: def obtain_images(self, mediainfo: MediaInfo) -> Optional[MediaInfo]:
""" """
补充抓取媒体信息图片 补充抓取媒体信息图片

View File

@ -1,5 +1,5 @@
from pathlib import Path from pathlib import Path
from typing import Union from typing import Union, Optional
from xml.dom import minidom from xml.dom import minidom
from app.core.config import settings from app.core.config import settings
@ -17,6 +17,27 @@ class DoubanScraper:
_force_nfo = False _force_nfo = False
_force_img = False _force_img = False
def get_meta_nfo(self, mediainfo: MediaInfo, season: int = None) -> Optional[str]:
"""
获取NFO文件内容文本
:param mediainfo: 媒体信息
:param season: 季号
"""
if mediainfo.type == MediaType.MOVIE:
# 电影元数据文件
doc = self.__gen_movie_nfo_file(mediainfo=mediainfo)
else:
if season:
# 季元数据文件
doc = self.__gen_tv_season_nfo_file(mediainfo=mediainfo, season=season)
else:
# 电视剧元数据文件
doc = self.__gen_tv_nfo_file(mediainfo=mediainfo)
if doc:
return doc.toprettyxml(indent=" ", encoding="utf-8")
return None
def gen_scraper_files(self, meta: MetaBase, mediainfo: MediaInfo, def gen_scraper_files(self, meta: MetaBase, mediainfo: MediaInfo,
file_path: Path, transfer_type: str, file_path: Path, transfer_type: str,
force_nfo: bool = False, force_img: bool = False): force_nfo: bool = False, force_img: bool = False):
@ -84,7 +105,7 @@ class DoubanScraper:
logger.error(f"{file_path} 刮削失败:{str(e)}") logger.error(f"{file_path} 刮削失败:{str(e)}")
@staticmethod @staticmethod
def __gen_common_nfo(mediainfo: MediaInfo, doc, root): def __gen_common_nfo(mediainfo: MediaInfo, doc: minidom.Document, root: minidom.Node):
# 简介 # 简介
xplot = DomUtils.add_node(doc, root, "plot") xplot = DomUtils.add_node(doc, root, "plot")
xplot.appendChild(doc.createCDATASection(mediainfo.overview or "")) xplot.appendChild(doc.createCDATASection(mediainfo.overview or ""))
@ -108,7 +129,7 @@ class DoubanScraper:
def __gen_movie_nfo_file(self, def __gen_movie_nfo_file(self,
mediainfo: MediaInfo, mediainfo: MediaInfo,
file_path: Path): file_path: Path = None) -> minidom.Document:
""" """
生成电影的NFO描述文件 生成电影的NFO描述文件
:param mediainfo: 豆瓣信息 :param mediainfo: 豆瓣信息
@ -127,11 +148,14 @@ class DoubanScraper:
# 年份 # 年份
DomUtils.add_node(doc, root, "year", mediainfo.year or "") DomUtils.add_node(doc, root, "year", mediainfo.year or "")
# 保存 # 保存
if file_path:
self.__save_nfo(doc, file_path.with_suffix(".nfo")) self.__save_nfo(doc, file_path.with_suffix(".nfo"))
return doc
def __gen_tv_nfo_file(self, def __gen_tv_nfo_file(self,
mediainfo: MediaInfo, mediainfo: MediaInfo,
dir_path: Path): dir_path: Path = None) -> minidom.Document:
""" """
生成电视剧的NFO描述文件 生成电视剧的NFO描述文件
:param mediainfo: 媒体信息 :param mediainfo: 媒体信息
@ -152,9 +176,13 @@ class DoubanScraper:
DomUtils.add_node(doc, root, "season", "-1") DomUtils.add_node(doc, root, "season", "-1")
DomUtils.add_node(doc, root, "episode", "-1") DomUtils.add_node(doc, root, "episode", "-1")
# 保存 # 保存
if dir_path:
self.__save_nfo(doc, dir_path.joinpath("tvshow.nfo")) self.__save_nfo(doc, dir_path.joinpath("tvshow.nfo"))
def __gen_tv_season_nfo_file(self, mediainfo: MediaInfo, season: int, season_path: Path): return doc
def __gen_tv_season_nfo_file(self, mediainfo: MediaInfo,
season: int, season_path: Path = None) -> minidom.Document:
""" """
生成电视剧季的NFO描述文件 生成电视剧季的NFO描述文件
:param mediainfo: 媒体信息 :param mediainfo: 媒体信息
@ -179,7 +207,9 @@ class DoubanScraper:
# seasonnumber # seasonnumber
DomUtils.add_node(doc, root, "seasonnumber", str(season)) DomUtils.add_node(doc, root, "seasonnumber", str(season))
# 保存 # 保存
if season_path:
self.__save_nfo(doc, season_path.joinpath("season.nfo")) self.__save_nfo(doc, season_path.joinpath("season.nfo"))
return doc
def __save_image(self, url: str, file_path: Path): def __save_image(self, url: str, file_path: Path):
""" """

View File

@ -332,6 +332,19 @@ class TheMovieDbModule(_ModuleBase):
force_img=force_img) force_img=force_img)
logger.info(f"{path} 刮削完成") logger.info(f"{path} 刮削完成")
def meta_nfo(self, meta: MetaBase, mediainfo: MediaInfo,
season: int = None, episode: int = None) -> Optional[str]:
"""
获取NFO文件内容文本
:param meta: 元数据
:param mediainfo: 媒体信息
:param season: 季号
:param episode: 集号
"""
if settings.SCRAP_SOURCE != "themoviedb":
return None
return self.scraper.get_meta_nfo(meta=meta, mediainfo=mediainfo, season=season, episode=episode)
def tmdb_discover(self, mtype: MediaType, sort_by: str, with_genres: str, with_original_language: str, def tmdb_discover(self, mtype: MediaType, sort_by: str, with_genres: str, with_original_language: str,
page: int = 1) -> Optional[List[MediaInfo]]: page: int = 1) -> Optional[List[MediaInfo]]:
""" """

View File

@ -26,7 +26,7 @@ class TmdbScraper:
def __init__(self, tmdb): def __init__(self, tmdb):
self.tmdb = tmdb self.tmdb = tmdb
def meta_nfo(self, meta: MetaBase, mediainfo: MediaInfo, def get_meta_nfo(self, meta: MetaBase, mediainfo: MediaInfo,
season: int = None, episode: int = None) -> Optional[str]: season: int = None, episode: int = None) -> Optional[str]:
""" """
获取NFO文件内容文本 获取NFO文件内容文本