feat: add jikanyingshi category and search
This commit is contained in:
@@ -111,6 +111,60 @@ class TestJiKanYingShiSpider(unittest.TestCase):
|
||||
self.assertEqual(filters["1"][0]["value"][1], {"n": "动作", "v": "动作"})
|
||||
self.assertEqual(filters["1"][-1]["value"][-1], {"n": "评分", "v": "score"})
|
||||
|
||||
@patch.object(Spider, "_fetch_api")
|
||||
def test_category_content_maps_extend_to_sk_api_params(self, mock_fetch_api):
|
||||
mock_fetch_api.return_value = {"data": [{"vod_id": "c1", "vod_name": "分类片"}]}
|
||||
|
||||
result = self.spider.categoryContent(
|
||||
"2",
|
||||
"3",
|
||||
False,
|
||||
{"sort": "hot", "area": "香港", "lang": "粤语", "year": "2025", "class": "动作"},
|
||||
)
|
||||
|
||||
self.assertEqual(
|
||||
mock_fetch_api.call_args.args,
|
||||
(
|
||||
"/sk-api/vod/list",
|
||||
{
|
||||
"typeId": "2",
|
||||
"page": 3,
|
||||
"limit": 18,
|
||||
"type": "hot",
|
||||
"area": "香港",
|
||||
"lang": "粤语",
|
||||
"year": "2025",
|
||||
"mtype": "",
|
||||
"extendtype": "动作",
|
||||
},
|
||||
),
|
||||
)
|
||||
self.assertEqual(result["page"], 3)
|
||||
self.assertNotIn("pagecount", result)
|
||||
|
||||
@patch.object(Spider, "_fetch_api")
|
||||
def test_search_content_returns_standard_page_payload(self, mock_fetch_api):
|
||||
mock_fetch_api.return_value = {"data": [{"vod_id": "s1", "vod_name": "繁花"}]}
|
||||
|
||||
result = self.spider.searchContent("繁花", False, "4")
|
||||
|
||||
self.assertEqual(
|
||||
mock_fetch_api.call_args.args,
|
||||
("/sk-api/search/pages", {"keyword": "繁花", "page": 4, "limit": 10, "typeId": -1}),
|
||||
)
|
||||
self.assertEqual(result["page"], 4)
|
||||
self.assertEqual(result["list"][0]["vod_id"], "s1")
|
||||
self.assertNotIn("pagecount", result)
|
||||
|
||||
@patch.object(Spider, "_fetch_api")
|
||||
def test_category_content_returns_empty_list_on_api_error(self, mock_fetch_api):
|
||||
mock_fetch_api.side_effect = RuntimeError("boom")
|
||||
|
||||
result = self.spider.categoryContent("1", "1", False, {})
|
||||
|
||||
self.assertEqual(result["list"], [])
|
||||
self.assertEqual(result["total"], 0)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
|
||||
+40
@@ -169,3 +169,43 @@ class Spider(BaseSpider):
|
||||
"filters": self._fetch_filters(classes),
|
||||
"list": self.homeVideoContent()["list"],
|
||||
}
|
||||
|
||||
def _page_result(self, items, pg, limit):
|
||||
values = list(items or [])
|
||||
return {
|
||||
"page": int(pg),
|
||||
"limit": limit,
|
||||
"total": len(values),
|
||||
"list": values,
|
||||
}
|
||||
|
||||
def categoryContent(self, tid, pg, filter, extend):
|
||||
options = dict(extend or {})
|
||||
try:
|
||||
data = self._fetch_api(
|
||||
"/sk-api/vod/list",
|
||||
{
|
||||
"typeId": str(tid),
|
||||
"page": int(pg),
|
||||
"limit": 18,
|
||||
"type": options.get("sort", "updateTime"),
|
||||
"area": options.get("area", ""),
|
||||
"lang": options.get("lang", ""),
|
||||
"year": options.get("year", ""),
|
||||
"mtype": "",
|
||||
"extendtype": options.get("class", ""),
|
||||
},
|
||||
)
|
||||
return self._page_result(data.get("data") or [], pg, 18)
|
||||
except Exception:
|
||||
return self._page_result([], pg, 18)
|
||||
|
||||
def searchContent(self, key, quick, pg="1"):
|
||||
try:
|
||||
data = self._fetch_api(
|
||||
"/sk-api/search/pages",
|
||||
{"keyword": str(key or ""), "page": int(pg), "limit": 10, "typeId": -1},
|
||||
)
|
||||
return self._page_result(data.get("data") or [], pg, 10)
|
||||
except Exception:
|
||||
return self._page_result([], pg, 10)
|
||||
|
||||
Reference in New Issue
Block a user