fix api
This commit is contained in:
parent
fe89116fcb
commit
f461a5d5d2
@ -4,11 +4,15 @@ from fastapi import APIRouter, Depends
|
|||||||
from sqlalchemy.orm import Session
|
from sqlalchemy.orm import Session
|
||||||
|
|
||||||
from app import schemas
|
from app import schemas
|
||||||
|
from app.chain.douban import DoubanChain
|
||||||
from app.chain.media import MediaChain
|
from app.chain.media import MediaChain
|
||||||
|
from app.chain.tmdb import TmdbChain
|
||||||
|
from app.core.context import MediaInfo
|
||||||
from app.core.metainfo import MetaInfo
|
from app.core.metainfo import MetaInfo
|
||||||
from app.core.security import verify_token
|
from app.core.security import verify_token
|
||||||
from app.db import get_db
|
from app.db import get_db
|
||||||
from app.db.mediaserver_oper import MediaServerOper
|
from app.db.mediaserver_oper import MediaServerOper
|
||||||
|
from app.schemas import MediaType
|
||||||
|
|
||||||
router = APIRouter()
|
router = APIRouter()
|
||||||
|
|
||||||
@ -61,3 +65,29 @@ def exists(title: str = None,
|
|||||||
return schemas.Response(success=True if exist else False, data={
|
return schemas.Response(success=True if exist else False, data={
|
||||||
"item": exist or {}
|
"item": exist or {}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
|
@router.get("/{mediaid}", summary="查询媒体详情", response_model=schemas.MediaInfo)
|
||||||
|
def tmdb_info(mediaid: str, type_name: str,
|
||||||
|
_: schemas.TokenPayload = Depends(verify_token)) -> Any:
|
||||||
|
"""
|
||||||
|
根据媒体ID查询themoviedb或豆瓣媒体信息,type_name: 电影/电视剧
|
||||||
|
"""
|
||||||
|
mtype = MediaType(type_name)
|
||||||
|
if mediaid.startswith("tmdb:"):
|
||||||
|
result = TmdbChain().tmdb_info(int(mediaid[5:]), mtype)
|
||||||
|
return MediaInfo(tmdb_info=result).to_dict()
|
||||||
|
elif mediaid.startswith("douban:"):
|
||||||
|
# 查询豆瓣信息
|
||||||
|
doubaninfo = DoubanChain().douban_info(doubanid=mediaid[7:])
|
||||||
|
if not doubaninfo:
|
||||||
|
return schemas.MediaInfo()
|
||||||
|
result = DoubanChain().recognize_by_doubaninfo(doubaninfo)
|
||||||
|
if result:
|
||||||
|
# TMDB
|
||||||
|
return result.media_info.to_dict()
|
||||||
|
else:
|
||||||
|
# 豆瓣
|
||||||
|
return MediaInfo(douban_info=doubaninfo).to_dict()
|
||||||
|
else:
|
||||||
|
return schemas.MediaInfo()
|
||||||
|
@ -3,7 +3,6 @@ from typing import List, Any
|
|||||||
from fastapi import APIRouter, Depends
|
from fastapi import APIRouter, Depends
|
||||||
|
|
||||||
from app import schemas
|
from app import schemas
|
||||||
from app.chain.douban import DoubanChain
|
|
||||||
from app.chain.tmdb import TmdbChain
|
from app.chain.tmdb import TmdbChain
|
||||||
from app.core.context import MediaInfo
|
from app.core.context import MediaInfo
|
||||||
from app.core.security import verify_token
|
from app.core.security import verify_token
|
||||||
@ -173,23 +172,3 @@ def tmdb_season_episodes(tmdbid: int, season: int,
|
|||||||
return []
|
return []
|
||||||
else:
|
else:
|
||||||
return episodes_info
|
return episodes_info
|
||||||
|
|
||||||
|
|
||||||
@router.get("/{mediaid}", summary="TMDB详情", response_model=schemas.MediaInfo)
|
|
||||||
def tmdb_info(mediaid: str, type_name: str,
|
|
||||||
_: schemas.TokenPayload = Depends(verify_token)) -> Any:
|
|
||||||
"""
|
|
||||||
根据媒体ID查询themoviedb媒体信息,type_name: 电影/电视剧
|
|
||||||
"""
|
|
||||||
mtype = MediaType(type_name)
|
|
||||||
if mediaid.startswith("tmdb:"):
|
|
||||||
result = TmdbChain().tmdb_info(int(mediaid[5:]), mtype)
|
|
||||||
return MediaInfo(tmdb_info=result).to_dict()
|
|
||||||
elif mediaid.startswith("douban:"):
|
|
||||||
result = DoubanChain().recognize_by_doubanid(mediaid[7:])
|
|
||||||
if result:
|
|
||||||
return result.media_info.to_dict()
|
|
||||||
else:
|
|
||||||
return schemas.MediaInfo()
|
|
||||||
else:
|
|
||||||
return schemas.MediaInfo()
|
|
||||||
|
@ -23,6 +23,12 @@ class DoubanChain(ChainBase):
|
|||||||
if not doubaninfo:
|
if not doubaninfo:
|
||||||
logger.warn(f'未查询到豆瓣信息,豆瓣ID:{doubanid}')
|
logger.warn(f'未查询到豆瓣信息,豆瓣ID:{doubanid}')
|
||||||
return None
|
return None
|
||||||
|
return self.recognize_by_doubaninfo(doubaninfo)
|
||||||
|
|
||||||
|
def recognize_by_doubaninfo(self, doubaninfo: dict) -> Optional[Context]:
|
||||||
|
"""
|
||||||
|
根据豆瓣信息识别媒体信息
|
||||||
|
"""
|
||||||
# 使用原标题匹配
|
# 使用原标题匹配
|
||||||
meta = MetaInfo(title=doubaninfo.get("original_title") or doubaninfo.get("title"))
|
meta = MetaInfo(title=doubaninfo.get("original_title") or doubaninfo.get("title"))
|
||||||
# 处理类型
|
# 处理类型
|
||||||
@ -35,7 +41,7 @@ class DoubanChain(ChainBase):
|
|||||||
if not mediainfo:
|
if not mediainfo:
|
||||||
logger.warn(f'{meta.name} 未识别到TMDB媒体信息')
|
logger.warn(f'{meta.name} 未识别到TMDB媒体信息')
|
||||||
return Context(meta_info=meta, media_info=MediaInfo(douban_info=doubaninfo))
|
return Context(meta_info=meta, media_info=MediaInfo(douban_info=doubaninfo))
|
||||||
logger.info(f'{doubanid} 识别到媒体信息:{mediainfo.type.value} {mediainfo.title_year}{meta.season}')
|
logger.info(f'识别到媒体信息:{mediainfo.type.value} {mediainfo.title_year}{meta.season}')
|
||||||
mediainfo.set_douban_info(doubaninfo)
|
mediainfo.set_douban_info(doubaninfo)
|
||||||
return Context(meta_info=meta, media_info=mediainfo)
|
return Context(meta_info=meta, media_info=mediainfo)
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user