feat 索引支持imdbid,但暂不启用

This commit is contained in:
jxxghp 2023-08-13 17:09:02 +08:00
parent ad00c74c6e
commit 762c477c16
4 changed files with 39 additions and 10 deletions

View File

@ -58,12 +58,20 @@ 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, page=page) error_flag, result_array = TNodeSpider(site).search(
keyword=search_word,
# imdbid=mediainfo.imdb_id if mediainfo else None,
page=page
)
elif site.get('parser') == "TorrentLeech": elif site.get('parser') == "TorrentLeech":
error_flag, result_array = TorrentLeech(site).search(keyword=search_word, page=page) 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,
# imdbid=mediainfo.imdb_id if mediainfo else None,
indexer=site, indexer=site,
mtype=mediainfo.type if mediainfo else None, mtype=mediainfo.type if mediainfo else None,
page=page page=page
@ -92,12 +100,14 @@ class IndexerModule(_ModuleBase):
@staticmethod @staticmethod
def __spider_search(indexer: CommentedMap, def __spider_search(indexer: CommentedMap,
keyword: str = None, keyword: str = None,
imdbid: str = None,
mtype: MediaType = None, mtype: MediaType = None,
page: int = None) -> (bool, List[dict]): page: int = None) -> (bool, List[dict]):
""" """
根据关键字搜索单个站点 根据关键字搜索单个站点
:param: indexer: 站点配置 :param: indexer: 站点配置
:param: keyword: 关键字 :param: keyword: 关键字
:param: imdbid: imdbid
:param: page: 页码 :param: page: 页码
:param: mtype: 媒体类型 :param: mtype: 媒体类型
:param: timeout: 超时时间 :param: timeout: 超时时间
@ -106,6 +116,7 @@ class IndexerModule(_ModuleBase):
_spider = TorrentSpider(indexer=indexer, _spider = TorrentSpider(indexer=indexer,
mtype=mtype, mtype=mtype,
keyword=keyword, keyword=keyword,
imdbid=imdbid,
page=page) page=page)
return _spider.is_error, _spider.get_torrents() return _spider.is_error, _spider.get_torrents()

View File

@ -40,6 +40,8 @@ class TorrentSpider:
referer: str = None referer: str = None
# 搜索关键字 # 搜索关键字
keyword: str = None keyword: str = None
# 搜索IMDBID
imdbid: str = None
# 媒体类型 # 媒体类型
mtype: MediaType = None mtype: MediaType = None
# 搜索路径、方式配置 # 搜索路径、方式配置
@ -66,6 +68,7 @@ class TorrentSpider:
def __init__(self, def __init__(self,
indexer: CommentedMap, indexer: CommentedMap,
keyword: [str, list] = None, keyword: [str, list] = None,
imdbid: str = None,
page=None, page=None,
referer=None, referer=None,
mtype: MediaType = None): mtype: MediaType = None):
@ -73,6 +76,7 @@ class TorrentSpider:
设置查询参数 设置查询参数
:param indexer: 索引器 :param indexer: 索引器
:param keyword: 搜索关键字如果数组则为批量搜索 :param keyword: 搜索关键字如果数组则为批量搜索
:param imdbid: IMDB ID
:param page: 页码 :param page: 页码
:param referer: Referer :param referer: Referer
:param mtype: 媒体类型 :param mtype: 媒体类型
@ -80,6 +84,7 @@ class TorrentSpider:
if not indexer: if not indexer:
return return
self.keyword = keyword self.keyword = keyword
self.imdbid = imdbid
self.mtype = mtype self.mtype = mtype
self.indexerid = indexer.get('id') self.indexerid = indexer.get('id')
self.indexername = indexer.get('name') self.indexername = indexer.get('name')
@ -131,7 +136,7 @@ class TorrentSpider:
torrentspath = path.get('path') torrentspath = path.get('path')
break break
# 关键字搜索 # 精确搜索
if self.keyword: if self.keyword:
if isinstance(self.keyword, list): if isinstance(self.keyword, list):
@ -139,7 +144,8 @@ class TorrentSpider:
if self.batch: if self.batch:
delimiter = self.batch.get('delimiter') or ' ' delimiter = self.batch.get('delimiter') or ' '
space_replace = self.batch.get('space_replace') or ' ' space_replace = self.batch.get('space_replace') or ' '
search_word = delimiter.join([str(k).replace(' ', space_replace) for k in self.keyword]) search_word = delimiter.join([str(k).replace(' ',
space_replace) for k in self.keyword])
else: else:
search_word = " ".join(self.keyword) search_word = " ".join(self.keyword)
# 查询模式:或 # 查询模式:或
@ -151,7 +157,17 @@ class TorrentSpider:
search_mode = "0" search_mode = "0"
# 搜索URL # 搜索URL
if self.search.get("params"): indexer_params = self.search.get("params") or {}
if indexer_params:
# 支持IMDBID时优先使用IMDBID搜索
search_area = indexer_params.get("search_area") or 0
if self.imdbid and search_area:
search_word = self.imdbid
else:
search_word = self.keyword
# 不启用IMDBID搜索时需要将search_area移除
if search_area:
indexer_params.pop('search_area')
# 变量字典 # 变量字典
inputs_dict = { inputs_dict = {
"keyword": search_word "keyword": search_word
@ -159,11 +175,12 @@ class TorrentSpider:
# 查询参数 # 查询参数
params = { params = {
"search_mode": search_mode, "search_mode": search_mode,
"search_area": 0,
"page": self.page or 0, "page": self.page or 0,
"notnewword": 1 "notnewword": 1
} }
# 额外参数 # 额外参数
for key, value in self.search.get("params").items(): for key, value in indexer_params.items():
params.update({ params.update({
"%s" % key: str(value).format(**inputs_dict) "%s" % key: str(value).format(**inputs_dict)
}) })

View File

@ -49,15 +49,16 @@ class TNodeSpider:
if csrf_token: if csrf_token:
self._token = csrf_token.group(1) self._token = csrf_token.group(1)
def search(self, keyword: str, page: int = 0) -> Tuple[bool, List[dict]]: def search(self, keyword: str, imdbid: str = None, page: int = 0) -> Tuple[bool, List[dict]]:
if not self._token: if not self._token:
logger.warn(f"{self._name} 未获取到token无法搜索") logger.warn(f"{self._name} 未获取到token无法搜索")
return True, [] return True, []
search_type = "imdbid" if imdbid else "title"
params = { params = {
"page": int(page) + 1, "page": int(page) + 1,
"size": self._size, "size": self._size,
"type": "title", "type": search_type,
"keyword": keyword or "", "keyword": imdbid or keyword or "",
"sorter": "id", "sorter": "id",
"order": "desc", "order": "desc",
"tags": [], "tags": [],

File diff suppressed because one or more lines are too long