feat: finish czzy spider implementation

This commit is contained in:
Harold
2026-04-18 11:23:39 +08:00
parent dcd658291d
commit 9d77eef40d
2 changed files with 55 additions and 0 deletions
+19
View File
@@ -200,6 +200,25 @@ class TestCZZYSpider(unittest.TestCase):
"https://video.example/wp.m3u8",
)
@patch.object(Spider, "_request_html")
def test_player_content_returns_pan_link_directly(self, mock_request_html):
result = self.spider.playerContent("网盘资源", "https://www.alipan.com/s/demo", {})
self.assertEqual(result["parse"], 0)
self.assertEqual(result["url"], "https://www.alipan.com/s/demo")
mock_request_html.assert_not_called()
@patch.object(Spider, "_request_html")
def test_player_content_resolves_iframe_chain(self, mock_request_html):
mock_request_html.side_effect = [
('<iframe src="/player-v2/123"></iframe>', "https://www.czzy89.com"),
("var mysvg='https://media.example/final.m3u8';", "https://www.czzy89.com"),
]
result = self.spider.playerContent("厂长资源", "https://www.czzy89.com/v_play/1.html", {})
self.assertEqual(result["parse"], 0)
self.assertEqual(result["url"], "https://media.example/final.m3u8")
self.assertIn("Referer", result["header"])
if __name__ == "__main__":
unittest.main()
+36
View File
@@ -275,6 +275,12 @@ class Spider(BaseSpider):
return ""
def _build_player_headers(self, referer):
return {
"User-Agent": self.headers["User-Agent"],
"Referer": referer,
}
def categoryContent(self, tid, pg, filter, extend):
path = self.category_paths.get(tid, self.category_paths["movie"]).format(pg=pg)
html, host = self._request_html(path, expect_xpath="//a[@href]")
@@ -291,3 +297,33 @@ class Spider(BaseSpider):
html, host = self._request_html(path, expect_xpath="//a[@href]")
items = self._parse_media_cards(html, host)
return self._page_result(items, pg)
def playerContent(self, flag, id, vipFlags):
if any(item in id for item in ["alipan.com", "aliyundrive.com", "quark"]):
return {"parse": 0, "playUrl": "", "url": id}
detail_html, host = self._request_html(id, expect_xpath="//iframe|//script")
iframe_url = self._extract_iframe_src(detail_html, host)
referer = id if id.startswith("http") else self._normalize_url(id, host)
if iframe_url:
iframe_html, _ = self._request_html(iframe_url, referer=referer)
final_url = self._extract_player_url_from_iframe(iframe_html)
if final_url:
return {
"parse": 0,
"playUrl": "",
"url": final_url,
"header": self._build_player_headers(iframe_url),
}
fallback = self._extract_player_url_from_iframe(detail_html)
if fallback:
return {
"parse": 0,
"playUrl": "",
"url": fallback,
"header": self._build_player_headers(referer),
}
return {"parse": 0, "playUrl": "", "url": ""}