This commit is contained in:
jxxghp 2023-10-29 16:08:34 +08:00
parent 4bc7d47576
commit 312bd53079

View File

@ -1,4 +1,5 @@
from pathlib import Path
from typing import Tuple
import regex as re
@ -20,7 +21,7 @@ def MetaInfo(title: str, subtitle: str = None) -> MetaBase:
# 预处理标题
title, apply_words = WordsMatcher().prepare(title)
# 获取标题中媒体信息
title, mediainfo = find_mediainfo(title)
title, metainfo = find_metainfo(title)
# 判断是否处理文件
if title and Path(title).suffix.lower() in settings.RMT_MEDIAEXT:
isfile = True
@ -33,22 +34,22 @@ def MetaInfo(title: str, subtitle: str = None) -> MetaBase:
# 记录使用的识别词
meta.apply_words = apply_words or []
# 修正媒体信息
if mediainfo['tmdbid']:
meta.tmdbid = mediainfo['tmdbid']
if mediainfo['type']:
meta.type = mediainfo['type']
if mediainfo['begin_season']:
meta.begin_season = mediainfo['begin_season']
if mediainfo['end_season']:
meta.end_season = mediainfo['end_season']
if mediainfo['total_season']:
meta.total_season = mediainfo['total_season']
if mediainfo['begin_episode']:
meta.begin_episode = mediainfo['begin_episode']
if mediainfo['end_episode']:
meta.end_episode = mediainfo['end_episode']
if mediainfo['total_episode']:
meta.total_episode = mediainfo['total_episode']
if metainfo.get('tmdbid'):
meta.tmdbid = metainfo['tmdbid']
if metainfo.get('type'):
meta.type = metainfo['type']
if metainfo.get('begin_season'):
meta.begin_season = metainfo['begin_season']
if metainfo.get('end_season'):
meta.end_season = metainfo['end_season']
if metainfo.get('total_season'):
meta.total_season = metainfo['total_season']
if metainfo.get('begin_episode'):
meta.begin_episode = metainfo['begin_episode']
if metainfo.get('end_episode'):
meta.end_episode = metainfo['end_episode']
if metainfo.get('total_episode'):
meta.total_episode = metainfo['total_episode']
return meta
@ -86,11 +87,11 @@ def is_anime(name: str) -> bool:
return False
def find_mediainfo(title: str) -> (str, dict):
def find_metainfo(title: str) -> Tuple[str, dict]:
"""
从标题中提取媒体信息
"""
media_info = {
metainfo = {
'tmdbid': None,
'type': None,
'begin_season': None,
@ -101,54 +102,54 @@ def find_mediainfo(title: str) -> (str, dict):
'total_episode': None,
}
if not title:
return title, media_info
return title, metainfo
# 从标题中提取媒体信息 格式为{[tmdbid=xxx;type=xxx;s=xxx;e=xxx]}
results = re.findall(r'(?<={\[)[\W\w]+(?=]})', title)
if not results:
return title, media_info
return title, metainfo
for result in results:
tmdbid = re.findall(r'(?<=tmdbid=)\d+', result)
# 查找tmdbid信息
if tmdbid and tmdbid[0].isdigit():
media_info['tmdbid'] = tmdbid[0]
metainfo['tmdbid'] = tmdbid[0]
# 查找媒体类型
mtype = re.findall(r'(?<=type=)\d+', result)
if mtype:
match mtype[0]:
case "movie":
media_info['type'] = MediaType.MOVIE
metainfo['type'] = MediaType.MOVIE
case "tv":
media_info['type'] = MediaType.TV
metainfo['type'] = MediaType.TV
case _:
pass
# 查找季信息
begin_season = re.findall(r'(?<=s=)\d+', result)
if begin_season and begin_season[0].isdigit():
media_info['begin_season'] = int(begin_season[0])
metainfo['begin_season'] = int(begin_season[0])
end_season = re.findall(r'(?<=s=\d+-)\d+', result)
if end_season and end_season[0].isdigit():
media_info['end_season'] = int(end_season[0])
metainfo['end_season'] = int(end_season[0])
# 查找集信息
begin_episode = re.findall(r'(?<=e=)\d+', result)
if begin_episode and begin_episode[0].isdigit():
media_info['begin_episode'] = int(begin_episode[0])
metainfo['begin_episode'] = int(begin_episode[0])
end_episode = re.findall(r'(?<=e=\d+-)\d+', result)
if end_episode and end_episode[0].isdigit():
media_info['end_episode'] = int(end_episode[0])
metainfo['end_episode'] = int(end_episode[0])
# 去除title中该部分
if tmdbid or mtype or begin_season or end_season or begin_episode or end_episode:
title = title.replace(f"{{[{result}]}}", '')
# 计算季集总数
if media_info['begin_season'] and media_info['end_season']:
if media_info['begin_season'] > media_info['end_season']:
media_info['begin_season'], media_info['end_season'] = media_info['end_season'], media_info['begin_season']
media_info['total_season'] = media_info['end_season'] - media_info['begin_season'] + 1
elif media_info['begin_season'] and not media_info['end_season']:
media_info['total_season'] = 1
if media_info['begin_episode'] and media_info['end_episode']:
if media_info['begin_episode'] > media_info['end_episode']:
media_info['begin_episode'], media_info['end_episode'] = media_info['end_episode'], media_info['begin_episode']
media_info['total_episode'] = media_info['end_episode'] - media_info['begin_episode'] + 1
elif media_info['begin_episode'] and not media_info['end_episode']:
media_info['total_episode'] = 1
return title, media_info
if metainfo.get('begin_season') and metainfo.get('end_season'):
if metainfo['begin_season'] > metainfo['end_season']:
metainfo['begin_season'], metainfo['end_season'] = metainfo['end_season'], metainfo['begin_season']
metainfo['total_season'] = metainfo['end_season'] - metainfo['begin_season'] + 1
elif metainfo.get('begin_season') and not metainfo.get('end_season'):
metainfo['total_season'] = 1
if metainfo.get('begin_episode') and metainfo.get('end_episode'):
if metainfo['begin_episode'] > metainfo['end_episode']:
metainfo['begin_episode'], metainfo['end_episode'] = metainfo['end_episode'], metainfo['begin_episode']
metainfo['total_episode'] = metainfo['end_episode'] - metainfo['begin_episode'] + 1
elif metainfo.get('begin_episode') and not metainfo.get('end_episode'):
metainfo['total_episode'] = 1
return title, metainfo