feat 搜索翻页
This commit is contained in:
parent
7e2680cca0
commit
1f922a1e39
@ -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]
|
||||||
|
@ -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]:
|
||||||
"""
|
"""
|
||||||
|
@ -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 = []
|
||||||
|
@ -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}")
|
||||||
|
Loading…
x
Reference in New Issue
Block a user