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"})
|
||||
|
||||
@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")
|
||||
def test_category_content_uses_default_sub_type_for_main_class(self, mock_request_json):
|
||||
mock_request_json.return_value = {
|
||||
"list": [
|
||||
{
|
||||
"vod_id": "202",
|
||||
"vod_name": "动作电影",
|
||||
"vod_pic": "",
|
||||
"vod_remarks": "HD",
|
||||
"vod_year": "2024",
|
||||
"type_id": "7",
|
||||
}
|
||||
]
|
||||
}
|
||||
mock_request_json.side_effect = [
|
||||
{
|
||||
"list": [
|
||||
{
|
||||
"vod_id": "202",
|
||||
"vod_name": "动作电影",
|
||||
"vod_pic": "",
|
||||
"vod_remarks": "HD",
|
||||
"vod_year": "2024",
|
||||
"type_id": "7",
|
||||
}
|
||||
]
|
||||
},
|
||||
{"list": []},
|
||||
]
|
||||
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["limit"], 20)
|
||||
self.assertEqual(result["list"][0]["vod_id"], "202")
|
||||
|
||||
+28
-2
@@ -152,6 +152,29 @@ class Spider(BaseSpider):
|
||||
)
|
||||
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):
|
||||
filters = {}
|
||||
for cls in self.classes:
|
||||
@@ -180,12 +203,14 @@ class Spider(BaseSpider):
|
||||
|
||||
def homeVideoContent(self):
|
||||
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):
|
||||
params = {"ac": "list", "t": self._resolve_type_id(tid, extend), "pg": str(pg), "pagesize": "20"}
|
||||
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"):
|
||||
keyword = str(key or "").strip()
|
||||
@@ -198,6 +223,7 @@ class Spider(BaseSpider):
|
||||
for item in self._format_vod_list(data.get("list", []))
|
||||
if keyword.lower() in item["vod_name"].lower()
|
||||
]
|
||||
items = self._enrich_missing_covers(items)
|
||||
return self._page_result(items, page, 30)
|
||||
|
||||
def _parse_play_groups(self, play_from, play_url):
|
||||
|
||||
Reference in New Issue
Block a user