feat:中英文名依次匹配

This commit is contained in:
jxxghp
2024-04-07 16:20:33 +08:00
parent 59330657b2
commit 6a3e3f1562
2 changed files with 71 additions and 53 deletions
+26 -19
View File
@@ -65,44 +65,51 @@ class DoubanModule(_ModuleBase):
return None return None
if not meta: if not meta:
# 未提供元数据时,直接查询豆瓣信息,不使用缓存
cache_info = {} cache_info = {}
elif not meta.name: elif not meta.name:
logger.error("识别媒体信息时未提供元数据名称") logger.error("识别媒体信息时未提供元数据名称")
return None return None
else: else:
# 读取缓存
if mtype: if mtype:
meta.type = mtype meta.type = mtype
if doubanid: if doubanid:
meta.doubanid = doubanid meta.doubanid = doubanid
# 读取缓存
cache_info = self.cache.get(meta) cache_info = self.cache.get(meta)
# 识别豆瓣信息
if not cache_info or not cache: if not cache_info or not cache:
# 缓存没有或者强制不使用缓存 # 缓存没有或者强制不使用缓存
if doubanid: if doubanid:
# 直接查询详情 # 直接查询详情
info = self.douban_info(doubanid=doubanid, mtype=mtype or meta.type) info = self.douban_info(doubanid=doubanid, mtype=mtype or meta.type)
elif meta: elif meta:
if meta.begin_season: info = {}
logger.info(f"正在识别 {meta.name}{meta.begin_season}季 ...") # 使用中英文名分别识别
else: names = {meta.cn_name, meta.en_name} - {None}
logger.info(f"正在识别 {meta.name} ...") for name in names:
# 匹配豆瓣信息 if meta.begin_season:
match_info = self.match_doubaninfo(name=meta.name, logger.info(f"正在识别 {name}{meta.begin_season}季 ...")
mtype=mtype or meta.type, else:
year=meta.year, logger.info(f"正在识别 {name} ...")
season=meta.begin_season) # 匹配豆瓣信息
if match_info: match_info = self.match_doubaninfo(name=name,
# 匹配到豆瓣信息 mtype=mtype or meta.type,
info = self.douban_info( year=meta.year,
doubanid=match_info.get("id"), season=meta.begin_season)
mtype=mtype or meta.type if match_info:
) # 匹配到豆瓣信息
else: info = self.douban_info(
logger.info(f"{meta.name if meta else doubanid} 未匹配到豆瓣媒体信息") doubanid=match_info.get("id"),
return None mtype=mtype or meta.type
)
if info:
break
else: else:
logger.error("识别媒体信息时未提供元数据或豆瓣ID") logger.error("识别媒体信息时未提供元数据或豆瓣ID")
return None return None
# 保存到缓存 # 保存到缓存
if meta and cache: if meta and cache:
self.cache.update(meta, info) self.cache.update(meta, info)
+45 -34
View File
@@ -75,59 +75,69 @@ class TheMovieDbModule(_ModuleBase):
return None return None
if not meta: if not meta:
# 未提供元数据时,直接使用tmdbid查询,不使用缓存
cache_info = {} cache_info = {}
elif not meta.name: elif not meta.name:
logger.warn("识别媒体信息时未提供元数据名称") logger.warn("识别媒体信息时未提供元数据名称")
return None return None
else: else:
# 读取缓存
if mtype: if mtype:
meta.type = mtype meta.type = mtype
if tmdbid: if tmdbid:
meta.tmdbid = tmdbid meta.tmdbid = tmdbid
# 读取缓存
cache_info = self.cache.get(meta) cache_info = self.cache.get(meta)
# 识别匹配
if not cache_info or not cache: if not cache_info or not cache:
# 缓存没有或者强制不使用缓存 # 缓存没有或者强制不使用缓存
if tmdbid: if tmdbid:
# 直接查询详情 # 直接查询详情
info = self.tmdb.get_info(mtype=mtype, tmdbid=tmdbid) info = self.tmdb.get_info(mtype=mtype, tmdbid=tmdbid)
elif meta: elif meta:
if meta.begin_season: info = {}
logger.info(f"正在识别 {meta.name}{meta.begin_season}季 ...") # 使用中英文名分别识别
else: names = {meta.cn_name, meta.en_name} - {None}
logger.info(f"正在识别 {meta.name} ...") for name in names:
if meta.type == MediaType.UNKNOWN and not meta.year: if meta.begin_season:
info = self.tmdb.match_multi(meta.name) logger.info(f"正在识别 {name}{meta.begin_season}季 ...")
else:
if meta.type == MediaType.TV:
# 确定是电视
info = self.tmdb.match(name=meta.name,
year=meta.year,
mtype=meta.type,
season_year=meta.year,
season_number=meta.begin_season)
if not info:
# 去掉年份再查一次
info = self.tmdb.match(name=meta.name,
mtype=meta.type)
else: else:
# 有年份先按电影查 logger.info(f"正在识别 {name} ...")
info = self.tmdb.match(name=meta.name, if meta.type == MediaType.UNKNOWN and not meta.year:
year=meta.year, info = self.tmdb.match_multi(name)
mtype=MediaType.MOVIE) else:
# 没有再按电视剧查 if meta.type == MediaType.TV:
if not info: # 确定是电视
info = self.tmdb.match(name=meta.name, info = self.tmdb.match(name=name,
year=meta.year, year=meta.year,
mtype=MediaType.TV) mtype=meta.type,
if not info: season_year=meta.year,
# 去掉年份和类型再查一次 season_number=meta.begin_season)
info = self.tmdb.match_multi(name=meta.name) if not info:
# 去掉年份再查一次
info = self.tmdb.match(name=name,
mtype=meta.type)
else:
# 有年份先按电影查
info = self.tmdb.match(name=name,
year=meta.year,
mtype=MediaType.MOVIE)
# 没有再按电视剧查
if not info:
info = self.tmdb.match(name=name,
year=meta.year,
mtype=MediaType.TV)
if not info:
# 去掉年份和类型再查一次
info = self.tmdb.match_multi(name=name)
if not info: if not info:
# 从网站查询 # 从网站查询
info = self.tmdb.match_web(name=meta.name, info = self.tmdb.match_web(name=name,
mtype=meta.type) mtype=meta.type)
if info:
# 查到就退出
break
# 补充全量信息 # 补充全量信息
if info and not info.get("genres"): if info and not info.get("genres"):
info = self.tmdb.get_info(mtype=info.get("media_type"), info = self.tmdb.get_info(mtype=info.get("media_type"),
@@ -135,6 +145,7 @@ class TheMovieDbModule(_ModuleBase):
else: else:
logger.error("识别媒体信息时未提供元数据或tmdbid") logger.error("识别媒体信息时未提供元数据或tmdbid")
return None return None
# 保存到缓存 # 保存到缓存
if meta: if meta:
self.cache.update(meta, info) self.cache.update(meta, info)