This commit is contained in:
jxxghp 2023-11-11 14:14:09 +08:00
parent 25e7db5ac9
commit 7faaaf3dcd
4 changed files with 22 additions and 13 deletions

View File

@ -62,11 +62,18 @@ def exists(media_in: schemas.MediaInfo,
# 媒体信息 # 媒体信息
meta = MetaInfo(title=media_in.title) meta = MetaInfo(title=media_in.title)
mtype = MediaType(media_in.type) if media_in.type else None mtype = MediaType(media_in.type) if media_in.type else None
if mtype:
meta.type = mtype
if media_in.season:
meta.begin_season = media_in.season
meta.type = MediaType.TV
if media_in.year:
meta.year = media_in.year
if media_in.tmdb_id or media_in.douban_id: if media_in.tmdb_id or media_in.douban_id:
mediainfo = MediaChain().recognize_media(meta=meta, mtype=mtype, mediainfo = MediaChain().recognize_media(meta=meta, mtype=mtype,
tmdbid=media_in.tmdb_id, doubanid=media_in.douban_id) tmdbid=media_in.tmdb_id, doubanid=media_in.douban_id)
else: else:
mediainfo = MediaChain().recognize_by_title(title=f"{media_in.title} {media_in.year}") mediainfo = MediaChain().recognize_by_meta(metainfo=meta)
# 查询缺失信息 # 查询缺失信息
if not mediainfo or not mediainfo.tmdb_id: if not mediainfo or not mediainfo.tmdb_id:
raise HTTPException(status_code=404, detail="媒体信息不存在") raise HTTPException(status_code=404, detail="媒体信息不存在")

View File

@ -6,6 +6,7 @@ from sqlalchemy.orm import Session
from app import schemas from app import schemas
from app.chain.media import MediaChain from app.chain.media import MediaChain
from app.core.config import settings from app.core.config import settings
from app.core.context import Context
from app.core.metainfo import MetaInfo from app.core.metainfo import MetaInfo
from app.core.security import verify_token, verify_uri_token from app.core.security import verify_token, verify_uri_token
from app.db import get_db from app.db import get_db
@ -23,9 +24,10 @@ def recognize(title: str,
根据标题副标题识别媒体信息 根据标题副标题识别媒体信息
""" """
# 识别媒体信息 # 识别媒体信息
context = MediaChain().recognize_by_title(title=title, subtitle=subtitle) metainfo = MetaInfo(title, subtitle)
if context: mediainfo = MediaChain().recognize_by_meta(metainfo)
return context.to_dict() if mediainfo:
return Context(meta_info=metainfo, media_info=mediainfo).to_dict()
return schemas.Context() return schemas.Context()
@ -41,7 +43,7 @@ def recognize2(title: str,
@router.get("/recognize_file", summary="识别媒体信息(文件)", response_model=schemas.Context) @router.get("/recognize_file", summary="识别媒体信息(文件)", response_model=schemas.Context)
def recognize(path: str, def recognize_file(path: str,
_: schemas.TokenPayload = Depends(verify_token)) -> Any: _: schemas.TokenPayload = Depends(verify_token)) -> Any:
""" """
根据文件路径识别媒体信息 根据文件路径识别媒体信息
@ -54,13 +56,13 @@ def recognize(path: str,
@router.get("/recognize_file2", summary="识别文件媒体信息API_TOKEN", response_model=schemas.Context) @router.get("/recognize_file2", summary="识别文件媒体信息API_TOKEN", response_model=schemas.Context)
def recognize2(path: str, def recognize_file2(path: str,
_: str = Depends(verify_uri_token)) -> Any: _: str = Depends(verify_uri_token)) -> Any:
""" """
根据文件路径识别媒体信息 API_TOKEN认证?token=xxx 根据文件路径识别媒体信息 API_TOKEN认证?token=xxx
""" """
# 识别媒体信息 # 识别媒体信息
return recognize(path) return recognize_file(path)
@router.get("/search", summary="搜索媒体信息", response_model=List[schemas.MediaInfo]) @router.get("/search", summary="搜索媒体信息", response_model=List[schemas.MediaInfo])

View File

@ -26,13 +26,13 @@ class MediaChain(ChainBase, metaclass=Singleton):
# 临时识别结果 {title, name, year, season, episode} # 临时识别结果 {title, name, year, season, episode}
recognize_temp: Optional[dict] = None recognize_temp: Optional[dict] = None
def recognize_by_title(self, title: str, subtitle: str = None) -> Optional[MediaInfo]: def recognize_by_meta(self, metainfo: MetaBase) -> Optional[MediaInfo]:
""" """
根据主副标题识别媒体信息 根据主副标题识别媒体信息
""" """
title = metainfo.title
subtitle = metainfo.subtitle
logger.info(f'开始识别媒体信息,标题:{title},副标题:{subtitle} ...') logger.info(f'开始识别媒体信息,标题:{title},副标题:{subtitle} ...')
# 识别元数据
metainfo = MetaInfo(title, subtitle)
# 识别媒体信息 # 识别媒体信息
mediainfo: MediaInfo = self.recognize_media(meta=metainfo) mediainfo: MediaInfo = self.recognize_media(meta=metainfo)
if not mediainfo: if not mediainfo:

View File

@ -15,7 +15,7 @@ class RecognizeTest(TestCase):
pass pass
def test_recognize(self): def test_recognize(self):
media_info = MediaChain().recognize_by_title(title="我和我的祖国 2019") media_info = MediaChain().recognize_by_meta(MetaInfo("我和我的祖国 2019"))
self.assertEqual(media_info.tmdb_id, 612845) self.assertEqual(media_info.tmdb_id, 612845)
exists = DownloadChain().get_no_exists_info(MetaInfo("我和我的祖国 2019"), media_info) exists = DownloadChain().get_no_exists_info(MetaInfo("我和我的祖国 2019"), media_info)
self.assertTrue(exists[0]) self.assertTrue(exists[0])