add 文件识别API
This commit is contained in:
@ -17,7 +17,7 @@ from app.schemas import MediaType
|
|||||||
router = APIRouter()
|
router = APIRouter()
|
||||||
|
|
||||||
|
|
||||||
@router.get("/recognize", summary="识别媒体信息", response_model=schemas.Context)
|
@router.get("/recognize", summary="识别媒体信息(种子)", response_model=schemas.Context)
|
||||||
def recognize(title: str,
|
def recognize(title: str,
|
||||||
subtitle: str = None,
|
subtitle: str = None,
|
||||||
db: Session = Depends(get_db),
|
db: Session = Depends(get_db),
|
||||||
@ -32,6 +32,20 @@ def recognize(title: str,
|
|||||||
return schemas.Context()
|
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])
|
@router.get("/search", summary="搜索媒体信息", response_model=List[schemas.MediaInfo])
|
||||||
def search_by_title(title: str,
|
def search_by_title(title: str,
|
||||||
page: int = 1,
|
page: int = 1,
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
|
from pathlib import Path
|
||||||
from typing import Optional, List, Tuple
|
from typing import Optional, List, Tuple
|
||||||
|
|
||||||
from app.chain import ChainBase
|
from app.chain import ChainBase
|
||||||
@ -31,6 +32,29 @@ class MediaChain(ChainBase):
|
|||||||
# 返回上下文
|
# 返回上下文
|
||||||
return Context(meta_info=metainfo, media_info=mediainfo)
|
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]]:
|
def search(self, title: str) -> Tuple[MetaBase, List[MediaInfo]]:
|
||||||
"""
|
"""
|
||||||
搜索媒体信息
|
搜索媒体信息
|
||||||
|
Reference in New Issue
Block a user