From 01fd56a01902ee64f05c2dbf8b544c56ef7a9883 Mon Sep 17 00:00:00 2001 From: jxxghp Date: Thu, 28 Sep 2023 20:24:47 +0800 Subject: [PATCH] =?UTF-8?q?feat=20=E6=BC=94=E8=81=8C=E4=BA=BA=E5=91=98?= =?UTF-8?q?=E4=BC=98=E5=85=88=E4=BD=BF=E7=94=A8TMDB=E4=B8=AD=E7=9A=84?= =?UTF-8?q?=E4=B8=AD=E6=96=87=E5=90=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/modules/themoviedb/scraper.py | 31 +++++++++++++++++++++++++++---- app/modules/themoviedb/tmdbapi.py | 20 ++++++++++++++++++++ 2 files changed, 47 insertions(+), 4 deletions(-) diff --git a/app/modules/themoviedb/scraper.py b/app/modules/themoviedb/scraper.py index b20e2a57..f5aad695 100644 --- a/app/modules/themoviedb/scraper.py +++ b/app/modules/themoviedb/scraper.py @@ -12,6 +12,7 @@ from app.schemas.types import MediaType from app.utils.common import retry from app.utils.dom import DomUtils from app.utils.http import RequestUtils +from app.utils.string import StringUtils class TmdbScraper: @@ -121,11 +122,29 @@ class TmdbScraper: except Exception as e: logger.error(f"{file_path} 刮削失败:{e}") - @staticmethod - def __gen_common_nfo(mediainfo: MediaInfo, doc, root): + def __gen_common_nfo(self, mediainfo: MediaInfo, doc, root): """ 生成公共NFO """ + + def __get_chinese_name(person: dict): + """ + 获取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 "" + # 添加时间 DomUtils.add_node(doc, root, "dateadded", time.strftime('%Y-%m-%d %H:%M:%S', @@ -155,12 +174,16 @@ class TmdbScraper: xoutline.appendChild(doc.createCDATASection(mediainfo.overview or "")) # 导演 for director in mediainfo.directors: - xdirector = DomUtils.add_node(doc, root, "director", director.get("name") or "") + # 获取中文名 + cn_name = __get_chinese_name(director) + xdirector = DomUtils.add_node(doc, root, "director", cn_name) xdirector.setAttribute("tmdbid", str(director.get("id") or "")) # 演员 for actor in mediainfo.actors: + # 获取中文名 + cn_name = __get_chinese_name(actor) xactor = DomUtils.add_node(doc, root, "actor") - DomUtils.add_node(doc, xactor, "name", actor.get("name") or "") + DomUtils.add_node(doc, xactor, "name", cn_name) 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, "order", actor.get("order") if actor.get("order") is not None else "") diff --git a/app/modules/themoviedb/tmdbapi.py b/app/modules/themoviedb/tmdbapi.py index 299787c1..00c11a23 100644 --- a/app/modules/themoviedb/tmdbapi.py +++ b/app/modules/themoviedb/tmdbapi.py @@ -1136,6 +1136,26 @@ class TmdbHelper: def get_person_detail(self, person_id: int) -> dict: """ 获取人物详情 + { + "adult": false, + "also_known_as": [ + "Michael Chen", + "Chen He", + "陈赫" + ], + "biography": "陈赫,xxx", + "birthday": "1985-11-09", + "deathday": null, + "gender": 2, + "homepage": "https://movie.douban.com/celebrity/1313841/", + "id": 1397016, + "imdb_id": "nm4369305", + "known_for_department": "Acting", + "name": "Chen He", + "place_of_birth": "Fuzhou,Fujian Province,China", + "popularity": 9.228, + "profile_path": "/2Bk39zVuoHUNHtpZ7LVg7OgkDd4.jpg" + } """ if not self.person: return {}