feat: finish czzy spider implementation
This commit is contained in:
@@ -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
@@ -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": ""}
|
||||
|
||||
Reference in New Issue
Block a user