mirror of
https://github.com/jxxghp/MoviePilot.git
synced 2026-09-07 00:16:57 +08:00
@@ -31,6 +31,7 @@ def search_by_id(mediaid: str,
|
|||||||
title: str = None,
|
title: str = None,
|
||||||
year: int = None,
|
year: int = None,
|
||||||
season: str = None,
|
season: str = None,
|
||||||
|
sites: str = None,
|
||||||
_: schemas.TokenPayload = Depends(verify_token)) -> Any:
|
_: schemas.TokenPayload = Depends(verify_token)) -> Any:
|
||||||
"""
|
"""
|
||||||
根据TMDBID/豆瓣ID精确搜索站点资源 tmdb:/douban:/bangumi:
|
根据TMDBID/豆瓣ID精确搜索站点资源 tmdb:/douban:/bangumi:
|
||||||
@@ -39,6 +40,10 @@ def search_by_id(mediaid: str,
|
|||||||
mtype = MediaType(mtype)
|
mtype = MediaType(mtype)
|
||||||
if season:
|
if season:
|
||||||
season = int(season)
|
season = int(season)
|
||||||
|
if sites:
|
||||||
|
site_list = [int(site) for site in sites.split(",") if site]
|
||||||
|
else:
|
||||||
|
site_list = None
|
||||||
torrents = None
|
torrents = None
|
||||||
# 根据前缀识别媒体ID
|
# 根据前缀识别媒体ID
|
||||||
if mediaid.startswith("tmdb:"):
|
if mediaid.startswith("tmdb:"):
|
||||||
@@ -48,11 +53,13 @@ def search_by_id(mediaid: str,
|
|||||||
doubaninfo = MediaChain().get_doubaninfo_by_tmdbid(tmdbid=tmdbid, mtype=mtype)
|
doubaninfo = MediaChain().get_doubaninfo_by_tmdbid(tmdbid=tmdbid, mtype=mtype)
|
||||||
if doubaninfo:
|
if doubaninfo:
|
||||||
torrents = SearchChain().search_by_id(doubanid=doubaninfo.get("id"),
|
torrents = SearchChain().search_by_id(doubanid=doubaninfo.get("id"),
|
||||||
mtype=mtype, area=area, season=season)
|
mtype=mtype, area=area, season=season,
|
||||||
|
sites=site_list)
|
||||||
else:
|
else:
|
||||||
return schemas.Response(success=False, message="未识别到豆瓣媒体信息")
|
return schemas.Response(success=False, message="未识别到豆瓣媒体信息")
|
||||||
else:
|
else:
|
||||||
torrents = SearchChain().search_by_id(tmdbid=tmdbid, mtype=mtype, area=area, season=season)
|
torrents = SearchChain().search_by_id(tmdbid=tmdbid, mtype=mtype, area=area, season=season,
|
||||||
|
sites=site_list)
|
||||||
elif mediaid.startswith("douban:"):
|
elif mediaid.startswith("douban:"):
|
||||||
doubanid = mediaid.replace("douban:", "")
|
doubanid = mediaid.replace("douban:", "")
|
||||||
if settings.RECOGNIZE_SOURCE == "themoviedb":
|
if settings.RECOGNIZE_SOURCE == "themoviedb":
|
||||||
@@ -62,11 +69,13 @@ def search_by_id(mediaid: str,
|
|||||||
if tmdbinfo.get('season') and not season:
|
if tmdbinfo.get('season') and not season:
|
||||||
season = tmdbinfo.get('season')
|
season = tmdbinfo.get('season')
|
||||||
torrents = SearchChain().search_by_id(tmdbid=tmdbinfo.get("id"),
|
torrents = SearchChain().search_by_id(tmdbid=tmdbinfo.get("id"),
|
||||||
mtype=mtype, area=area, season=season)
|
mtype=mtype, area=area, season=season,
|
||||||
|
sites=site_list)
|
||||||
else:
|
else:
|
||||||
return schemas.Response(success=False, message="未识别到TMDB媒体信息")
|
return schemas.Response(success=False, message="未识别到TMDB媒体信息")
|
||||||
else:
|
else:
|
||||||
torrents = SearchChain().search_by_id(doubanid=doubanid, mtype=mtype, area=area, season=season)
|
torrents = SearchChain().search_by_id(doubanid=doubanid, mtype=mtype, area=area, season=season,
|
||||||
|
sites=site_list)
|
||||||
elif mediaid.startswith("bangumi:"):
|
elif mediaid.startswith("bangumi:"):
|
||||||
bangumiid = int(mediaid.replace("bangumi:", ""))
|
bangumiid = int(mediaid.replace("bangumi:", ""))
|
||||||
if settings.RECOGNIZE_SOURCE == "themoviedb":
|
if settings.RECOGNIZE_SOURCE == "themoviedb":
|
||||||
@@ -74,7 +83,8 @@ def search_by_id(mediaid: str,
|
|||||||
tmdbinfo = MediaChain().get_tmdbinfo_by_bangumiid(bangumiid=bangumiid)
|
tmdbinfo = MediaChain().get_tmdbinfo_by_bangumiid(bangumiid=bangumiid)
|
||||||
if tmdbinfo:
|
if tmdbinfo:
|
||||||
torrents = SearchChain().search_by_id(tmdbid=tmdbinfo.get("id"),
|
torrents = SearchChain().search_by_id(tmdbid=tmdbinfo.get("id"),
|
||||||
mtype=mtype, area=area, season=season)
|
mtype=mtype, area=area, season=season,
|
||||||
|
sites=site_list)
|
||||||
else:
|
else:
|
||||||
return schemas.Response(success=False, message="未识别到TMDB媒体信息")
|
return schemas.Response(success=False, message="未识别到TMDB媒体信息")
|
||||||
else:
|
else:
|
||||||
@@ -82,7 +92,8 @@ def search_by_id(mediaid: str,
|
|||||||
doubaninfo = MediaChain().get_doubaninfo_by_bangumiid(bangumiid=bangumiid)
|
doubaninfo = MediaChain().get_doubaninfo_by_bangumiid(bangumiid=bangumiid)
|
||||||
if doubaninfo:
|
if doubaninfo:
|
||||||
torrents = SearchChain().search_by_id(doubanid=doubaninfo.get("id"),
|
torrents = SearchChain().search_by_id(doubanid=doubaninfo.get("id"),
|
||||||
mtype=mtype, area=area, season=season)
|
mtype=mtype, area=area, season=season,
|
||||||
|
sites=site_list)
|
||||||
else:
|
else:
|
||||||
return schemas.Response(success=False, message="未识别到豆瓣媒体信息")
|
return schemas.Response(success=False, message="未识别到豆瓣媒体信息")
|
||||||
else:
|
else:
|
||||||
@@ -133,12 +144,13 @@ def search_by_id(mediaid: str,
|
|||||||
@router.get("/title", summary="模糊搜索资源", response_model=schemas.Response)
|
@router.get("/title", summary="模糊搜索资源", response_model=schemas.Response)
|
||||||
def search_by_title(keyword: str = None,
|
def search_by_title(keyword: str = None,
|
||||||
page: int = 0,
|
page: int = 0,
|
||||||
sites: List[int] = None,
|
sites: str = None,
|
||||||
_: schemas.TokenPayload = Depends(verify_token)) -> Any:
|
_: schemas.TokenPayload = Depends(verify_token)) -> Any:
|
||||||
"""
|
"""
|
||||||
根据名称模糊搜索站点资源,支持分页,关键词为空是返回首页资源
|
根据名称模糊搜索站点资源,支持分页,关键词为空是返回首页资源
|
||||||
"""
|
"""
|
||||||
torrents = SearchChain().search_by_title(title=keyword, page=page, sites=sites)
|
torrents = SearchChain().search_by_title(title=keyword, page=page,
|
||||||
|
sites=[int(site) for site in sites.split(",") if site] if sites else None)
|
||||||
if not torrents:
|
if not torrents:
|
||||||
return schemas.Response(success=False, message="未搜索到任何资源")
|
return schemas.Response(success=False, message="未搜索到任何资源")
|
||||||
return schemas.Response(success=True, data=[torrent.to_dict() for torrent in torrents])
|
return schemas.Response(success=True, data=[torrent.to_dict() for torrent in torrents])
|
||||||
|
|||||||
+5
-3
@@ -35,7 +35,8 @@ class SearchChain(ChainBase):
|
|||||||
self.torrenthelper = TorrentHelper()
|
self.torrenthelper = TorrentHelper()
|
||||||
|
|
||||||
def search_by_id(self, tmdbid: int = None, doubanid: str = None,
|
def search_by_id(self, tmdbid: int = None, doubanid: str = None,
|
||||||
mtype: MediaType = None, area: str = "title", season: int = None) -> List[Context]:
|
mtype: MediaType = None, area: str = "title", season: int = None,
|
||||||
|
sites: List[int] = None) -> List[Context]:
|
||||||
"""
|
"""
|
||||||
根据TMDBID/豆瓣ID搜索资源,精确匹配,不过滤本地存在的资源
|
根据TMDBID/豆瓣ID搜索资源,精确匹配,不过滤本地存在的资源
|
||||||
:param tmdbid: TMDB ID
|
:param tmdbid: TMDB ID
|
||||||
@@ -43,6 +44,7 @@ class SearchChain(ChainBase):
|
|||||||
:param mtype: 媒体,电影 or 电视剧
|
:param mtype: 媒体,电影 or 电视剧
|
||||||
:param area: 搜索范围,title or imdbid
|
:param area: 搜索范围,title or imdbid
|
||||||
:param season: 季数
|
:param season: 季数
|
||||||
|
:param sites: 站点ID列表
|
||||||
"""
|
"""
|
||||||
mediainfo = self.recognize_media(tmdbid=tmdbid, doubanid=doubanid, mtype=mtype)
|
mediainfo = self.recognize_media(tmdbid=tmdbid, doubanid=doubanid, mtype=mtype)
|
||||||
if not mediainfo:
|
if not mediainfo:
|
||||||
@@ -55,7 +57,7 @@ class SearchChain(ChainBase):
|
|||||||
season: NotExistMediaInfo(episodes=[])
|
season: NotExistMediaInfo(episodes=[])
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
results = self.process(mediainfo=mediainfo, area=area, no_exists=no_exists)
|
results = self.process(mediainfo=mediainfo, sites=sites, area=area, no_exists=no_exists)
|
||||||
# 保存到本地文件
|
# 保存到本地文件
|
||||||
bytes_results = pickle.dumps(results)
|
bytes_results = pickle.dumps(results)
|
||||||
self.save_cache(bytes_results, self.__result_temp_file)
|
self.save_cache(bytes_results, self.__result_temp_file)
|
||||||
@@ -75,7 +77,7 @@ class SearchChain(ChainBase):
|
|||||||
else:
|
else:
|
||||||
logger.info(f'开始浏览资源,站点:{sites} ...')
|
logger.info(f'开始浏览资源,站点:{sites} ...')
|
||||||
# 搜索
|
# 搜索
|
||||||
torrents = self.__search_all_sites(keywords=[title], sites=sites if sites else None, page=page) or []
|
torrents = self.__search_all_sites(keywords=[title], sites=sites, page=page) or []
|
||||||
if not torrents:
|
if not torrents:
|
||||||
logger.warn(f'{title} 未搜索到资源')
|
logger.warn(f'{title} 未搜索到资源')
|
||||||
return []
|
return []
|
||||||
|
|||||||
@@ -173,7 +173,7 @@ class TheMovieDbModule(_ModuleBase):
|
|||||||
if info and not info.get("genres"):
|
if info and not info.get("genres"):
|
||||||
info = self.tmdb.get_info(mtype=info.get("media_type"),
|
info = self.tmdb.get_info(mtype=info.get("media_type"),
|
||||||
tmdbid=info.get("id"))
|
tmdbid=info.get("id"))
|
||||||
else:
|
elif not info:
|
||||||
logger.error("识别媒体信息时未提供元数据或唯一且有效的tmdbid")
|
logger.error("识别媒体信息时未提供元数据或唯一且有效的tmdbid")
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user