From e24b3ed07a65254e30c804e0d643d45c058549c0 Mon Sep 17 00:00:00 2001 From: jxxghp Date: Thu, 6 Feb 2025 20:31:37 +0800 Subject: [PATCH] =?UTF-8?q?feat=EF=BC=9A=E4=BD=BF=E7=94=A8=E5=90=8D?= =?UTF-8?q?=E7=A7=B0=E3=80=81=E5=B9=B4=E4=BB=BD=E5=85=9C=E5=BA=95=E8=BD=AC?= =?UTF-8?q?=E6=8D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/api/endpoints/media.py | 10 +++++++++- app/api/endpoints/search.py | 23 ++++++++++++++++++++++- app/chain/subscribe.py | 2 +- 3 files changed, 32 insertions(+), 3 deletions(-) diff --git a/app/api/endpoints/media.py b/app/api/endpoints/media.py index 4f0dc9f3..42ec8bca 100644 --- a/app/api/endpoints/media.py +++ b/app/api/endpoints/media.py @@ -134,7 +134,7 @@ def category(_: schemas.TokenPayload = Depends(verify_token)) -> Any: @router.get("/{mediaid}", summary="查询媒体详情", response_model=schemas.MediaInfo) -def media_info(mediaid: str, type_name: str, +def media_info(mediaid: str, type_name: str, title: str = None, year: int = None, _: schemas.TokenPayload = Depends(verify_token)) -> Any: """ 根据媒体ID查询themoviedb或豆瓣媒体信息,type_name: 电影/电视剧 @@ -163,6 +163,14 @@ def media_info(mediaid: str, type_name: str, mediainfo = MediaChain().recognize_media(tmdbid=new_id, mtype=mtype) elif event_data.convert_type == "douban": mediainfo = MediaChain().recognize_media(doubanid=new_id, mtype=mtype) + elif title: + # 使用名称识别兜底 + meta = MetaInfo(title) + if year: + meta.year = year + if mtype: + meta.type = mtype + mediainfo = MediaChain().recognize_media(meta=meta) # 识别 if mediainfo: MediaChain().obtain_images(mediainfo) diff --git a/app/api/endpoints/search.py b/app/api/endpoints/search.py index 31950334..6eaa79af 100644 --- a/app/api/endpoints/search.py +++ b/app/api/endpoints/search.py @@ -7,6 +7,7 @@ from app.chain.media import MediaChain from app.chain.search import SearchChain from app.core.config import settings from app.core.event import eventmanager +from app.core.metainfo import MetaInfo from app.core.security import verify_token from app.schemas import MediaRecognizeConvertEventData from app.schemas.types import MediaType, ChainEventType @@ -27,6 +28,8 @@ def search_latest(_: schemas.TokenPayload = Depends(verify_token)) -> Any: def search_by_id(mediaid: str, mtype: str = None, area: str = "title", + title: str = None, + year: int = None, season: str = None, _: schemas.TokenPayload = Depends(verify_token)) -> Any: """ @@ -101,7 +104,25 @@ def search_by_id(mediaid: str, torrents = SearchChain().search_by_id(doubanid=search_id, mtype=mtype, area=area, season=season) else: - return schemas.Response(success=False, message="未知的媒体ID") + if not title: + return schemas.Response(success=False, message="未知的媒体ID") + # 使用名称识别兜底 + meta = MetaInfo(title) + if year: + meta.year = year + if mtype: + meta.type = mtype + if season: + meta.type = MediaType.TV + meta.begin_season = season + mediainfo = MediaChain().recognize_media(meta=meta) + if mediainfo: + if settings.RECOGNIZE_SOURCE == "themoviedb": + torrents = SearchChain().search_by_id(tmdbid=mediainfo.tmdb_id, + mtype=mtype, area=area, season=season) + else: + torrents = SearchChain().search_by_id(doubanid=mediainfo.douban_id, + mtype=mtype, area=area, season=season) # 返回搜索结果 if not torrents: return schemas.Response(success=False, message="未搜索到任何资源") diff --git a/app/chain/subscribe.py b/app/chain/subscribe.py index 5df4065b..63af834d 100644 --- a/app/chain/subscribe.py +++ b/app/chain/subscribe.py @@ -134,7 +134,7 @@ class SubscribeChain(ChainBase, metaclass=Singleton): # 使用名称识别兜底 if not mediainfo: - mediainfo = self.recognize_media(meta=metainfo, mtype=mtype) + mediainfo = self.recognize_media(meta=metainfo) # 识别失败 if not mediainfo: