From f461a5d5d2e17c2d02ef07228dbf1bdb83e2fcf4 Mon Sep 17 00:00:00 2001 From: jxxghp Date: Tue, 8 Aug 2023 08:33:59 +0800 Subject: [PATCH] fix api --- app/api/endpoints/media.py | 30 ++++++++++++++++++++++++++++++ app/api/endpoints/tmdb.py | 21 --------------------- app/chain/douban.py | 8 +++++++- 3 files changed, 37 insertions(+), 22 deletions(-) diff --git a/app/api/endpoints/media.py b/app/api/endpoints/media.py index 423c4902..07aec392 100644 --- a/app/api/endpoints/media.py +++ b/app/api/endpoints/media.py @@ -4,11 +4,15 @@ from fastapi import APIRouter, Depends from sqlalchemy.orm import Session from app import schemas +from app.chain.douban import DoubanChain 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.security import verify_token from app.db import get_db from app.db.mediaserver_oper import MediaServerOper +from app.schemas import MediaType router = APIRouter() @@ -61,3 +65,29 @@ def exists(title: str = None, return schemas.Response(success=True if exist else False, data={ "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() diff --git a/app/api/endpoints/tmdb.py b/app/api/endpoints/tmdb.py index 7d039a2c..06f3acac 100644 --- a/app/api/endpoints/tmdb.py +++ b/app/api/endpoints/tmdb.py @@ -3,7 +3,6 @@ from typing import List, Any from fastapi import APIRouter, Depends from app import schemas -from app.chain.douban import DoubanChain from app.chain.tmdb import TmdbChain from app.core.context import MediaInfo from app.core.security import verify_token @@ -173,23 +172,3 @@ def tmdb_season_episodes(tmdbid: int, season: int, return [] else: 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() diff --git a/app/chain/douban.py b/app/chain/douban.py index 2ff2cb17..cd1c6557 100644 --- a/app/chain/douban.py +++ b/app/chain/douban.py @@ -23,6 +23,12 @@ class DoubanChain(ChainBase): if not doubaninfo: logger.warn(f'未查询到豆瓣信息,豆瓣ID:{doubanid}') 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")) # 处理类型 @@ -35,7 +41,7 @@ class DoubanChain(ChainBase): if not mediainfo: logger.warn(f'{meta.name} 未识别到TMDB媒体信息') 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) return Context(meta_info=meta, media_info=mediainfo)