From b07c47551c87ac52a1bc8da2b8df1415a7ba59b2 Mon Sep 17 00:00:00 2001 From: jxxghp Date: Wed, 20 May 2026 09:51:19 +0800 Subject: [PATCH] fix: avoid none search keyword for haidan --- app/modules/indexer/spider/haidan.py | 3 ++- tests/test_indexer_spider_search_url.py | 20 ++++++++++++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/app/modules/indexer/spider/haidan.py b/app/modules/indexer/spider/haidan.py index 3566db19..cffb16f9 100644 --- a/app/modules/indexer/spider/haidan.py +++ b/app/modules/indexer/spider/haidan.py @@ -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 }) diff --git a/tests/test_indexer_spider_search_url.py b/tests/test_indexer_spider_search_url.py index da385b7b..c1edcadb 100644 --- a/tests/test_indexer_spider_search_url.py +++ b/tests/test_indexer_spider_search_url.py @@ -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"