fix 搜索缓存

This commit is contained in:
jxxghp
2025-04-16 08:10:48 +08:00
parent 39999c9ee4
commit 24f170ff72
3 changed files with 23 additions and 22 deletions
+1 -1
View File
@@ -62,7 +62,7 @@ class FetchTorrentsAction(BaseAction):
params = FetchTorrentsParams(**params) params = FetchTorrentsParams(**params)
if params.search_type == "keyword": if params.search_type == "keyword":
# 按关键字搜索 # 按关键字搜索
torrents = self.searchchain.search_by_title(title=params.name, sites=params.sites, cache_local=False) torrents = self.searchchain.search_by_title(title=params.name, sites=params.sites)
for torrent in torrents: for torrent in torrents:
if global_vars.is_workflow_stopped(workflow_id): if global_vars.is_workflow_stopped(workflow_id):
break break
+16 -15
View File
@@ -58,12 +58,12 @@ def search_by_id(mediaid: str,
if doubaninfo: if doubaninfo:
torrents = SearchChain().search_by_id(doubanid=doubaninfo.get("id"), torrents = SearchChain().search_by_id(doubanid=doubaninfo.get("id"),
mtype=media_type, area=area, season=media_season, mtype=media_type, area=area, season=media_season,
sites=site_list) sites=site_list, cache_local=True)
else: else:
return schemas.Response(success=False, message="未识别到豆瓣媒体信息") return schemas.Response(success=False, message="未识别到豆瓣媒体信息")
else: else:
torrents = SearchChain().search_by_id(tmdbid=tmdbid, mtype=media_type, area=area, season=media_season, torrents = SearchChain().search_by_id(tmdbid=tmdbid, mtype=media_type, area=area, season=media_season,
sites=site_list) sites=site_list, cache_local=True)
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":
@@ -74,12 +74,12 @@ def search_by_id(mediaid: str,
media_season = tmdbinfo.get('season') media_season = tmdbinfo.get('season')
torrents = SearchChain().search_by_id(tmdbid=tmdbinfo.get("id"), torrents = SearchChain().search_by_id(tmdbid=tmdbinfo.get("id"),
mtype=media_type, area=area, season=media_season, mtype=media_type, area=area, season=media_season,
sites=site_list) sites=site_list, cache_local=True)
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=media_type, area=area, season=media_season, torrents = SearchChain().search_by_id(doubanid=doubanid, mtype=media_type, area=area, season=media_season,
sites=site_list) sites=site_list, cache_local=True)
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":
@@ -88,7 +88,7 @@ def search_by_id(mediaid: str,
if tmdbinfo: if tmdbinfo:
torrents = SearchChain().search_by_id(tmdbid=tmdbinfo.get("id"), torrents = SearchChain().search_by_id(tmdbid=tmdbinfo.get("id"),
mtype=media_type, area=area, season=media_season, mtype=media_type, area=area, season=media_season,
sites=site_list) sites=site_list, cache_local=True)
else: else:
return schemas.Response(success=False, message="未识别到TMDB媒体信息") return schemas.Response(success=False, message="未识别到TMDB媒体信息")
else: else:
@@ -97,7 +97,7 @@ def search_by_id(mediaid: str,
if doubaninfo: if doubaninfo:
torrents = SearchChain().search_by_id(doubanid=doubaninfo.get("id"), torrents = SearchChain().search_by_id(doubanid=doubaninfo.get("id"),
mtype=media_type, area=area, season=media_season, mtype=media_type, area=area, season=media_season,
sites=site_list) sites=site_list, cache_local=True)
else: else:
return schemas.Response(success=False, message="未识别到豆瓣媒体信息") return schemas.Response(success=False, message="未识别到豆瓣媒体信息")
else: else:
@@ -113,11 +113,11 @@ def search_by_id(mediaid: str,
if event_data.media_dict: if event_data.media_dict:
search_id = event_data.media_dict.get("id") search_id = event_data.media_dict.get("id")
if event_data.convert_type == "themoviedb": if event_data.convert_type == "themoviedb":
torrents = SearchChain().search_by_id(tmdbid=search_id, torrents = SearchChain().search_by_id(tmdbid=search_id, mtype=media_type, area=area,
mtype=media_type, area=area, season=media_season) season=media_season, cache_local=True)
elif event_data.convert_type == "douban": elif event_data.convert_type == "douban":
torrents = SearchChain().search_by_id(doubanid=search_id, torrents = SearchChain().search_by_id(doubanid=search_id, mtype=media_type, area=area,
mtype=media_type, area=area, season=media_season) season=media_season, cache_local=True)
else: else:
if not title: if not title:
return schemas.Response(success=False, message="未知的媒体ID") return schemas.Response(success=False, message="未知的媒体ID")
@@ -133,11 +133,11 @@ def search_by_id(mediaid: str,
mediainfo = MediaChain().recognize_media(meta=meta) mediainfo = MediaChain().recognize_media(meta=meta)
if mediainfo: if mediainfo:
if settings.RECOGNIZE_SOURCE == "themoviedb": if settings.RECOGNIZE_SOURCE == "themoviedb":
torrents = SearchChain().search_by_id(tmdbid=mediainfo.tmdb_id, torrents = SearchChain().search_by_id(tmdbid=mediainfo.tmdb_id, mtype=media_type, area=area,
mtype=media_type, area=area, season=media_season) season=media_season, cache_local=True)
else: else:
torrents = SearchChain().search_by_id(doubanid=mediainfo.douban_id, torrents = SearchChain().search_by_id(doubanid=mediainfo.douban_id, mtype=media_type, area=area,
mtype=media_type, area=area, season=media_season) season=media_season, cache_local=True)
# 返回搜索结果 # 返回搜索结果
if not torrents: if not torrents:
return schemas.Response(success=False, message="未搜索到任何资源") return schemas.Response(success=False, message="未搜索到任何资源")
@@ -154,7 +154,8 @@ def search_by_title(keyword: Optional[str] = None,
根据名称模糊搜索站点资源,支持分页,关键词为空是返回首页资源 根据名称模糊搜索站点资源,支持分页,关键词为空是返回首页资源
""" """
torrents = SearchChain().search_by_title(title=keyword, page=page, torrents = SearchChain().search_by_title(title=keyword, page=page,
sites=[int(site) for site in sites.split(",") if site] if sites else None) sites=[int(site) for site in sites.split(",") if site] if sites else None,
cache_local=True)
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])
+6 -6
View File
@@ -36,7 +36,7 @@ class SearchChain(ChainBase):
def search_by_id(self, tmdbid: Optional[int] = None, doubanid: Optional[str] = None, def search_by_id(self, tmdbid: Optional[int] = None, doubanid: Optional[str] = None,
mtype: MediaType = None, area: Optional[str] = "title", season: Optional[int] = None, mtype: MediaType = None, area: Optional[str] = "title", season: Optional[int] = None,
sites: List[int] = None) -> List[Context]: sites: List[int] = None, cache_local: bool = False) -> List[Context]:
""" """
根据TMDBID/豆瓣ID搜索资源,精确匹配,不过滤本地存在的资源 根据TMDBID/豆瓣ID搜索资源,精确匹配,不过滤本地存在的资源
:param tmdbid: TMDB ID :param tmdbid: TMDB ID
@@ -45,6 +45,7 @@ class SearchChain(ChainBase):
:param area: 搜索范围,title or imdbid :param area: 搜索范围,title or imdbid
:param season: 季数 :param season: 季数
:param sites: 站点ID列表 :param sites: 站点ID列表
:param cache_local: 是否缓存到本地
""" """
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:
@@ -59,12 +60,12 @@ class SearchChain(ChainBase):
} }
results = self.process(mediainfo=mediainfo, sites=sites, area=area, no_exists=no_exists) results = self.process(mediainfo=mediainfo, sites=sites, area=area, no_exists=no_exists)
# 保存到本地文件 # 保存到本地文件
bytes_results = pickle.dumps(results) if cache_local:
self.save_cache(bytes_results, self.__result_temp_file) self.save_cache(pickle.dumps(results), self.__result_temp_file)
return results return results
def search_by_title(self, title: str, page: Optional[int] = 0, def search_by_title(self, title: str, page: Optional[int] = 0,
sites: List[int] = None, cache_local: Optional[bool] = True) -> List[Context]: sites: List[int] = None, cache_local: Optional[bool] = False) -> List[Context]:
""" """
根据标题搜索资源,不识别不过滤,直接返回站点内容 根据标题搜索资源,不识别不过滤,直接返回站点内容
:param title: 标题,为空时返回所有站点首页内容 :param title: 标题,为空时返回所有站点首页内容
@@ -86,8 +87,7 @@ class SearchChain(ChainBase):
torrent_info=torrent) for torrent in torrents] torrent_info=torrent) for torrent in torrents]
# 保存到本地文件 # 保存到本地文件
if cache_local: if cache_local:
bytes_results = pickle.dumps(contexts) self.save_cache(pickle.dumps(contexts), self.__result_temp_file)
self.save_cache(bytes_results, self.__result_temp_file)
return contexts return contexts
def last_search_results(self) -> List[Context]: def last_search_results(self) -> List[Context]: