fix: backfill ruyi list covers
This commit is contained in:
+50
-13
@@ -95,22 +95,59 @@ class TestRuYiSpider(unittest.TestCase):
|
|||||||
)
|
)
|
||||||
self.assertEqual(mock_request_json.call_args.args[0], {"ac": "list", "pg": "1", "pagesize": "20"})
|
self.assertEqual(mock_request_json.call_args.args[0], {"ac": "list", "pg": "1", "pagesize": "20"})
|
||||||
|
|
||||||
|
@patch.object(Spider, "_request_json")
|
||||||
|
def test_home_video_content_enriches_missing_cover_from_videolist(self, mock_request_json):
|
||||||
|
mock_request_json.side_effect = [
|
||||||
|
{
|
||||||
|
"list": [
|
||||||
|
{
|
||||||
|
"vod_id": "101",
|
||||||
|
"vod_name": "推荐影片",
|
||||||
|
"vod_pic": "",
|
||||||
|
"vod_remarks": "更新至1集",
|
||||||
|
"vod_year": "2025",
|
||||||
|
"type_id": "7",
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"list": [
|
||||||
|
{
|
||||||
|
"vod_id": "101",
|
||||||
|
"vod_pic": "/detail-cover.jpg",
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
]
|
||||||
|
result = self.spider.homeVideoContent()
|
||||||
|
self.assertEqual(result["list"][0]["vod_pic"], "https://ps.ryzypics.com/detail-cover.jpg")
|
||||||
|
self.assertEqual(
|
||||||
|
mock_request_json.call_args_list[1].args[0],
|
||||||
|
{"ac": "videolist", "ids": "101"},
|
||||||
|
)
|
||||||
|
|
||||||
@patch.object(Spider, "_request_json")
|
@patch.object(Spider, "_request_json")
|
||||||
def test_category_content_uses_default_sub_type_for_main_class(self, mock_request_json):
|
def test_category_content_uses_default_sub_type_for_main_class(self, mock_request_json):
|
||||||
mock_request_json.return_value = {
|
mock_request_json.side_effect = [
|
||||||
"list": [
|
{
|
||||||
{
|
"list": [
|
||||||
"vod_id": "202",
|
{
|
||||||
"vod_name": "动作电影",
|
"vod_id": "202",
|
||||||
"vod_pic": "",
|
"vod_name": "动作电影",
|
||||||
"vod_remarks": "HD",
|
"vod_pic": "",
|
||||||
"vod_year": "2024",
|
"vod_remarks": "HD",
|
||||||
"type_id": "7",
|
"vod_year": "2024",
|
||||||
}
|
"type_id": "7",
|
||||||
]
|
}
|
||||||
}
|
]
|
||||||
|
},
|
||||||
|
{"list": []},
|
||||||
|
]
|
||||||
result = self.spider.categoryContent("1", "2", False, {})
|
result = self.spider.categoryContent("1", "2", False, {})
|
||||||
self.assertEqual(mock_request_json.call_args.args[0], {"ac": "list", "t": "7", "pg": "2", "pagesize": "20"})
|
self.assertEqual(
|
||||||
|
mock_request_json.call_args_list[0].args[0],
|
||||||
|
{"ac": "list", "t": "7", "pg": "2", "pagesize": "20"},
|
||||||
|
)
|
||||||
self.assertEqual(result["page"], 2)
|
self.assertEqual(result["page"], 2)
|
||||||
self.assertEqual(result["limit"], 20)
|
self.assertEqual(result["limit"], 20)
|
||||||
self.assertEqual(result["list"][0]["vod_id"], "202")
|
self.assertEqual(result["list"][0]["vod_id"], "202")
|
||||||
|
|||||||
+28
-2
@@ -152,6 +152,29 @@ class Spider(BaseSpider):
|
|||||||
)
|
)
|
||||||
return result
|
return result
|
||||||
|
|
||||||
|
def _enrich_missing_covers(self, items):
|
||||||
|
missing_ids = [item["vod_id"] for item in items if not item.get("vod_pic")]
|
||||||
|
if not missing_ids:
|
||||||
|
return items
|
||||||
|
data = self._request_json({"ac": "videolist", "ids": ",".join(missing_ids)})
|
||||||
|
cover_map = {}
|
||||||
|
for item in data.get("list", []) or []:
|
||||||
|
current = item or {}
|
||||||
|
vod_id = str(current.get("vod_id", "")).strip()
|
||||||
|
if not vod_id:
|
||||||
|
continue
|
||||||
|
cover = (
|
||||||
|
self._get_pic_url(current.get("vod_pic", ""))
|
||||||
|
or self._get_pic_url(current.get("vod_img", ""))
|
||||||
|
or self._get_pic_url(current.get("pic", ""))
|
||||||
|
)
|
||||||
|
if cover:
|
||||||
|
cover_map[vod_id] = cover
|
||||||
|
for item in items:
|
||||||
|
if not item.get("vod_pic") and item["vod_id"] in cover_map:
|
||||||
|
item["vod_pic"] = cover_map[item["vod_id"]]
|
||||||
|
return items
|
||||||
|
|
||||||
def _build_filters(self):
|
def _build_filters(self):
|
||||||
filters = {}
|
filters = {}
|
||||||
for cls in self.classes:
|
for cls in self.classes:
|
||||||
@@ -180,12 +203,14 @@ class Spider(BaseSpider):
|
|||||||
|
|
||||||
def homeVideoContent(self):
|
def homeVideoContent(self):
|
||||||
data = self._request_json({"ac": "list", "pg": "1", "pagesize": "20"})
|
data = self._request_json({"ac": "list", "pg": "1", "pagesize": "20"})
|
||||||
return {"list": self._format_vod_list(data.get("list", []))}
|
items = self._format_vod_list(data.get("list", []))
|
||||||
|
return {"list": self._enrich_missing_covers(items)}
|
||||||
|
|
||||||
def categoryContent(self, tid, pg, filter, extend):
|
def categoryContent(self, tid, pg, filter, extend):
|
||||||
params = {"ac": "list", "t": self._resolve_type_id(tid, extend), "pg": str(pg), "pagesize": "20"}
|
params = {"ac": "list", "t": self._resolve_type_id(tid, extend), "pg": str(pg), "pagesize": "20"}
|
||||||
data = self._request_json(params)
|
data = self._request_json(params)
|
||||||
return self._page_result(self._format_vod_list(data.get("list", [])), pg, 20)
|
items = self._enrich_missing_covers(self._format_vod_list(data.get("list", [])))
|
||||||
|
return self._page_result(items, pg, 20)
|
||||||
|
|
||||||
def searchContent(self, key, quick, pg="1"):
|
def searchContent(self, key, quick, pg="1"):
|
||||||
keyword = str(key or "").strip()
|
keyword = str(key or "").strip()
|
||||||
@@ -198,6 +223,7 @@ class Spider(BaseSpider):
|
|||||||
for item in self._format_vod_list(data.get("list", []))
|
for item in self._format_vod_list(data.get("list", []))
|
||||||
if keyword.lower() in item["vod_name"].lower()
|
if keyword.lower() in item["vod_name"].lower()
|
||||||
]
|
]
|
||||||
|
items = self._enrich_missing_covers(items)
|
||||||
return self._page_result(items, page, 30)
|
return self._page_result(items, page, 30)
|
||||||
|
|
||||||
def _parse_play_groups(self, play_from, play_url):
|
def _parse_play_groups(self, play_from, play_url):
|
||||||
|
|||||||
Reference in New Issue
Block a user