From 89a86258176ed5f853232dff3622c8a2e79edb2f Mon Sep 17 00:00:00 2001 From: Edward <73746306+WangEdward@users.noreply.github.com> Date: Sun, 18 Feb 2024 07:40:59 +0000 Subject: [PATCH] feat: english title from tmdb --- README.md | 1 + app/core/context.py | 7 ++++++ app/modules/filetransfer/__init__.py | 2 ++ app/modules/themoviedb/tmdbapi.py | 34 ++++++++++++++++++++++++++++ app/schemas/context.py | 2 ++ 5 files changed, 46 insertions(+) diff --git a/README.md b/README.md index 3e1e9653..99c49b4f 100644 --- a/README.md +++ b/README.md @@ -129,6 +129,7 @@ MoviePilot需要配套下载器和媒体服务器配合使用。 `MOVIE_RENAME_FORMAT`支持的配置项: > `title`: TMDB/豆瓣中的标题 + > `en_title`: TMDB中的英文标题 (暂不支持豆瓣) > `original_title`: TMDB/豆瓣中的原语种标题 > `name`: 从文件名中识别的名称(同时存在中英文时,优先使用中文) > `en_name`:从文件名中识别的英文名称(可能为空) diff --git a/app/core/context.py b/app/core/context.py index 95a419f3..29d00afb 100644 --- a/app/core/context.py +++ b/app/core/context.py @@ -135,6 +135,8 @@ class MediaInfo: type: MediaType = None # 媒体标题 title: str = None + # 英文标题 + en_title: str = None # 年份 year: str = None # 季 @@ -368,6 +370,8 @@ class MediaInfo: self.genre_ids = info.get('genre_ids') or [] # 原语种 self.original_language = info.get('original_language') + # 英文标题 + self.en_title = info.get('en_title') if self.type == MediaType.MOVIE: # 标题 self.title = info.get('title') @@ -439,6 +443,9 @@ class MediaInfo: # 标题 if not self.title: self.title = info.get("title") + # 英文标题,暂时不支持 + if not self.en_title: + self.en_title = info.get('original_title') # 原语种标题 if not self.original_title: self.original_title = info.get("original_title") diff --git a/app/modules/filetransfer/__init__.py b/app/modules/filetransfer/__init__.py index 5e3fb0e9..f78848ba 100644 --- a/app/modules/filetransfer/__init__.py +++ b/app/modules/filetransfer/__init__.py @@ -580,6 +580,8 @@ class FileTransferModule(_ModuleBase): return { # 标题 "title": __convert_invalid_characters(mediainfo.title), + # 英文标题 + "en_title": __convert_invalid_characters(mediainfo.en_title), # 原语种标题 "original_title": __convert_invalid_characters(mediainfo.original_title), # 原文件名 diff --git a/app/modules/themoviedb/tmdbapi.py b/app/modules/themoviedb/tmdbapi.py index d30b3137..a33878c0 100644 --- a/app/modules/themoviedb/tmdbapi.py +++ b/app/modules/themoviedb/tmdbapi.py @@ -555,6 +555,8 @@ class TmdbHelper: tmdb_info['names'] = self.__get_names(tmdb_info) # 转换中文标题 self.__update_tmdbinfo_cn_title(tmdb_info) + # 转换英文标题 + self.__update_tmdbinfo_en_title(tmdb_info) return tmdb_info @@ -595,6 +597,38 @@ class TmdbHelper: else: tmdb_info['name'] = cn_title + @staticmethod + def __update_tmdbinfo_en_title(tmdb_info: dict): + """ + 更新TMDB信息中的英文名称 + """ + + def __get_tmdb_english_title(tmdbinfo): + """ + 从别名中获取英文标题 + """ + if not tmdbinfo: + return None + translations = tmdb_info.get("translations", {}).get("translations", []) + for translation in translations: + if translation.get("iso_3166_1") == "US": + return translation.get("data", {}).get("title") if tmdbinfo.get("media_type") == MediaType.MOVIE \ + else translation.get("data", {}).get("name") + return None + + # 查找英文名 + org_title = ( + tmdb_info.get("original_title") + if tmdb_info.get("media_type") == MediaType.MOVIE + else tmdb_info.get("original_name") + ) + if tmdb_info.get("original_language") == "en": + tmdb_info['en_title'] = org_title + # TODO: 对于日文标题,使用罗马字作为英文标题可能更合适? + else: + en_title = __get_tmdb_english_title(tmdb_info) + tmdb_info['en_title'] = en_title or org_title + def __get_movie_detail(self, tmdbid: int, append_to_response: str = "images," diff --git a/app/schemas/context.py b/app/schemas/context.py index a0ca162c..79589ebf 100644 --- a/app/schemas/context.py +++ b/app/schemas/context.py @@ -67,6 +67,8 @@ class MediaInfo(BaseModel): type: Optional[str] = None # 媒体标题 title: Optional[str] = None + # 英文标题 + en_title: Optional[str] = None # 年份 year: Optional[str] = None # 标题(年份)