From c2db1748b40acb12c19049c041bd961e03cf0381 Mon Sep 17 00:00:00 2001 From: Harold <8866033@gmail.com> Date: Sun, 19 Apr 2026 16:44:22 +0800 Subject: [PATCH] feat: add ddys player routing --- py/tests/test_低端影视.py | 20 ++++++++++++++++++++ py/低端影视.py | 15 +++++++++++++++ 2 files changed, 35 insertions(+) diff --git a/py/tests/test_低端影视.py b/py/tests/test_低端影视.py index f7b3f8f..a47933b 100644 --- a/py/tests/test_低端影视.py +++ b/py/tests/test_低端影视.py @@ -185,6 +185,26 @@ class TestDDYSSpider(unittest.TestCase): self.assertEqual(result["list"][0]["vod_play_from"], "直连") self.assertEqual(result["list"][0]["vod_play_url"], "全集$/play/detail-demo") + def test_player_content_returns_full_url_for_direct_source(self): + result = self.spider.playerContent("DDYS", "/play/ep1", {}) + self.assertEqual(result["parse"], 0) + self.assertEqual(result["jx"], 0) + self.assertEqual(result["url"], "https://ddys.io/play/ep1") + self.assertEqual(result["header"]["Referer"], "https://ddys.io/") + + def test_player_content_returns_pan_link_without_rewriting(self): + result = self.spider.playerContent("quark", "https://pan.quark.cn/s/demo", {}) + self.assertEqual(result["parse"], 0) + self.assertEqual(result["jx"], 0) + self.assertEqual(result["url"], "https://pan.quark.cn/s/demo") + self.assertEqual(result["header"], {}) + + def test_player_content_treats_baidu_and_xunlei_as_pan_sources(self): + baidu = self.spider.playerContent("baidu", "https://pan.baidu.com/s/demo", {}) + xunlei = self.spider.playerContent("xunlei", "https://pan.xunlei.com/s/demo", {}) + self.assertEqual(baidu["url"], "https://pan.baidu.com/s/demo") + self.assertEqual(xunlei["url"], "https://pan.xunlei.com/s/demo") + if __name__ == "__main__": unittest.main() diff --git a/py/低端影视.py b/py/低端影视.py index d19b0b6..00c8461 100644 --- a/py/低端影视.py +++ b/py/低端影视.py @@ -267,3 +267,18 @@ class Spider(BaseSpider): vod = self._parse_detail_page(self._request_html(vod_id), vod_id) result["list"].append(vod) return result + + def _is_pan_flag(self, flag): + lowered = self._stringify(flag).lower() + return any(token in lowered for token in ["quark", "baidu", "xunlei"]) + + def playerContent(self, flag, id, vipFlags): + target = self._stringify(id).strip() + if self._is_pan_flag(flag): + return {"parse": 0, "jx": 0, "url": target, "header": {}} + return { + "parse": 0, + "jx": 0, + "url": self._build_url(target), + "header": dict(self.headers), + }