fix: rename bubuyingshi spider

This commit is contained in:
Harold
2026-04-24 21:24:01 +08:00
parent 04c3e45a88
commit 61c7c2a49f
2 changed files with 78 additions and 14 deletions
@@ -5,7 +5,7 @@ from unittest.mock import patch
ROOT = Path(__file__).resolve().parents[1]
MODULE = SourceFileLoader("bbys_spider", str(ROOT / "步步影视.py")).load_module()
MODULE = SourceFileLoader("bbys_spider", str(ROOT / "布布影视.py")).load_module()
Spider = MODULE.Spider
@@ -153,7 +153,7 @@ class TestBuBuYingShiSpider(unittest.TestCase):
self.assertIn("正片$线路二@1@/movie/main", data["vod_play_url"])
@patch.object(Spider, "_request_json")
def test_detail_content_handles_array_payload_and_packs_play_urls(self, mock_request_json):
def test_detail_content_uses_vodplayer_from_codes_and_show_names(self, mock_request_json):
mock_request_json.return_value = {
"data": [
{
@@ -167,18 +167,19 @@ class TestBuBuYingShiSpider(unittest.TestCase):
"vod_director": "",
"vod_content": "<p>一段简介</p>",
"vod_class": "剧情",
"vod_play_from": "线路一",
"vod_play_url": "第1集$/play/1",
"vod_play_from": "rose",
"vod_play_url": "第1集$rose_token",
}
]
],
"vodplayer": [{"from": "rose", "show": "SE蓝光", "decode_status": "1"}],
}
result = self.spider.detailContent(["18"])
detail = result["list"][0]
self.assertEqual(detail["vod_id"], "18")
self.assertEqual(detail["vod_content"], "一段简介")
self.assertEqual(detail["type_name"], "剧情")
self.assertEqual(detail["vod_play_from"], "线路一(1)")
self.assertEqual(detail["vod_play_url"], "第1集$线路一@1@/play/1")
self.assertEqual(detail["vod_play_from"], "SE蓝光(1)")
self.assertEqual(detail["vod_play_url"], "第1集$rose@1@rose_token")
def test_extract_decode_url_accepts_multiple_shapes(self):
self.assertEqual(self.spider._extract_decode_url({"data": "https://a.example/m3u8"}), "https://a.example/m3u8")
@@ -199,6 +200,15 @@ class TestBuBuYingShiSpider(unittest.TestCase):
self.assertEqual(result["playUrl"], "")
self.assertEqual(result["url"], "https://cdn.example/real.m3u8")
@patch.object(Spider, "_request_json")
def test_player_content_parses_non_binary_decode_status(self, mock_request_json):
mock_request_json.return_value = {"data": {"url": "https://cdn.example/jd4k.m3u8"}}
result = self.spider.playerContent("JD蓝光", "JD4K@2@JD-a8fa0064", {})
kwargs = mock_request_json.call_args.kwargs
self.assertEqual(kwargs["params"]["url"], "JD-a8fa0064")
self.assertEqual(kwargs["params"]["vodFrom"], "JD4K")
self.assertEqual(result["url"], "https://cdn.example/jd4k.m3u8")
@patch.object(Spider, "_request_json")
def test_player_content_sets_jx_for_major_video_sites(self, mock_request_json):
mock_request_json.return_value = {"data": {"url": "https://v.qq.com/x/cover/demo.html"}}
@@ -227,6 +237,18 @@ class TestBuBuYingShiSpider(unittest.TestCase):
result = self.spider.playerContent("线路一", "线路一@1@/play/404", {})
self.assertEqual(result["url"], "/play/404")
@patch.object(Spider, "_request_json")
def test_player_content_marks_disabled_decode_line_as_unplayable(self, mock_request_json):
mock_request_json.return_value = {
"code": 0,
"msg": "线路暂时停用,请稍后再试",
"data": "JD-2eb205f0c280bdb5b93e14c25d5e72140",
}
result = self.spider.playerContent("JD蓝光", "JD4K@2@JD-2eb205f0c280bdb5b93e14c25d5e72140", {})
self.assertEqual(result["parse"], 1)
self.assertEqual(result["jx"], 0)
self.assertEqual(result["url"], "")
if __name__ == "__main__":
unittest.main()