diff --git a/py/tests/test_凡客TV.py b/py/tests/test_凡客TV.py new file mode 100644 index 0000000..975b50e --- /dev/null +++ b/py/tests/test_凡客TV.py @@ -0,0 +1,54 @@ +import unittest +from importlib.machinery import SourceFileLoader +from pathlib import Path + + +ROOT = Path(__file__).resolve().parents[1] +MODULE = SourceFileLoader("fktv_spider", str(ROOT / "凡客TV.py")).load_module() +Spider = MODULE.Spider + + +class TestFKTVSpider(unittest.TestCase): + def setUp(self): + Spider._instance = None + self.spider = Spider() + self.spider.init() + + def test_home_content_returns_expected_classes(self): + result = self.spider.homeContent(False) + self.assertEqual( + result["class"], + [ + {"type_id": "1", "type_name": "电影"}, + {"type_id": "2", "type_name": "剧集"}, + {"type_id": "4", "type_name": "动漫"}, + {"type_id": "3", "type_name": "综艺"}, + {"type_id": "8", "type_name": "短剧"}, + {"type_id": "6", "type_name": "纪录片"}, + {"type_id": "7", "type_name": "解说"}, + {"type_id": "5", "type_name": "音乐"}, + ], + ) + + def test_encode_and_decode_play_id_round_trip(self): + encoded = self.spider._encode_play_id( + { + "movie_id": "9001", + "link_id": "ep-1", + "line_id": "line-a", + "line_name": "线路A", + "episode_name": "第1集", + "type": "switch", + "page": "https://fktv.me/movie/detail/9001", + } + ) + payload = self.spider._decode_play_id(encoded) + self.assertEqual(payload["movie_id"], "9001") + self.assertEqual(payload["link_id"], "ep-1") + self.assertEqual(payload["line_id"], "line-a") + self.assertEqual(payload["episode_name"], "第1集") + self.assertEqual(payload["page"], "https://fktv.me/movie/detail/9001") + + +if __name__ == "__main__": + unittest.main() diff --git a/py/凡客TV.py b/py/凡客TV.py new file mode 100644 index 0000000..886cf2b --- /dev/null +++ b/py/凡客TV.py @@ -0,0 +1,48 @@ +# coding=utf-8 +import json +import sys + +from base.spider import Spider as BaseSpider + +sys.path.append("..") + + +class Spider(BaseSpider): + def __init__(self): + self.name = "凡客TV" + self.host = "https://fktv.me" + self.cookie = "_did=57nTmEknMZ146xw4KXGHDCHk1MjshRyY" + self.user_agent = ( + "Mozilla/5.0 (Windows NT 10.0; Win64; x64) " + "AppleWebKit/537.36 (KHTML, like Gecko) " + "Chrome/146.0.0.0 Safari/537.36 Edg/146.0.0.0" + ) + self.classes = [ + {"type_id": "1", "type_name": "电影"}, + {"type_id": "2", "type_name": "剧集"}, + {"type_id": "4", "type_name": "动漫"}, + {"type_id": "3", "type_name": "综艺"}, + {"type_id": "8", "type_name": "短剧"}, + {"type_id": "6", "type_name": "纪录片"}, + {"type_id": "7", "type_name": "解说"}, + {"type_id": "5", "type_name": "音乐"}, + ] + + def init(self, extend=""): + return None + + def getName(self): + return self.name + + def homeContent(self, filter): + return {"class": self.classes} + + def _encode_play_id(self, payload): + return json.dumps(payload, ensure_ascii=False, separators=(",", ":")) + + def _decode_play_id(self, value): + try: + decoded = json.loads(str(value or "").strip()) + except Exception: + decoded = {} + return decoded if isinstance(decoded, dict) else {}