mirror of
https://github.com/jxxghp/MoviePilot.git
synced 2026-10-31 20:34:48 +08:00
Skip requests when userid invalid (#6723)
This commit is contained in:
@@ -183,6 +183,17 @@ class SiteParserBase(metaclass=ABCMeta):
|
||||
"""
|
||||
return size_tools.parse_size(text)
|
||||
|
||||
def _has_valid_userid(self) -> bool:
|
||||
"""
|
||||
判断用户 ID 是否存在且有效,避免空 ID 触发站点的无效详情/做种请求。
|
||||
"""
|
||||
if self.userid is None:
|
||||
return False
|
||||
if isinstance(self.userid, str):
|
||||
user_id = self.userid.strip()
|
||||
return bool(user_id) and user_id != "0"
|
||||
return bool(self.userid) and self.userid != 0
|
||||
|
||||
def parse(self):
|
||||
"""
|
||||
解析站点信息
|
||||
@@ -216,13 +227,16 @@ class SiteParserBase(metaclass=ABCMeta):
|
||||
self._parse_user_base_info(self._index_html)
|
||||
# 解析用户详细信息
|
||||
if self._user_detail_page:
|
||||
self._parse_user_detail_info(
|
||||
self._get_page_content(
|
||||
url=urljoin(self._base_url, self._user_detail_page),
|
||||
params=self._user_detail_params,
|
||||
headers=self._user_detail_headers
|
||||
if not self._has_valid_userid():
|
||||
logger.warn(f"{self._site_name} 未解析到有效用户 ID,跳过用户详情页请求")
|
||||
else:
|
||||
self._parse_user_detail_info(
|
||||
self._get_page_content(
|
||||
url=urljoin(self._base_url, self._user_detail_page),
|
||||
params=self._user_detail_params,
|
||||
headers=self._user_detail_headers
|
||||
)
|
||||
)
|
||||
)
|
||||
# 解析用户未读消息
|
||||
if get_runtime_setting('SITE_MESSAGE'):
|
||||
self._pase_unread_msgs()
|
||||
@@ -291,6 +305,9 @@ class SiteParserBase(metaclass=ABCMeta):
|
||||
解析做种页面
|
||||
"""
|
||||
if self._torrent_seeding_page:
|
||||
if not self._has_valid_userid():
|
||||
logger.warn(f"{self._site_name} 未解析到有效用户 ID,跳过做种信息请求")
|
||||
return
|
||||
# 第一页
|
||||
next_page = self._parse_user_torrent_seeding_info(
|
||||
self._get_page_content(
|
||||
|
||||
@@ -66,3 +66,50 @@ def test_hddolby_reads_message_body_via_nexus_when_cookie_present(monkeypatch):
|
||||
assert head == "测试标题"
|
||||
assert date == "2026-07-21 10:00:00"
|
||||
assert content == "测试正文"
|
||||
|
||||
|
||||
def test_parser_skips_detail_and_seeding_requests_without_valid_userid(monkeypatch):
|
||||
class DummyParser(HDDolbySiteUserInfo):
|
||||
def _parse_site_page(self, html_text: str):
|
||||
self._user_detail_page = "userdetails.php?id="
|
||||
self._user_basic_page = None
|
||||
self._user_traffic_page = None
|
||||
self._torrent_seeding_page = "getusertorrentlistajax.php?userid="
|
||||
|
||||
def _parse_user_base_info(self, html_text: str):
|
||||
self.userid = None
|
||||
|
||||
def _parse_user_traffic_info(self, html_text: str):
|
||||
raise AssertionError("should not request traffic page without valid userid")
|
||||
|
||||
def _parse_user_torrent_seeding_info(self, html_text: str, multi_page: bool = False):
|
||||
raise AssertionError("should not request seeding list without valid userid")
|
||||
|
||||
def _parse_logged_in(self, html_text):
|
||||
return True
|
||||
|
||||
def _parse_message_unread_links(self, html_text: str, msg_links: list):
|
||||
return None
|
||||
|
||||
def _parse_message_content(self, html_text):
|
||||
return None, None, None
|
||||
|
||||
parser = DummyParser(
|
||||
site_name="高清杜比",
|
||||
url="https://www.hddolby.com/",
|
||||
site_cookie="",
|
||||
apikey="test-api-key",
|
||||
token=None,
|
||||
)
|
||||
calls = []
|
||||
|
||||
def fake_get_page_content(**kwargs):
|
||||
calls.append(kwargs.get("url", ""))
|
||||
return ""
|
||||
|
||||
monkeypatch.setattr(parser, "_get_page_content", fake_get_page_content)
|
||||
|
||||
parser.parse()
|
||||
|
||||
assert not any("userdetails.php?id=" in call for call in calls)
|
||||
assert not any("getusertorrentlistajax.php?userid=" in call for call in calls)
|
||||
|
||||
Reference in New Issue
Block a user