fix: avoid none search keyword for haidan

This commit is contained in:
jxxghp
2026-05-20 09:51:19 +08:00
parent 9e0846961f
commit b07c47551c
2 changed files with 22 additions and 1 deletions

View File

@@ -97,10 +97,11 @@ class HaiDanSpider:
else:
search_area = '0'
# urllib.urlencode 会把 None 编码成字面量 "None",空关键词浏览时必须显式传空字符串。
return __dict_to_query({
"isapi": "1",
"search_area": search_area, # 0-标题 1-简介较慢3-发种用户名 4-IMDb
"search": keyword,
"search": keyword or "",
"search_mode": "0", # 0-与 1-或 2-精准
"cat": categories
})

View File

@@ -1,6 +1,7 @@
from urllib.parse import parse_qs, urlparse
from app.modules.indexer.spider import SiteSpider
from app.modules.indexer.spider.haidan import HaiDanSpider
from app.schemas.types import MediaType
@@ -30,6 +31,15 @@ def _get_search_url(indexer: dict, keyword: str | list[str], mtype: MediaType =
return spider._SiteSpider__get_search_url()
def _get_haidan_params(keyword: str | None, mtype: MediaType = None) -> dict:
"""
调用 HaiDanSpider 私有参数构造逻辑,避免真实请求站点。
"""
spider = HaiDanSpider(indexer={"domain": "https://www.haidan.video/", "name": "海胆"})
params = parse_qs(spider._HaiDanSpider__get_params(keyword, mtype), keep_blank_values=True)
return {key: values[0] for key, values in params.items()}
def test_eastgame_imdb_search_uses_imdb_area():
"""
TLF 支持 IMDb ID 搜索时应使用站点配置的 IMDb 搜索区域。
@@ -154,3 +164,13 @@ def test_ttg_title_search_does_not_format_keyword():
query = parse_qs(urlparse(_get_search_url(indexer, "The Movie", MediaType.MOVIE)).query)
assert query["search_field"] == ["The Movie 分类:电影DVDRip"]
def test_haidan_empty_keyword_uses_blank_search_value():
"""
海胆空关键词浏览不能把 Python None 编码进 search 参数。
"""
params = _get_haidan_params(None)
assert params["search"] == ""
assert params["search_area"] == "0"