From 1f922a1e3997bd7d801ee97eec495f33df57755d Mon Sep 17 00:00:00 2001 From: jxxghp Date: Sun, 6 Aug 2023 07:57:07 +0800 Subject: [PATCH] =?UTF-8?q?feat=20=E6=90=9C=E7=B4=A2=E7=BF=BB=E9=A1=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/api/endpoints/search.py | 4 +++- app/chain/__init__.py | 7 +++++-- app/chain/search.py | 12 ++++++++---- app/modules/indexer/__init__.py | 10 ++++++---- 4 files changed, 22 insertions(+), 11 deletions(-) diff --git a/app/api/endpoints/search.py b/app/api/endpoints/search.py index 7a7aa38a..01f0cab3 100644 --- a/app/api/endpoints/search.py +++ b/app/api/endpoints/search.py @@ -48,9 +48,11 @@ def search_by_tmdbid(mediaid: str, @router.get("/title/{keyword}", summary="模糊搜索资源", response_model=List[schemas.Context]) async def search_by_title(keyword: str, + page: int = 1, + site: int = None, _: 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] diff --git a/app/chain/__init__.py b/app/chain/__init__.py index efcb308a..6b52501b 100644 --- a/app/chain/__init__.py +++ b/app/chain/__init__.py @@ -194,15 +194,18 @@ class ChainBase(metaclass=ABCMeta): def search_torrents(self, site: CommentedMap, mediainfo: Optional[MediaInfo] = None, - keyword: str = None) -> List[TorrentInfo]: + keyword: str = None, + page: int = None) -> List[TorrentInfo]: """ 搜索一个站点的种子资源 :param site: 站点 :param mediainfo: 识别的媒体信息 :param keyword: 搜索关键词,如有按关键词搜索,否则按媒体信息名称搜索 + :param page: 页码 :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]: """ diff --git a/app/chain/search.py b/app/chain/search.py index 861c572f..99ba8833 100644 --- a/app/chain/search.py +++ b/app/chain/search.py @@ -46,14 +46,16 @@ class SearchChain(ChainBase): self.systemconfig.set(SystemConfigKey.SearchResults, bytes_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 page: 页码 + :param site: 站点ID """ 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]: """ @@ -225,12 +227,14 @@ class SearchChain(ChainBase): def __search_all_sites(self, mediainfo: Optional[MediaInfo] = None, keyword: str = None, - sites: List[int] = None) -> Optional[List[TorrentInfo]]: + sites: List[int] = None, + page: int = 1) -> Optional[List[TorrentInfo]]: """ 多线程搜索多个站点 :param mediainfo: 识别的媒体信息 :param keyword: 搜索关键词,如有按关键词搜索,否则按媒体信息名称搜索 :param sites: 指定站点ID列表,如有则只搜索指定站点,否则搜索所有站点 + :param page: 搜索页码 :reutrn: 资源列表 """ # 未开启的站点不搜索 @@ -269,7 +273,7 @@ class SearchChain(ChainBase): all_task = [] for site in indexer_sites: task = executor.submit(self.search_torrents, mediainfo=mediainfo, - site=site, keyword=keyword) + site=site, keyword=keyword, page=page) all_task.append(task) # 结果集 results = [] diff --git a/app/modules/indexer/__init__.py b/app/modules/indexer/__init__.py index 45022f90..d57428d3 100644 --- a/app/modules/indexer/__init__.py +++ b/app/modules/indexer/__init__.py @@ -28,12 +28,13 @@ class IndexerModule(_ModuleBase): return "INDEXER", "builtin" 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 site: 站点 :param keyword: 搜索关键词,如有按关键词搜索,否则按媒体信息名称搜索 + :param page: 页码 :return: 资源列表 """ # 确认搜索的名字 @@ -57,14 +58,15 @@ class IndexerModule(_ModuleBase): start_time = datetime.now() try: 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": - error_flag, result_array = TorrentLeech(site).search(keyword=search_word) + error_flag, result_array = TorrentLeech(site).search(keyword=search_word, page=page) else: error_flag, result_array = self.__spider_search( keyword=search_word, indexer=site, - mtype=mediainfo.type if mediainfo else None + mtype=mediainfo.type if mediainfo else None, + page=page ) except Exception as err: logger.error(f"{site.get('name')} 搜索出错:{err}")