Merge pull request #1492 from WangEdward/main

feat: english title from tmdb
This commit is contained in:
jxxghp 2024-02-18 16:31:13 +08:00 committed by GitHub
commit f94d248383
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
6 changed files with 48 additions and 3 deletions

View File

@ -129,6 +129,7 @@ MoviePilot需要配套下载器和媒体服务器配合使用。
`MOVIE_RENAME_FORMAT`支持的配置项:
> `title` TMDB/豆瓣中的标题
> `en_title` TMDB中的英文标题 (暂不支持豆瓣)
> `original_title` TMDB/豆瓣中的原语种标题
> `name` 从文件名中识别的名称(同时存在中英文时,优先使用中文)
> `en_name`:从文件名中识别的英文名称(可能为空)

View File

@ -123,10 +123,8 @@ class SearchChain(ChainBase):
# 搜索关键词
if keyword:
keywords = [keyword]
elif mediainfo.original_title and mediainfo.title != mediainfo.original_title:
keywords = [mediainfo.title, mediainfo.original_title]
else:
keywords = [mediainfo.title]
keywords = list({mediainfo.title, mediainfo.original_title, mediainfo.en_title} - {None})
# 执行搜索
torrents: List[TorrentInfo] = self.__search_all_sites(
mediainfo=mediainfo,
@ -168,6 +166,7 @@ class SearchChain(ChainBase):
if mediainfo:
self.progress.start(ProgressKey.Search)
logger.info(f'开始匹配,总 {_total} 个资源 ...')
# 英文标题应该在别名/原标题中,不需要再匹配
logger.info(f"标题:{mediainfo.title},原标题:{mediainfo.original_title},别名:{mediainfo.names}")
self.progress.update(value=0, text=f'开始匹配,总 {_total} 个资源 ...', key=ProgressKey.Search)
for torrent in torrents:

View File

@ -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")

View File

@ -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),
# 原文件名

View File

@ -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,"

View File

@ -67,6 +67,8 @@ class MediaInfo(BaseModel):
type: Optional[str] = None
# 媒体标题
title: Optional[str] = None
# 英文标题
en_title: Optional[str] = None
# 年份
year: Optional[str] = None
# 标题(年份)