diff --git a/py/tests/test_腾讯视频.py b/py/tests/test_腾讯视频.py index bf66530..91d7368 100644 --- a/py/tests/test_腾讯视频.py +++ b/py/tests/test_腾讯视频.py @@ -156,6 +156,31 @@ class TestTencentSpider(unittest.TestCase): "第1集$https://v.qq.com/x/cover/cid001/vid001.html#终极预告$https://v.qq.com/x/cover/cid001/vid002.html", ) + @patch.object(Spider, "_get_batch_video_info") + @patch.object(Spider, "fetch") + def test_detail_content_handles_nested_typ_and_nam_lists(self, mock_fetch, mock_get_batch_video_info): + mock_fetch.return_value = SimpleNamespace( + json=lambda: { + "c": { + "title": "示例影片", + "year": "2024", + "description": "剧情简介", + "pic": "/poster.jpg", + "video_ids": ["vid001"], + }, + "typ": [["动漫", "1"], ["冒险", "2"]], + "nam": [["演员甲", "a1"], ["演员乙", "a2"]], + "rec": "更新中", + } + ) + mock_get_batch_video_info.return_value = [{"vid": "vid001", "title": "1", "type": "正片"}] + + result = self.spider.detailContent(["cid001"]) + vod = result["list"][0] + + self.assertEqual(vod["type_name"], "动漫,冒险") + self.assertEqual(vod["vod_actor"], "演员甲,演员乙") + @patch.object(Spider, "post") def test_search_content_collects_normal_and_area_results(self, mock_post): mock_post.return_value = SimpleNamespace( diff --git a/py/腾讯视频.py b/py/腾讯视频.py index aad16f4..ec82668 100644 --- a/py/腾讯视频.py +++ b/py/腾讯视频.py @@ -84,6 +84,17 @@ class Spider(BaseSpider): raw = raw[: -len(strip_suffix)] return json.loads(raw) if raw else {} + def _join_text_list(self, values): + parts = [] + for item in values or []: + if isinstance(item, (list, tuple)): + text = next((str(value).strip() for value in item if str(value).strip()), "") + else: + text = str(item).strip() + if text: + parts.append(text) + return ",".join(parts) + def _get_batch_video_info(self, vids): results = [] for start in range(0, len(vids or []), 30): @@ -161,8 +172,8 @@ class Spider(BaseSpider): vod = { "vod_id": raw_id, "vod_name": ((payload.get("c") or {}).get("title") or ""), - "type_name": ",".join(payload.get("typ", []) or []), - "vod_actor": ",".join(payload.get("nam", []) or []), + "type_name": self._join_text_list(payload.get("typ", []) or []), + "vod_actor": self._join_text_list(payload.get("nam", []) or []), "vod_year": ((payload.get("c") or {}).get("year") or ""), "vod_content": ((payload.get("c") or {}).get("description") or ""), "vod_remarks": payload.get("rec", "") or "",