feat 搜索翻页

This commit is contained in:
jxxghp 2023-08-06 07:57:07 +08:00
parent 7e2680cca0
commit 1f922a1e39
4 changed files with 22 additions and 11 deletions

View File

@ -48,9 +48,11 @@ def search_by_tmdbid(mediaid: str,
@router.get("/title/{keyword}", summary="模糊搜索资源", response_model=List[schemas.Context]) @router.get("/title/{keyword}", summary="模糊搜索资源", response_model=List[schemas.Context])
async def search_by_title(keyword: str, async def search_by_title(keyword: str,
page: int = 1,
site: int = None,
_: schemas.TokenPayload = Depends(verify_token)) -> Any: _: schemas.TokenPayload = Depends(verify_token)) -> Any:
""" """
根据名称模糊搜索站点资源 根据名称模糊搜索站点资源
""" """
torrents = SearchChain().search_by_title(title=keyword) torrents = SearchChain().search_by_title(title=keyword, page=page, site=site)
return [Context(torrent_info=torrent).to_dict() for torrent in torrents] return [Context(torrent_info=torrent).to_dict() for torrent in torrents]

View File

@ -194,15 +194,18 @@ class ChainBase(metaclass=ABCMeta):
def search_torrents(self, site: CommentedMap, def search_torrents(self, site: CommentedMap,
mediainfo: Optional[MediaInfo] = None, mediainfo: Optional[MediaInfo] = None,
keyword: str = None) -> List[TorrentInfo]: keyword: str = None,
page: int = None) -> List[TorrentInfo]:
""" """
搜索一个站点的种子资源 搜索一个站点的种子资源
:param site: 站点 :param site: 站点
:param mediainfo: 识别的媒体信息 :param mediainfo: 识别的媒体信息
:param keyword: 搜索关键词如有按关键词搜索否则按媒体信息名称搜索 :param keyword: 搜索关键词如有按关键词搜索否则按媒体信息名称搜索
:param page: 页码
:reutrn: 资源列表 :reutrn: 资源列表
""" """
return self.run_module("search_torrents", mediainfo=mediainfo, site=site, keyword=keyword) return self.run_module("search_torrents", mediainfo=mediainfo, site=site,
keyword=keyword, page=page)
def refresh_torrents(self, site: CommentedMap) -> List[TorrentInfo]: def refresh_torrents(self, site: CommentedMap) -> List[TorrentInfo]:
""" """

View File

@ -46,14 +46,16 @@ class SearchChain(ChainBase):
self.systemconfig.set(SystemConfigKey.SearchResults, bytes_results) self.systemconfig.set(SystemConfigKey.SearchResults, bytes_results)
return results return results
def search_by_title(self, title: str) -> List[TorrentInfo]: def search_by_title(self, title: str, page: int = 1, site: int = None) -> List[TorrentInfo]:
""" """
根据标题搜索资源不识别不过滤直接返回站点内容 根据标题搜索资源不识别不过滤直接返回站点内容
:param title: 标题为空时返回所有站点首页内容 :param title: 标题为空时返回所有站点首页内容
:param page: 页码
:param site: 站点ID
""" """
logger.info(f'开始搜索资源,关键词:{title} ...') logger.info(f'开始搜索资源,关键词:{title} ...')
# 搜索 # 搜索
return self.__search_all_sites(keyword=title) or [] return self.__search_all_sites(keyword=title, sites=[site] if site else None, page=page) or []
def last_search_results(self) -> List[Context]: def last_search_results(self) -> List[Context]:
""" """
@ -225,12 +227,14 @@ class SearchChain(ChainBase):
def __search_all_sites(self, mediainfo: Optional[MediaInfo] = None, def __search_all_sites(self, mediainfo: Optional[MediaInfo] = None,
keyword: str = None, keyword: str = None,
sites: List[int] = None) -> Optional[List[TorrentInfo]]: sites: List[int] = None,
page: int = 1) -> Optional[List[TorrentInfo]]:
""" """
多线程搜索多个站点 多线程搜索多个站点
:param mediainfo: 识别的媒体信息 :param mediainfo: 识别的媒体信息
:param keyword: 搜索关键词如有按关键词搜索否则按媒体信息名称搜索 :param keyword: 搜索关键词如有按关键词搜索否则按媒体信息名称搜索
:param sites: 指定站点ID列表如有则只搜索指定站点否则搜索所有站点 :param sites: 指定站点ID列表如有则只搜索指定站点否则搜索所有站点
:param page: 搜索页码
:reutrn: 资源列表 :reutrn: 资源列表
""" """
# 未开启的站点不搜索 # 未开启的站点不搜索
@ -269,7 +273,7 @@ class SearchChain(ChainBase):
all_task = [] all_task = []
for site in indexer_sites: for site in indexer_sites:
task = executor.submit(self.search_torrents, mediainfo=mediainfo, task = executor.submit(self.search_torrents, mediainfo=mediainfo,
site=site, keyword=keyword) site=site, keyword=keyword, page=page)
all_task.append(task) all_task.append(task)
# 结果集 # 结果集
results = [] results = []

View File

@ -28,12 +28,13 @@ class IndexerModule(_ModuleBase):
return "INDEXER", "builtin" return "INDEXER", "builtin"
def search_torrents(self, site: CommentedMap, mediainfo: MediaInfo = None, def search_torrents(self, site: CommentedMap, mediainfo: MediaInfo = None,
keyword: str = None) -> List[TorrentInfo]: keyword: str = None, page: int = None) -> List[TorrentInfo]:
""" """
搜索一个站点 搜索一个站点
:param mediainfo: 识别的媒体信息 :param mediainfo: 识别的媒体信息
:param site: 站点 :param site: 站点
:param keyword: 搜索关键词如有按关键词搜索否则按媒体信息名称搜索 :param keyword: 搜索关键词如有按关键词搜索否则按媒体信息名称搜索
:param page: 页码
:return: 资源列表 :return: 资源列表
""" """
# 确认搜索的名字 # 确认搜索的名字
@ -57,14 +58,15 @@ class IndexerModule(_ModuleBase):
start_time = datetime.now() start_time = datetime.now()
try: try:
if site.get('parser') == "TNodeSpider": if site.get('parser') == "TNodeSpider":
error_flag, result_array = TNodeSpider(site).search(keyword=search_word) error_flag, result_array = TNodeSpider(site).search(keyword=search_word, page=page)
elif site.get('parser') == "TorrentLeech": elif site.get('parser') == "TorrentLeech":
error_flag, result_array = TorrentLeech(site).search(keyword=search_word) error_flag, result_array = TorrentLeech(site).search(keyword=search_word, page=page)
else: else:
error_flag, result_array = self.__spider_search( error_flag, result_array = self.__spider_search(
keyword=search_word, keyword=search_word,
indexer=site, indexer=site,
mtype=mediainfo.type if mediainfo else None mtype=mediainfo.type if mediainfo else None,
page=page
) )
except Exception as err: except Exception as err:
logger.error(f"{site.get('name')} 搜索出错:{err}") logger.error(f"{site.get('name')} 搜索出错:{err}")