add 文件识别API

This commit is contained in:
jxxghp
2023-09-03 13:04:08 +08:00
parent 1338a061c4
commit 62df3f7c84
2 changed files with 39 additions and 1 deletions

View File

@ -17,7 +17,7 @@ from app.schemas import MediaType
router = APIRouter()
@router.get("/recognize", summary="识别媒体信息", response_model=schemas.Context)
@router.get("/recognize", summary="识别媒体信息(种子)", response_model=schemas.Context)
def recognize(title: str,
subtitle: str = None,
db: Session = Depends(get_db),
@ -32,6 +32,20 @@ def recognize(title: str,
return schemas.Context()
@router.get("/recognize_file", summary="识别媒体信息(文件)", response_model=schemas.Context)
def recognize(path: str,
db: Session = Depends(get_db),
_: schemas.TokenPayload = Depends(verify_token)) -> Any:
"""
根据文件路径识别媒体信息
"""
# 识别媒体信息
context = MediaChain(db).recognize_by_path(path)
if context:
return context.to_dict()
return schemas.Context()
@router.get("/search", summary="搜索媒体信息", response_model=List[schemas.MediaInfo])
def search_by_title(title: str,
page: int = 1,

View File

@ -1,3 +1,4 @@
from pathlib import Path
from typing import Optional, List, Tuple
from app.chain import ChainBase
@ -31,6 +32,29 @@ class MediaChain(ChainBase):
# 返回上下文
return Context(meta_info=metainfo, media_info=mediainfo)
def recognize_by_path(self, path: str) -> Optional[Context]:
"""
根据文件路径识别媒体信息
"""
logger.info(f'开始识别媒体信息,文件:{path} ...')
file_path = Path(path)
# 上级目录元数据
dir_meta = MetaInfo(title=file_path.parent.name)
# 文件元数据,不包含后缀
file_meta = MetaInfo(title=file_path.stem)
# 合并元数据
file_meta.merge(dir_meta)
# 识别媒体信息
mediainfo = self.recognize_media(meta=file_meta)
if not mediainfo:
logger.warn(f'{path} 未识别到媒体信息')
return Context(meta_info=file_meta)
logger.info(f'{path} 识别到媒体信息:{mediainfo.type.value} {mediainfo.title_year}')
# 更新媒体图片
self.obtain_images(mediainfo=mediainfo)
# 返回上下文
return Context(meta_info=file_meta, media_info=mediainfo)
def search(self, title: str) -> Tuple[MetaBase, List[MediaInfo]]:
"""
搜索媒体信息