fix scraper

This commit is contained in:
jxxghp 2023-09-30 20:27:48 +08:00
parent b3f4a6f251
commit 308683a7e9
2 changed files with 29 additions and 33 deletions

View File

@ -12,7 +12,6 @@ from app.schemas.types import MediaType
from app.utils.common import retry from app.utils.common import retry
from app.utils.dom import DomUtils from app.utils.dom import DomUtils
from app.utils.http import RequestUtils from app.utils.http import RequestUtils
from app.utils.string import StringUtils
class TmdbScraper: class TmdbScraper:
@ -122,25 +121,8 @@ class TmdbScraper:
except Exception as e: except Exception as e:
logger.error(f"{file_path} 刮削失败:{e}") logger.error(f"{file_path} 刮削失败:{e}")
def __get_chinese_name(self, person: dict): @staticmethod
""" def __gen_common_nfo(mediainfo: MediaInfo, doc, root):
获取TMDB别名中的中文名
"""
if not person.get("id"):
return ""
try:
personinfo = self.tmdb.get_person_detail(person.get("id"))
if personinfo:
also_known_as = personinfo.get("also_known_as") or []
if also_known_as:
for name in also_known_as:
if name and StringUtils.is_chinese(name):
return name
except Exception as err:
logger.error(f"获取人物中文名失败:{err}")
return person.get("name") or ""
def __gen_common_nfo(self, mediainfo: MediaInfo, doc, root):
""" """
生成公共NFO 生成公共NFO
""" """
@ -173,16 +155,13 @@ class TmdbScraper:
xoutline.appendChild(doc.createCDATASection(mediainfo.overview or "")) xoutline.appendChild(doc.createCDATASection(mediainfo.overview or ""))
# 导演 # 导演
for director in mediainfo.directors: for director in mediainfo.directors:
# 获取中文名 xdirector = DomUtils.add_node(doc, root, "director", director.get("name") or "")
cn_name = self.__get_chinese_name(director)
xdirector = DomUtils.add_node(doc, root, "director", cn_name)
xdirector.setAttribute("tmdbid", str(director.get("id") or "")) xdirector.setAttribute("tmdbid", str(director.get("id") or ""))
# 演员 # 演员
for actor in mediainfo.actors: for actor in mediainfo.actors:
# 获取中文名 # 获取中文名
cn_name = self.__get_chinese_name(actor)
xactor = DomUtils.add_node(doc, root, "actor") xactor = DomUtils.add_node(doc, root, "actor")
DomUtils.add_node(doc, xactor, "name", cn_name) DomUtils.add_node(doc, xactor, "name", actor.get("name") or "")
DomUtils.add_node(doc, xactor, "type", "Actor") DomUtils.add_node(doc, xactor, "type", "Actor")
DomUtils.add_node(doc, xactor, "role", actor.get("character") or actor.get("role") or "") DomUtils.add_node(doc, xactor, "role", actor.get("character") or actor.get("role") or "")
DomUtils.add_node(doc, xactor, "tmdbid", actor.get("id") or "") DomUtils.add_node(doc, xactor, "tmdbid", actor.get("id") or "")
@ -260,7 +239,8 @@ class TmdbScraper:
doc = minidom.Document() doc = minidom.Document()
root = DomUtils.add_node(doc, doc, "season") root = DomUtils.add_node(doc, doc, "season")
# 添加时间 # 添加时间
DomUtils.add_node(doc, root, "dateadded", time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))) DomUtils.add_node(doc, root, "dateadded",
time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time())))
# 简介 # 简介
xplot = DomUtils.add_node(doc, root, "plot") xplot = DomUtils.add_node(doc, root, "plot")
xplot.appendChild(doc.createCDATASection(seasoninfo.get("overview") or "")) xplot.appendChild(doc.createCDATASection(seasoninfo.get("overview") or ""))
@ -272,7 +252,8 @@ class TmdbScraper:
DomUtils.add_node(doc, root, "premiered", seasoninfo.get("air_date") or "") DomUtils.add_node(doc, root, "premiered", seasoninfo.get("air_date") or "")
DomUtils.add_node(doc, root, "releasedate", seasoninfo.get("air_date") or "") DomUtils.add_node(doc, root, "releasedate", seasoninfo.get("air_date") or "")
# 发行年份 # 发行年份
DomUtils.add_node(doc, root, "year", seasoninfo.get("air_date")[:4] if seasoninfo.get("air_date") else "") DomUtils.add_node(doc, root, "year",
seasoninfo.get("air_date")[:4] if seasoninfo.get("air_date") else "")
# seasonnumber # seasonnumber
DomUtils.add_node(doc, root, "seasonnumber", str(season)) DomUtils.add_node(doc, root, "seasonnumber", str(season))
# 保存 # 保存
@ -326,18 +307,14 @@ class TmdbScraper:
directors = episodeinfo.get("crew") or [] directors = episodeinfo.get("crew") or []
for director in directors: for director in directors:
if director.get("known_for_department") == "Directing": if director.get("known_for_department") == "Directing":
# 获取中文名 xdirector = DomUtils.add_node(doc, root, "director", director.get("name") or "")
cn_name = self.__get_chinese_name(director)
xdirector = DomUtils.add_node(doc, root, "director", cn_name)
xdirector.setAttribute("tmdbid", str(director.get("id") or "")) xdirector.setAttribute("tmdbid", str(director.get("id") or ""))
# 演员 # 演员
actors = episodeinfo.get("guest_stars") or [] actors = episodeinfo.get("guest_stars") or []
for actor in actors: for actor in actors:
if actor.get("known_for_department") == "Acting": if actor.get("known_for_department") == "Acting":
# 获取中文名
cn_name = self.__get_chinese_name(actor)
xactor = DomUtils.add_node(doc, root, "actor") xactor = DomUtils.add_node(doc, root, "actor")
DomUtils.add_node(doc, xactor, "name", cn_name) DomUtils.add_node(doc, xactor, "name", actor.get("name") or "")
DomUtils.add_node(doc, xactor, "type", "Actor") DomUtils.add_node(doc, xactor, "type", "Actor")
DomUtils.add_node(doc, xactor, "tmdbid", actor.get("id") or "") DomUtils.add_node(doc, xactor, "tmdbid", actor.get("id") or "")
# 保存文件 # 保存文件

View File

@ -13,6 +13,7 @@ from app.log import logger
from app.plugins import _PluginBase from app.plugins import _PluginBase
from app.schemas import MediaInfo, MediaServerItem from app.schemas import MediaInfo, MediaServerItem
from app.schemas.types import EventType, MediaType from app.schemas.types import EventType, MediaType
from app.utils.string import StringUtils
class PersonMeta(_PluginBase): class PersonMeta(_PluginBase):
@ -290,6 +291,24 @@ class PersonMeta(_PluginBase):
# 更新演员图片 # 更新演员图片
pass pass
def __get_chinese_name(self, person: dict):
"""
获取TMDB别名中的中文名
"""
if not person.get("id"):
return ""
try:
personinfo = self.tmdbchain.person_detail(person.get("id"))
if personinfo:
also_known_as = personinfo.get("also_known_as") or []
if also_known_as:
for name in also_known_as:
if name and StringUtils.is_chinese(name):
return name
except Exception as err:
logger.error(f"获取人物中文名失败:{err}")
return person.get("name") or ""
def stop_service(self): def stop_service(self):
""" """
停止服务 停止服务