This commit is contained in:
Harold
2026-05-29 09:03:30 +08:00
parent 6f2a3b5725
commit b18f4db4eb
7 changed files with 1104 additions and 1044 deletions
+736 -697
View File
@@ -1,21 +1,21 @@
{
"generated_at": "2026-05-29T08:08:01+08:00",
"generated_at": "2026-05-29T09:02:16+08:00",
"max_workers": 16,
"total_duration_ms": 19129.83,
"total_duration_ms": 73106.067,
"summary": {
"total": 78,
"success": 66,
"failed": 12,
"success_rate": 0.8462,
"total": 79,
"success": 65,
"failed": 14,
"success_rate": 0.8228,
"stage_failures": {
"module_load": 0,
"init": 0,
"home": 1,
"category": 4,
"detail": 0,
"category": 3,
"detail": 1,
"player": 1,
"url_check": 2,
"unexpected": 4
"url_check": 0,
"unexpected": 8
}
},
"results": [
@@ -27,14 +27,14 @@
"error": null,
"traceback": null,
"timings_ms": {
"module_load": 205.23,
"module_load": 120.741,
"init": 0.001,
"home": 534.676,
"category": 0.016,
"detail": 466.068,
"player": 654.056,
"url_check": 544.989,
"total": 2451.01
"home": 466.278,
"category": 5878.583,
"detail": 335.017,
"player": 10119.243,
"url_check": 424.737,
"total": 47368.223
},
"counts": {
"classes": 6,
@@ -43,18 +43,18 @@
"episodes": 1
},
"samples": {
"tid": "-1",
"vod_id": "ch45lxu73",
"tid": "0",
"vod_id": "ch45uoheg",
"flag": "alists",
"play_id": "34028|ch45lxu73"
"play_id": "34106|ch45uoheg"
},
"player": {
"parse": 0,
"url": "https://oss.douyinbit.com/m3u8/1aa724b0d0607022dd5e1e8f0c6053f7.m3u8",
"url": "https://oss.douyinbit.com/m3u8/343cbeca6f317f32363710b998c7ef04.m3u8",
"valid": true,
"reachable": true,
"status_code": 200,
"final_url": "https://oss.douyinbit.com/m3u8/1aa724b0d0607022dd5e1e8f0c6053f7.m3u8",
"final_url": "https://oss.douyinbit.com/m3u8/343cbeca6f317f32363710b998c7ef04.m3u8",
"reason": null
}
},
@@ -66,14 +66,14 @@
"error": null,
"traceback": null,
"timings_ms": {
"module_load": 220.936,
"init": 0.003,
"home": 0.002,
"category": 1679.553,
"detail": 769.894,
"player": 0.006,
"url_check": 140.798,
"total": 2849.105
"module_load": 179.126,
"init": 0.001,
"home": 0.001,
"category": 1029.942,
"detail": 632.934,
"player": 0.004,
"url_check": 147.691,
"total": 1990.228
},
"counts": {
"classes": 5,
@@ -105,14 +105,14 @@
"error": null,
"traceback": null,
"timings_ms": {
"module_load": 224.091,
"init": 0.003,
"home": 0.005,
"category": 687.324,
"detail": 803.844,
"player": 0.003,
"url_check": 0.051,
"total": 1751.312
"module_load": 208.396,
"init": 0.004,
"home": 0.001,
"category": 6164.305,
"detail": 7556.746,
"player": 0.004,
"url_check": 0.095,
"total": 13930.217
},
"counts": {
"classes": 12,
@@ -144,14 +144,14 @@
"error": null,
"traceback": null,
"timings_ms": {
"module_load": 204.619,
"module_load": 217.955,
"init": 0.001,
"home": 635.64,
"category": 183.793,
"detail": 278.806,
"player": 188.095,
"url_check": 290.063,
"total": 1781.7
"home": 6992.122,
"category": 6764.974,
"detail": 8634.911,
"player": 174.946,
"url_check": 590.015,
"total": 23375.658
},
"counts": {
"classes": 6,
@@ -171,7 +171,7 @@
"valid": true,
"reachable": true,
"status_code": 200,
"final_url": "https://car-lv.kuwo.cn/173a98f56416a6ff7d7a237512ae4bb8/6a18d8de/resource/1307392909/trackmedia/C200000W91kQ0efKLA.m4a?from=vip",
"final_url": "https://car-lv.kuwo.cn/3d706b8d4cef413ba68de7d10da44800/6a18e5aa/resource/1307392909/trackmedia/C200000W91kQ0efKLA.m4a?from=vip",
"reason": null
}
},
@@ -183,14 +183,14 @@
"error": null,
"traceback": null,
"timings_ms": {
"module_load": 254.377,
"module_load": 253.063,
"init": 0.001,
"home": 0.001,
"category": 720.26,
"detail": 411.754,
"category": 7434.915,
"detail": 530.47,
"player": 0.012,
"url_check": 192.982,
"total": 1582.786
"url_check": 198.484,
"total": 8417.534
},
"counts": {
"classes": 2,
@@ -222,14 +222,14 @@
"error": null,
"traceback": null,
"timings_ms": {
"module_load": 219.268,
"init": 0.015,
"home": 0.003,
"category": 467.004,
"detail": 185.421,
"player": 332.151,
"url_check": 95.263,
"total": 1340.276
"module_load": 148.131,
"init": 0.007,
"home": 0.002,
"category": 764.77,
"detail": 199.214,
"player": 304.547,
"url_check": 98.435,
"total": 1515.963
},
"counts": {
"classes": 6,
@@ -245,50 +245,50 @@
},
"player": {
"parse": 0,
"url": "https://isure.stream.qqmusic.qq.com/F00000205yHb2ohwLy.flac?guid=fbc2728332dd88fe30e105092730bcc5&vkey=B083F4BEE7C376CF5D12DBDE1FA84719FE99AAC2912200856407620228066308A2BB95C9B747A19D7AA5E870EE2E6E60416441D982BDCF2C__v2b94c3ae&uin=1152921504846230218&fromtag=119114&redirect=1",
"url": "https://isure.stream.qqmusic.qq.com/F00000205yHb2ohwLy.flac?guid=91873c6742541c73bad07d589aa980d7&vkey=6E0FD6591C4370BD3A55EE1039983A2D35C1B0F61E487816DA5A7331166B977078D6ED672461E0E3DB7FC42423CFFE491C774B185BE8B62E__v2b9abeb9&uin=1152921504846230218&fromtag=119114&redirect=1",
"valid": true,
"reachable": true,
"status_code": 200,
"final_url": "https://isure.stream.qqmusic.qq.com/F00000205yHb2ohwLy.flac?guid=fbc2728332dd88fe30e105092730bcc5&vkey=B083F4BEE7C376CF5D12DBDE1FA84719FE99AAC2912200856407620228066308A2BB95C9B747A19D7AA5E870EE2E6E60416441D982BDCF2C__v2b94c3ae&uin=1152921504846230218&fromtag=119114&redirect=1",
"final_url": "https://isure.stream.qqmusic.qq.com/F00000205yHb2ohwLy.flac?guid=91873c6742541c73bad07d589aa980d7&vkey=6E0FD6591C4370BD3A55EE1039983A2D35C1B0F61E487816DA5A7331166B977078D6ED672461E0E3DB7FC42423CFFE491C774B185BE8B62E__v2b9abeb9&uin=1152921504846230218&fromtag=119114&redirect=1",
"reason": null
}
},
{
"spider": "YouTube",
"file": "YouTube.txt",
"success": true,
"failed_stage": null,
"error": null,
"traceback": null,
"success": false,
"failed_stage": "unexpected",
"error": "HTTPSConnectionPool(host='www.youtube.com', port=443): Read timed out. (read timeout=5)",
"traceback": "Traceback (most recent call last):\n File \"/home/harold/workspace/atv-spiders/py/.venv/lib/python3.14/site-packages/urllib3/connectionpool.py\", line 464, in _make_request\n self._validate_conn(conn)\n ~~~~~~~~~~~~~~~~~~~^^^^^^\n File \"/home/harold/workspace/atv-spiders/py/.venv/lib/python3.14/site-packages/urllib3/connectionpool.py\", line 1093, in _validate_conn\n conn.connect()\n ~~~~~~~~~~~~^^\n File \"/home/harold/workspace/atv-spiders/py/.venv/lib/python3.14/site-packages/urllib3/connection.py\", line 796, in connect\n sock_and_verified = _ssl_wrap_socket_and_match_hostname(\n sock=sock,\n ...<14 lines>...\n assert_fingerprint=self.assert_fingerprint,\n )\n File \"/home/harold/workspace/atv-spiders/py/.venv/lib/python3.14/site-packages/urllib3/connection.py\", line 975, in _ssl_wrap_socket_and_match_hostname\n ssl_sock = ssl_wrap_socket(\n sock=sock,\n ...<8 lines>...\n tls_in_tls=tls_in_tls,\n )\n File \"/home/harold/workspace/atv-spiders/py/.venv/lib/python3.14/site-packages/urllib3/util/ssl_.py\", line 483, in ssl_wrap_socket\n ssl_sock = _ssl_wrap_socket_impl(sock, context, tls_in_tls, server_hostname)\nTimeoutError: _ssl.c:1063: The handshake operation timed out\n\nThe above exception was the direct cause of the following exception:\n\nTraceback (most recent call last):\n File \"/home/harold/workspace/atv-spiders/py/.venv/lib/python3.14/site-packages/requests/adapters.py\", line 645, in send\n resp = conn.urlopen(\n method=request.method,\n ...<9 lines>...\n chunked=chunked,\n )\n File \"/home/harold/workspace/atv-spiders/py/.venv/lib/python3.14/site-packages/urllib3/connectionpool.py\", line 841, in urlopen\n retries = retries.increment(\n method, url, error=new_e, _pool=self, _stacktrace=sys.exc_info()[2]\n )\n File \"/home/harold/workspace/atv-spiders/py/.venv/lib/python3.14/site-packages/urllib3/util/retry.py\", line 490, in increment\n raise reraise(type(error), error, _stacktrace)\n ~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/home/harold/workspace/atv-spiders/py/.venv/lib/python3.14/site-packages/urllib3/util/util.py\", line 39, in reraise\n raise value\n File \"/home/harold/workspace/atv-spiders/py/.venv/lib/python3.14/site-packages/urllib3/connectionpool.py\", line 787, in urlopen\n response = self._make_request(\n conn,\n ...<10 lines>...\n **response_kw,\n )\nurllib3.exceptions.ReadTimeoutError: HTTPSConnectionPool(host='www.youtube.com', port=443): Read timed out. (read timeout=5)\n\nDuring handling of the above exception, another exception occurred:\n\nTraceback (most recent call last):\n File \"/home/harold/workspace/atv-spiders/py/validate_spiders.py\", line 721, in validate_spider_file\n _validate_from_tid(\n ~~~~~~~~~~~~~~~~~~^\n spider=spider,\n ^^^^^^^^^^^^^^\n ...<6 lines>...\n logger=logger,\n ^^^^^^^^^^^^^^\n )\n ^\n File \"/home/harold/workspace/atv-spiders/py/validate_spiders.py\", line 433, in _validate_from_tid\n detail_result = _run_timed(result[\"timings_ms\"], \"detail\", spider.detailContent, clock, [vod_id])\n File \"/home/harold/workspace/atv-spiders/py/validate_spiders.py\", line 296, in _run_timed\n return func(*args, **kwargs)\n File \"/home/harold/workspace/tvbox-resources/py/YouTube.txt\", line 1076, in detailContent\n File \"/home/harold/workspace/atv-spiders/py/base/spider.py\", line 145, in fetch\n rsp = requests.get(url, params=params, cookies=cookies, headers=headers, timeout=timeout, verify=verify,\n stream=stream, allow_redirects=allow_redirects)\nrequests.exceptions.ReadTimeout: HTTPSConnectionPool(host='www.youtube.com', port=443): Read timed out. (read timeout=5)\n",
"timings_ms": {
"module_load": 214.71,
"init": 0.007,
"home": 0.06,
"category": 733.685,
"detail": 1830.815,
"player": 0.004,
"url_check": 815.018,
"total": 3635.813
"module_load": 190.52,
"init": 0.006,
"home": 0.073,
"category": 631.339,
"detail": 5011.848,
"player": 0.0,
"url_check": 0.0,
"total": 5860.93
},
"counts": {
"classes": 29,
"category_videos": 20,
"detail_videos": 1,
"episodes": 2
"detail_videos": 0,
"episodes": 0
},
"samples": {
"tid": "cat_recommend",
"vod_id": "yt:video:E3jcQgR3TNE",
"flag": "YouTube",
"play_id": "yt:video:E3jcQgR3TNE"
"flag": null,
"play_id": null
},
"player": {
"parse": 0,
"url": "https://www.youtube.com/watch?v=E3jcQgR3TNE",
"valid": true,
"reachable": true,
"status_code": 200,
"final_url": "https://www.youtube.com/watch?v=E3jcQgR3TNE",
"parse": null,
"url": "",
"valid": false,
"reachable": null,
"status_code": null,
"final_url": "",
"reason": null
}
},
@@ -300,14 +300,14 @@
"error": null,
"traceback": null,
"timings_ms": {
"module_load": 222.294,
"module_load": 192.587,
"init": 0.001,
"home": 0.001,
"category": 256.335,
"detail": 215.04,
"player": 0.006,
"url_check": 189.91,
"total": 917.308
"category": 7723.289,
"detail": 200.298,
"player": 0.007,
"url_check": 145.006,
"total": 8266.896
},
"counts": {
"classes": 6,
@@ -334,39 +334,39 @@
{
"spider": "youknow",
"file": "youknow.txt",
"success": true,
"failed_stage": null,
"error": null,
"traceback": null,
"success": false,
"failed_stage": "unexpected",
"error": "'NoneType' object has no attribute 'xpath'",
"traceback": "Traceback (most recent call last):\n File \"/home/harold/workspace/atv-spiders/py/validate_spiders.py\", line 721, in validate_spider_file\n _validate_from_tid(\n ~~~~~~~~~~~~~~~~~~^\n spider=spider,\n ^^^^^^^^^^^^^^\n ...<6 lines>...\n logger=logger,\n ^^^^^^^^^^^^^^\n )\n ^\n File \"/home/harold/workspace/atv-spiders/py/validate_spiders.py\", line 533, in _validate_from_tid\n raise last_error or ValidationError(\"detail\", \"没有可用的播放条目\")\nValidationError: HTTPSConnectionPool(host='cnvod.jimxtc.com', port=443): Read timed out. (read timeout=5)\n\nDuring handling of the above exception, another exception occurred:\n\nTraceback (most recent call last):\n File \"/home/harold/workspace/atv-spiders/py/validate_spiders.py\", line 737, in validate_spider_file\n _validate_from_tid(\n ~~~~~~~~~~~~~~~~~~^\n spider=spider,\n ^^^^^^^^^^^^^^\n ...<6 lines>...\n logger=logger,\n ^^^^^^^^^^^^^^\n )\n ^\n File \"/home/harold/workspace/atv-spiders/py/validate_spiders.py\", line 433, in _validate_from_tid\n detail_result = _run_timed(result[\"timings_ms\"], \"detail\", spider.detailContent, clock, [vod_id])\n File \"/home/harold/workspace/atv-spiders/py/validate_spiders.py\", line 296, in _run_timed\n return func(*args, **kwargs)\n File \"/home/harold/workspace/tvbox-resources/py/youknow.txt\", line 296, in detailContent\n File \"/home/harold/workspace/tvbox-resources/py/youknow.txt\", line 209, in _parse_detail_page\nAttributeError: 'NoneType' object has no attribute 'xpath'\n",
"timings_ms": {
"module_load": 222.156,
"module_load": 195.061,
"init": 0.001,
"home": 0.001,
"category": 1879.61,
"detail": 1129.873,
"player": 1515.48,
"url_check": 1172.792,
"total": 5951.451
"category": 10461.589,
"detail": 1008.42,
"player": 8533.808,
"url_check": 5245.053,
"total": 36377.066
},
"counts": {
"classes": 7,
"category_videos": 232,
"detail_videos": 1,
"episodes": 1
"category_videos": 72,
"detail_videos": 0,
"episodes": 0
},
"samples": {
"tid": "index",
"vod_id": "135743",
"flag": "YouKnowTV",
"play_id": "eyJ2b2RfaWQiOiIxMzU3NDMiLCJlcGlzb2RlX2luZGV4IjoxLCJ0aXRsZSI6IjIwMjQxMjMxIiwiY2FuZGlkYXRlcyI6W3sic291cmNlIjoi57q_6LevMSIsInNvdXJjZV9pZCI6IjIiLCJlcGlzb2RlX3VybCI6Imh0dHBzOi8vd3d3LnlvdWtub3cudHYvcC8xMzU3NDMtMi0xLyJ9LHsic291cmNlIjoi57q_6LevMiIsInNvdXJjZV9pZCI6IjIiLCJlcGlzb2RlX3VybCI6Imh0dHBzOi8vd3d3LnlvdWtub3cudHYvcC8xMzU3NDMtMi0xLyJ9XX0"
"tid": "drama",
"vod_id": "204169",
"flag": null,
"play_id": null
},
"player": {
"parse": 0,
"url": "https://vip.dytt-cinema.com/20250224/11180_09dbc117/index.m3u8",
"valid": true,
"reachable": true,
"status_code": 200,
"final_url": "https://vip.dytt-cinema.com/20250224/11180_09dbc117/index.m3u8",
"parse": null,
"url": "",
"valid": false,
"reachable": null,
"status_code": null,
"final_url": "",
"reason": null
}
},
@@ -378,14 +378,14 @@
"error": null,
"traceback": null,
"timings_ms": {
"module_load": 231.727,
"module_load": 180.244,
"init": 0.004,
"home": 0.001,
"category": 877.22,
"detail": 815.566,
"category": 8059.652,
"detail": 729.621,
"player": 0.004,
"url_check": 0.049,
"total": 1948.759
"url_check": 0.061,
"total": 8971.552
},
"counts": {
"classes": 5,
@@ -417,14 +417,14 @@
"error": null,
"traceback": null,
"timings_ms": {
"module_load": 220.951,
"init": 0.001,
"home": 570.926,
"category": 982.3,
"detail": 538.748,
"player": 0.005,
"url_check": 153.948,
"total": 2500.045
"module_load": 149.37,
"init": 0.0,
"home": 487.954,
"category": 9265.546,
"detail": 10036.179,
"player": 0.012,
"url_check": 412.804,
"total": 20353.967
},
"counts": {
"classes": 5,
@@ -451,39 +451,39 @@
{
"spider": "世纪音乐",
"file": "世纪音乐.txt",
"success": true,
"failed_stage": null,
"error": null,
"success": false,
"failed_stage": "detail",
"error": "详情缺少播放源或播放列表",
"traceback": null,
"timings_ms": {
"module_load": 216.339,
"module_load": 115.515,
"init": 0.001,
"home": 1367.1,
"category": 138.229,
"detail": 114.196,
"player": 0.005,
"url_check": 514.859,
"total": 2386.558
"home": 427.237,
"category": 0.005,
"detail": 101.781,
"player": 0.0,
"url_check": 0.0,
"total": 747.077
},
"counts": {
"classes": 5,
"category_videos": 28,
"category_videos": 3,
"detail_videos": 1,
"episodes": 1
"episodes": 0
},
"samples": {
"tid": "home",
"vod_id": "song:hwcytykmtd",
"flag": "世纪音乐",
"play_id": "music:hwcytykmtd"
"tid": "rank_list",
"vod_id": "rank:rise",
"flag": null,
"play_id": null
},
"player": {
"parse": 0,
"url": "https://www.4c44.com/data/down.php?ac=music&id=hwcytykmtd",
"valid": true,
"reachable": true,
"status_code": 200,
"final_url": "http://m801.music.126.net/20260529083259/9b44a2fc33cbe94a333cacbd01b8ff77/jdymusic/obj/wo3DlMOGwrbDjj7DisKw/28237320729/7146/19cd/8a75/a1a73c948a3c0f887140745bae297a16.mp3?vuutv=9s9lwjHZcf+pgPtiEFoZZnE0SDSAJnVp7uReg0GzDyyGfbYkFrZ75v5203w4PMYw3SYk9ZeeUVhLwG0K+K99+rpb3m4pDPUoEcthBW5XLPI=",
"parse": null,
"url": "",
"valid": false,
"reachable": null,
"status_code": null,
"final_url": "",
"reason": null
}
},
@@ -495,14 +495,14 @@
"error": null,
"traceback": null,
"timings_ms": {
"module_load": 232.801,
"module_load": 214.159,
"init": 0.001,
"home": 0.001,
"category": 499.576,
"detail": 350.55,
"player": 885.245,
"url_check": 609.885,
"total": 2596.627
"category": 361.248,
"detail": 8853.247,
"player": 14953.589,
"url_check": 1603.389,
"total": 46095.287
},
"counts": {
"classes": 14,
@@ -511,18 +511,18 @@
"episodes": 1
},
"samples": {
"tid": "zgjun",
"vod_id": "ch45x6dqu",
"tid": "meiju",
"vod_id": "ch46tn28s",
"flag": "两个BT",
"play_id": "eyJwaWQiOiIvcGxheS9jaDQ1eDZkcXUiLCJzaWQiOiJjaDQ1eDZkcXUiLCJuYW1lIjoiMSJ9"
"play_id": "eyJwaWQiOiIvcGxheS9jaDQ2dG4yOHMiLCJzaWQiOiJjaDQ2dG4yOHMiLCJuYW1lIjoiMSJ9"
},
"player": {
"parse": 0,
"url": "https://zijieapi.douyinbyte.com/m3u8/343cbeca6f317f32363710b998c7ef04.m3u8",
"url": "https://zijieapi.douyinbyte.com/m3u8/2b085f2e90e2499c6dd0919420b47958.m3u8",
"valid": true,
"reachable": true,
"status_code": 200,
"final_url": "https://zijieapi.douyinbyte.com/m3u8/343cbeca6f317f32363710b998c7ef04.m3u8",
"final_url": "https://zijieapi.douyinbyte.com/m3u8/2b085f2e90e2499c6dd0919420b47958.m3u8",
"reason": null
}
},
@@ -534,14 +534,14 @@
"error": null,
"traceback": null,
"timings_ms": {
"module_load": 199.785,
"init": 0.003,
"home": 418.101,
"category": 346.29,
"detail": 1169.57,
"player": 0.02,
"url_check": 2074.28,
"total": 4256.312
"module_load": 160.969,
"init": 0.001,
"home": 397.749,
"category": 9008.52,
"detail": 10476.571,
"player": 0.041,
"url_check": 1598.883,
"total": 21652.949
},
"counts": {
"classes": 7,
@@ -561,7 +561,7 @@
"valid": true,
"reachable": true,
"status_code": 200,
"final_url": "https://d1jdnmkc1n5cn4.cloudfront.net/hls_overseas/cb7eb4f9379510933e190113d950bf462acdb157.m3u8",
"final_url": "https://d1jdnmkc1n5cn4.cloudfront.net/hls_overseas/b1e00dceb8697b100c7cc2bd549c95e9a6bdbe3b.m3u8",
"reason": null
}
},
@@ -573,14 +573,14 @@
"error": "分类视频列表为空",
"traceback": null,
"timings_ms": {
"module_load": 229.079,
"module_load": 204.399,
"init": 0.001,
"home": 0.001,
"category": 429.472,
"home": 0.0,
"category": 367.343,
"detail": 0.0,
"player": 0.0,
"url_check": 0.0,
"total": 1133.271
"total": 1481.952
},
"counts": {
"classes": 5,
@@ -612,14 +612,14 @@
"error": null,
"traceback": null,
"timings_ms": {
"module_load": 220.148,
"module_load": 156.412,
"init": 0.001,
"home": 0.002,
"category": 666.203,
"detail": 343.602,
"player": 0.004,
"url_check": 1069.163,
"total": 2333.679
"home": 0.001,
"category": 822.191,
"detail": 362.071,
"player": 0.003,
"url_check": 1051.979,
"total": 2394.221
},
"counts": {
"classes": 4,
@@ -651,14 +651,14 @@
"error": null,
"traceback": null,
"timings_ms": {
"module_load": 4.798,
"module_load": 3.674,
"init": 0.001,
"home": 0.001,
"category": 561.554,
"detail": 792.328,
"player": 0.013,
"url_check": 1208.309,
"total": 2567.662
"home": 0.0,
"category": 549.233,
"detail": 428.151,
"player": 0.016,
"url_check": 1108.868,
"total": 2090.455
},
"counts": {
"classes": 4,
@@ -685,19 +685,19 @@
{
"spider": "人人视频",
"file": "人人视频.txt",
"success": false,
"failed_stage": "url_check",
"error": "HTTP 403",
"success": true,
"failed_stage": null,
"error": null,
"traceback": null,
"timings_ms": {
"module_load": 8.668,
"module_load": 4.615,
"init": 0.001,
"home": 1503.376,
"category": 235.699,
"detail": 270.753,
"player": 291.073,
"url_check": 183.046,
"total": 4138.72
"home": 337.934,
"category": 235.942,
"detail": 215.98,
"player": 629.852,
"url_check": 152.516,
"total": 1577.721
},
"counts": {
"classes": 4,
@@ -706,19 +706,19 @@
"episodes": 1
},
"samples": {
"tid": "MOVIE",
"vod_id": "57598",
"tid": "TV",
"vod_id": "57302",
"flag": "人人专线",
"play_id": "57598@384965"
"play_id": "57302@384481"
},
"player": {
"parse": 0,
"url": "https://tfw91gr3dymt1ge31hcj3gezdcce.ourdvsssvip.com:20443/ws-302.bwcgee.cn/c05eb9a4599f71f19a5f6633b79f0402/6a80878b8495464ebbdddd2ab846263a-2b7a5f858875efd57569a959a4277a75-ld.mp4?key=f8098d60e963f5698667060e56a43866&time=1780027682119&clientType=web_pc&clientVersion=1.0.0&parseUsage=PLAY&uid=0&rk=9e8fe11f7fd048859de7403df14f61dd&hevc=false&seasonId=57598&wsiphost=ipdbme&wsrid_tag=6a18d8e2_PS-CTU-01lP718_22216-6603-s1t1780013282173&x-mamba-business-label=13423&redirect_cnt=0&ip_type=0&wshc=C&requery=0",
"valid": false,
"reachable": false,
"status_code": 403,
"final_url": "https://tfw91gr3dymt1ge31hcj3gezdcce.ourdvsssvip.com:20443/ws-302.bwcgee.cn/c05eb9a4599f71f19a5f6633b79f0402/6a80878b8495464ebbdddd2ab846263a-2b7a5f858875efd57569a959a4277a75-ld.mp4?key=f8098d60e963f5698667060e56a43866&time=1780027682119&clientType=web_pc&clientVersion=1.0.0&parseUsage=PLAY&uid=0&rk=9e8fe11f7fd048859de7403df14f61dd&hevc=false&seasonId=57598&wsiphost=ipdbme&wsrid_tag=6a18d8e2_PS-CTU-01lP718_22216-6603-s1t1780013282173&x-mamba-business-label=13423&redirect_cnt=0&ip_type=0&wshc=C&requery=0",
"reason": "HTTP 403"
"url": "https://a3fkpcum17k81vn.302.fledgecloud.com:56782/zj-302-cdn.bwcgee.cn/d03063e9500071f1a85f6733a68f0402/b76064d317a2492488bf8b53dd491b34-8e7c799ef03c37592e84ac7f50da07db-ld.mp4?auth_key=1780030934-5a0fe644ba5933ba3da02a36fc3e6eee-0-edcb6f4af6d1c138ff1bd2a54b5af388&clientType=web_pc&clientVersion=1.0.0&parseUsage=PLAY&uid=0&rk=a2879d1182814975b91af24f30c6bb3e&hevc=false&seasonId=57302",
"valid": true,
"reachable": true,
"status_code": 200,
"final_url": "https://a3fkpcum17k81vn.302.fledgecloud.com:56782/zj-302-cdn.bwcgee.cn/d03063e9500071f1a85f6733a68f0402/b76064d317a2492488bf8b53dd491b34-8e7c799ef03c37592e84ac7f50da07db-ld.mp4?auth_key=1780030934-5a0fe644ba5933ba3da02a36fc3e6eee-0-edcb6f4af6d1c138ff1bd2a54b5af388&clientType=web_pc&clientVersion=1.0.0&parseUsage=PLAY&uid=0&rk=a2879d1182814975b91af24f30c6bb3e&hevc=false&seasonId=57302",
"reason": null
}
},
{
@@ -729,14 +729,14 @@
"error": null,
"traceback": null,
"timings_ms": {
"module_load": 11.868,
"module_load": 9.083,
"init": 0.001,
"home": 0.001,
"category": 294.441,
"detail": 534.762,
"player": 0.002,
"url_check": 241.458,
"total": 1083.087
"category": 292.466,
"detail": 520.248,
"player": 0.003,
"url_check": 242.366,
"total": 1065.023
},
"counts": {
"classes": 6,
@@ -768,14 +768,14 @@
"error": null,
"traceback": null,
"timings_ms": {
"module_load": 5.745,
"module_load": 6.721,
"init": 0.001,
"home": 0.001,
"category": 1045.26,
"detail": 1368.541,
"player": 0.025,
"url_check": 367.22,
"total": 3318.421
"category": 6707.223,
"detail": 10084.897,
"player": 0.01,
"url_check": 415.087,
"total": 23957.566
},
"counts": {
"classes": 4,
@@ -807,14 +807,14 @@
"error": null,
"traceback": null,
"timings_ms": {
"module_load": 6.9,
"init": 0.001,
"home": 0.001,
"category": 1124.248,
"detail": 181.481,
"player": 2030.737,
"url_check": 1150.099,
"total": 4494.929
"module_load": 11.604,
"init": 0.002,
"home": 0.003,
"category": 10913.435,
"detail": 1000.178,
"player": 0.009,
"url_check": 0.078,
"total": 35407.075
},
"counts": {
"classes": 4,
@@ -825,16 +825,55 @@
"samples": {
"tid": "movie",
"vod_id": "kongbu/26940",
"flag": "修罗直连",
"play_id": "play/26940-0"
"flag": "磁力合集",
"play_id": "magnet:?xt=urn:btih:867fd8d84c83817625391aa5dfba8ad4005b90c9"
},
"player": {
"parse": 0,
"url": "https://v.xlys.ltd.ua/obj/44D40DCA05847835D72FBFD81C2ECF6FDCFA60C3364EAB8893D4AD7460BB162D",
"url": "magnet:?xt=urn:btih:867fd8d84c83817625391aa5dfba8ad4005b90c9",
"valid": true,
"reachable": null,
"status_code": null,
"final_url": "magnet:?xt=urn:btih:867fd8d84c83817625391aa5dfba8ad4005b90c9",
"reason": "非 HTTP 地址,按协议格式通过"
}
},
{
"spider": "农民",
"file": "农民.txt",
"success": true,
"failed_stage": null,
"error": null,
"traceback": null,
"timings_ms": {
"module_load": 10.517,
"init": 0.001,
"home": 7878.471,
"category": 5809.693,
"detail": 239.563,
"player": 15513.177,
"url_check": 185.043,
"total": 30444.277
},
"counts": {
"classes": 5,
"category_videos": 84,
"detail_videos": 1,
"episodes": 2
},
"samples": {
"tid": "dianying",
"vod_id": "/vod/63169.html",
"flag": "FF",
"play_id": "63169-1-1"
},
"player": {
"parse": 1,
"url": "https://www.nmdvd.top/jx/player.php?vid=n2J/BuPNOJ%2BVeZWQBtXCe3YzNVc1U0NHTCs4WGc2amV2WjFzWGMrSXRNeTYvWmRFMEtLUC9jR1dUamlyWDJFRlA5dklDRkVmeVBZYXZVeVJXVkVOcXk0QUdzYzNVVVJncEx0NkZ3dzhiWHI0WU9rREZjeG1MTnExNWZTaERyWURKcysxSFhNZmI1UjU3NS9TTnkwV3hMUkdDT0VVVmd1Rll4Rm9OYm1XNGk0d2NlMTB4R1NFTEQ5QXE2VENJMFdGSk9JVGJXaHUwVkc0R3FkMg%3D%3D",
"valid": true,
"reachable": true,
"status_code": 200,
"final_url": "https://lf26-imcloud-file-sign.bytetos.com/ad-penny-bucket/ooQDqGA79T1FRC0daWHAIZACEADfwdAIagfFto?x-expires=1780015287&x-signature=53jhbfeBxQZ%2FplLtAazOCvaut9M%3D",
"final_url": "https://www.nmdvd.top/jx/player.php?vid=n2J/BuPNOJ%2BVeZWQBtXCe3YzNVc1U0NHTCs4WGc2amV2WjFzWGMrSXRNeTYvWmRFMEtLUC9jR1dUamlyWDJFRlA5dklDRkVmeVBZYXZVeVJXVkVOcXk0QUdzYzNVVVJncEx0NkZ3dzhiWHI0WU9rREZjeG1MTnExNWZTaERyWURKcysxSFhNZmI1UjU3NS9TTnkwV3hMUkdDT0VVVmd1Rll4Rm9OYm1XNGk0d2NlMTB4R1NFTEQ5QXE2VENJMFdGSk9JVGJXaHUwVkc0R3FkMg%3D%3D",
"reason": null
}
},
@@ -846,14 +885,14 @@
"error": null,
"traceback": null,
"timings_ms": {
"module_load": 4.543,
"init": 0.001,
"home": 0.0,
"category": 1087.031,
"detail": 1139.86,
"player": 1870.307,
"url_check": 3113.907,
"total": 7216.1
"module_load": 10.171,
"init": 0.003,
"home": 0.001,
"category": 912.423,
"detail": 8917.159,
"player": 7751.166,
"url_check": 3471.231,
"total": 70262.496
},
"counts": {
"classes": 8,
@@ -862,18 +901,18 @@
"episodes": 2
},
"samples": {
"tid": "1",
"vod_id": "47701eed6d5fcbfe",
"tid": "2",
"vod_id": "611fc51c5af8b87c",
"flag": "高速线路",
"play_id": "{\"movie_id\":\"47701eed6d5fcbfe\",\"link_id\":\"8301f83c86a8bb4222a90d8f2d97295d\",\"line_id\":\"line1\",\"line_name\":\"高速线路\",\"episode_name\":\"1080p\",\"type\":\"switch\",\"page\":\"https://fktv.me/movie/detail/47701eed6d5fcbfe\"}"
"play_id": "{\"movie_id\":\"611fc51c5af8b87c\",\"link_id\":\"a27e0d4393e1995f4154ba8a003d2cdd\",\"line_id\":\"line1\",\"line_name\":\"高速线路\",\"episode_name\":\"1\",\"type\":\"switch\",\"page\":\"https://fktv.me/movie/detail/611fc51c5af8b87c\"}"
},
"player": {
"parse": 0,
"url": "https://fktv.me/ysapi/m3u8/p/614e6304edb4ba0d5292cd5b68f09717.m3u8",
"url": "https://fktv.me/ysapi/m3u8/p/9c129389274e07aaa138d12d1533cc4f.m3u8",
"valid": true,
"reachable": true,
"status_code": 200,
"final_url": "https://fktv.me/ysapi/m3u8/p/614e6304edb4ba0d5292cd5b68f09717.m3u8",
"final_url": "https://fktv.me/ysapi/m3u8/p/9c129389274e07aaa138d12d1533cc4f.m3u8",
"reason": null
}
},
@@ -885,14 +924,14 @@
"error": "HTTPSConnectionPool(host='www.jqqzx.cc', port=443): Read timed out. (read timeout=10)",
"traceback": "Traceback (most recent call last):\n File \"/home/harold/workspace/atv-spiders/py/.venv/lib/python3.14/site-packages/urllib3/connectionpool.py\", line 464, in _make_request\n self._validate_conn(conn)\n ~~~~~~~~~~~~~~~~~~~^^^^^^\n File \"/home/harold/workspace/atv-spiders/py/.venv/lib/python3.14/site-packages/urllib3/connectionpool.py\", line 1093, in _validate_conn\n conn.connect()\n ~~~~~~~~~~~~^^\n File \"/home/harold/workspace/atv-spiders/py/.venv/lib/python3.14/site-packages/urllib3/connection.py\", line 796, in connect\n sock_and_verified = _ssl_wrap_socket_and_match_hostname(\n sock=sock,\n ...<14 lines>...\n assert_fingerprint=self.assert_fingerprint,\n )\n File \"/home/harold/workspace/atv-spiders/py/.venv/lib/python3.14/site-packages/urllib3/connection.py\", line 975, in _ssl_wrap_socket_and_match_hostname\n ssl_sock = ssl_wrap_socket(\n sock=sock,\n ...<8 lines>...\n tls_in_tls=tls_in_tls,\n )\n File \"/home/harold/workspace/atv-spiders/py/.venv/lib/python3.14/site-packages/urllib3/util/ssl_.py\", line 483, in ssl_wrap_socket\n ssl_sock = _ssl_wrap_socket_impl(sock, context, tls_in_tls, server_hostname)\nTimeoutError: _ssl.c:1063: The handshake operation timed out\n\nThe above exception was the direct cause of the following exception:\n\nTraceback (most recent call last):\n File \"/home/harold/workspace/atv-spiders/py/.venv/lib/python3.14/site-packages/requests/adapters.py\", line 645, in send\n resp = conn.urlopen(\n method=request.method,\n ...<9 lines>...\n chunked=chunked,\n )\n File \"/home/harold/workspace/atv-spiders/py/.venv/lib/python3.14/site-packages/urllib3/connectionpool.py\", line 841, in urlopen\n retries = retries.increment(\n method, url, error=new_e, _pool=self, _stacktrace=sys.exc_info()[2]\n )\n File \"/home/harold/workspace/atv-spiders/py/.venv/lib/python3.14/site-packages/urllib3/util/retry.py\", line 490, in increment\n raise reraise(type(error), error, _stacktrace)\n ~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/home/harold/workspace/atv-spiders/py/.venv/lib/python3.14/site-packages/urllib3/util/util.py\", line 39, in reraise\n raise value\n File \"/home/harold/workspace/atv-spiders/py/.venv/lib/python3.14/site-packages/urllib3/connectionpool.py\", line 787, in urlopen\n response = self._make_request(\n conn,\n ...<10 lines>...\n **response_kw,\n )\nurllib3.exceptions.ReadTimeoutError: HTTPSConnectionPool(host='www.jqqzx.cc', port=443): Read timed out. (read timeout=10)\n\nDuring handling of the above exception, another exception occurred:\n\nTraceback (most recent call last):\n File \"/home/harold/workspace/atv-spiders/py/validate_spiders.py\", line 721, in validate_spider_file\n _validate_from_tid(\n ~~~~~~~~~~~~~~~~~~^\n spider=spider,\n ^^^^^^^^^^^^^^\n ...<6 lines>...\n logger=logger,\n ^^^^^^^^^^^^^^\n )\n ^\n File \"/home/harold/workspace/atv-spiders/py/validate_spiders.py\", line 417, in _validate_from_tid\n category_result = _run_timed(result[\"timings_ms\"], \"category\", spider.categoryContent, clock, tid, \"1\", False, {})\n File \"/home/harold/workspace/atv-spiders/py/validate_spiders.py\", line 296, in _run_timed\n return func(*args, **kwargs)\n File \"/home/harold/workspace/tvbox-resources/py/剧圈圈.txt\", line 152, in categoryContent\n File \"/home/harold/workspace/tvbox-resources/py/剧圈圈.txt\", line 94, in _request_html\nrequests.exceptions.ReadTimeout: HTTPSConnectionPool(host='www.jqqzx.cc', port=443): Read timed out. (read timeout=10)\n",
"timings_ms": {
"module_load": 4.717,
"init": 0.001,
"home": 0.0,
"category": 10016.814,
"module_load": 6.876,
"init": 0.0,
"home": 0.001,
"category": 10016.492,
"detail": 0.0,
"player": 0.0,
"url_check": 0.0,
"total": 10023.661
"total": 10027.039
},
"counts": {
"classes": 5,
@@ -924,14 +963,14 @@
"error": null,
"traceback": null,
"timings_ms": {
"module_load": 5.724,
"init": 0.001,
"home": 0.0,
"category": 278.78,
"detail": 413.893,
"player": 511.424,
"url_check": 1315.2,
"total": 2525.671
"module_load": 36.132,
"init": 0.004,
"home": 0.005,
"category": 205.23,
"detail": 7085.211,
"player": 2361.852,
"url_check": 1157.49,
"total": 10847.294
},
"counts": {
"classes": 6,
@@ -963,14 +1002,14 @@
"error": null,
"traceback": null,
"timings_ms": {
"module_load": 6.679,
"init": 0.002,
"home": 3076.431,
"category": 250.913,
"detail": 697.668,
"player": 0.002,
"url_check": 54.168,
"total": 4086.682
"module_load": 5.573,
"init": 0.001,
"home": 3069.711,
"category": 273.84,
"detail": 657.209,
"player": 0.003,
"url_check": 786.076,
"total": 4793.011
},
"counts": {
"classes": 11,
@@ -1002,14 +1041,14 @@
"error": null,
"traceback": null,
"timings_ms": {
"module_load": 3.622,
"init": 328.443,
"home": 0.007,
"category": 181.898,
"detail": 165.737,
"module_load": 5.064,
"init": 576.131,
"home": 0.005,
"category": 155.131,
"detail": 163.908,
"player": 0.002,
"url_check": 131.097,
"total": 811.763
"url_check": 151.232,
"total": 1052.797
},
"counts": {
"classes": 7,
@@ -1041,14 +1080,14 @@
"error": null,
"traceback": null,
"timings_ms": {
"module_load": 3.951,
"init": 79.679,
"home": 0.001,
"category": 161.815,
"detail": 425.894,
"player": 263.869,
"url_check": 55.992,
"total": 991.807
"module_load": 4.83,
"init": 81.798,
"home": 0.002,
"category": 459.456,
"detail": 2329.762,
"player": 271.301,
"url_check": 106.712,
"total": 3254.717
},
"counts": {
"classes": 11,
@@ -1064,11 +1103,11 @@
},
"player": {
"parse": 0,
"url": "http://audiopay.cos.tx.xmcdn.com/download/1.0.0/storages/b817-audiopay/16/AA/GKwRIaIGGaRGADgE-gEx_hMS-aacv2-48K.m4a?sign=e1e90a6256c800ffd09fb66ff1c0ba5a&buy_key=FM&token=5491&timestamp=1780013280&duration=453",
"url": "http://audiopay.cos.tx.xmcdn.com/download/1.0.0/storages/b817-audiopay/16/AA/GKwRIaIGGaRGADgE-gEx_hMS-aacv2-48K.m4a?sign=8736b1c008013c99b7b295012616baf8&buy_key=FM&token=2453&timestamp=1780016543&duration=453",
"valid": true,
"reachable": true,
"status_code": 200,
"final_url": "http://audiopay.cos.tx.xmcdn.com/download/1.0.0/storages/b817-audiopay/16/AA/GKwRIaIGGaRGADgE-gEx_hMS-aacv2-48K.m4a?sign=e1e90a6256c800ffd09fb66ff1c0ba5a&buy_key=FM&token=5491&timestamp=1780013280&duration=453",
"final_url": "http://audiopay.cos.tx.xmcdn.com/download/1.0.0/storages/b817-audiopay/16/AA/GKwRIaIGGaRGADgE-gEx_hMS-aacv2-48K.m4a?sign=8736b1c008013c99b7b295012616baf8&buy_key=FM&token=2453&timestamp=1780016543&duration=453",
"reason": null
}
},
@@ -1080,14 +1119,14 @@
"error": null,
"traceback": null,
"timings_ms": {
"module_load": 7.282,
"init": 0.001,
"home": 390.637,
"category": 549.263,
"detail": 973.989,
"player": 570.713,
"url_check": 144.177,
"total": 2637.255
"module_load": 13.156,
"init": 0.002,
"home": 369.045,
"category": 362.985,
"detail": 1098.58,
"player": 19080.495,
"url_check": 411.517,
"total": 21337.311
},
"counts": {
"classes": 8,
@@ -1103,11 +1142,11 @@
},
"player": {
"parse": 0,
"url": "https://file.hgeuz.cn/stream/eJwANwDI_wJVZgVKIIrU0ECux-GJ1PSt38ahythCqsH-r9TAQ4rj5F94rOjbQKjk063xyIX2z3hfeGcIHF4BAAD__5DtISY.?ts=1780011846&sign=4f50eead5e892d1fd5f5f4d3e429c991",
"url": "https://file.hgeuz.cn/stream/eJwANwDI_wJVZgVKIIrU0ECux-GJ1PSt38ahythCqsH-r9TAQ4rj5F94rOjbQKjk063xyIX2z3hfeGcIHF4BAAD__5DtISY.?ts=1780016560&sign=884cead7eab3edb3aaa0580a766779a5",
"valid": true,
"reachable": true,
"status_code": 200,
"final_url": "https://file.hgeuz.cn/stream/eJwANwDI_wJVZgVKIIrU0ECux-GJ1PSt38ahythCqsH-r9TAQ4rj5F94rOjbQKjk063xyIX2z3hfeGcIHF4BAAD__5DtISY.?ts=1780011846&sign=4f50eead5e892d1fd5f5f4d3e429c991",
"final_url": "https://file.hgeuz.cn/stream/eJwANwDI_wJVZgVKIIrU0ECux-GJ1PSt38ahythCqsH-r9TAQ4rj5F94rOjbQKjk063xyIX2z3hfeGcIHF4BAAD__5DtISY.?ts=1780016560&sign=884cead7eab3edb3aaa0580a766779a5",
"reason": null
}
},
@@ -1119,14 +1158,14 @@
"error": null,
"traceback": null,
"timings_ms": {
"module_load": 7.003,
"init": 0.005,
"home": 820.22,
"category": 714.083,
"detail": 470.105,
"player": 3612.011,
"url_check": 303.335,
"total": 5930.546
"module_load": 14.426,
"init": 0.009,
"home": 7178.218,
"category": 585.831,
"detail": 5851.923,
"player": 1862.529,
"url_check": 332.656,
"total": 15826.34
},
"counts": {
"classes": 3,
@@ -1142,11 +1181,11 @@
},
"player": {
"parse": 0,
"url": "https://p3-bot-workflow-sign.byteimg.com/tos-cn-i-mdko3gqilj/c87332e45fc54a998855db93afefd79b~tplv-mdko3gqilj-image.image?rk3s=81d4c505&x-expires=1811117284&x-signature=rZXv1OD0ezfloqDJoJr8Jd0TySE%3D",
"url": "https://p3-bot-workflow-sign.byteimg.com/tos-cn-i-mdko3gqilj/c87332e45fc54a998855db93afefd79b~tplv-mdko3gqilj-image.image?rk3s=81d4c505&x-expires=1811120558&x-signature=rRuxQigl7oP4fRs%2BGdka0UD3LoI%3D",
"valid": true,
"reachable": true,
"status_code": 200,
"final_url": "https://p3-bot-workflow-sign.byteimg.com/tos-cn-i-mdko3gqilj/c87332e45fc54a998855db93afefd79b~tplv-mdko3gqilj-image.image?rk3s=81d4c505&x-expires=1811117284&x-signature=rZXv1OD0ezfloqDJoJr8Jd0TySE%3D",
"final_url": "https://p3-bot-workflow-sign.byteimg.com/tos-cn-i-mdko3gqilj/c87332e45fc54a998855db93afefd79b~tplv-mdko3gqilj-image.image?rk3s=81d4c505&x-expires=1811120558&x-signature=rRuxQigl7oP4fRs%2BGdka0UD3LoI%3D",
"reason": null
}
},
@@ -1158,14 +1197,14 @@
"error": "HTTPSConnectionPool(host='40000.me', port=443): Read timed out. (read timeout=10)",
"traceback": "Traceback (most recent call last):\n File \"/home/harold/workspace/atv-spiders/py/.venv/lib/python3.14/site-packages/urllib3/connectionpool.py\", line 464, in _make_request\n self._validate_conn(conn)\n ~~~~~~~~~~~~~~~~~~~^^^^^^\n File \"/home/harold/workspace/atv-spiders/py/.venv/lib/python3.14/site-packages/urllib3/connectionpool.py\", line 1093, in _validate_conn\n conn.connect()\n ~~~~~~~~~~~~^^\n File \"/home/harold/workspace/atv-spiders/py/.venv/lib/python3.14/site-packages/urllib3/connection.py\", line 796, in connect\n sock_and_verified = _ssl_wrap_socket_and_match_hostname(\n sock=sock,\n ...<14 lines>...\n assert_fingerprint=self.assert_fingerprint,\n )\n File \"/home/harold/workspace/atv-spiders/py/.venv/lib/python3.14/site-packages/urllib3/connection.py\", line 975, in _ssl_wrap_socket_and_match_hostname\n ssl_sock = ssl_wrap_socket(\n sock=sock,\n ...<8 lines>...\n tls_in_tls=tls_in_tls,\n )\n File \"/home/harold/workspace/atv-spiders/py/.venv/lib/python3.14/site-packages/urllib3/util/ssl_.py\", line 483, in ssl_wrap_socket\n ssl_sock = _ssl_wrap_socket_impl(sock, context, tls_in_tls, server_hostname)\nTimeoutError: _ssl.c:1063: The handshake operation timed out\n\nThe above exception was the direct cause of the following exception:\n\nTraceback (most recent call last):\n File \"/home/harold/workspace/atv-spiders/py/.venv/lib/python3.14/site-packages/requests/adapters.py\", line 645, in send\n resp = conn.urlopen(\n method=request.method,\n ...<9 lines>...\n chunked=chunked,\n )\n File \"/home/harold/workspace/atv-spiders/py/.venv/lib/python3.14/site-packages/urllib3/connectionpool.py\", line 841, in urlopen\n retries = retries.increment(\n method, url, error=new_e, _pool=self, _stacktrace=sys.exc_info()[2]\n )\n File \"/home/harold/workspace/atv-spiders/py/.venv/lib/python3.14/site-packages/urllib3/util/retry.py\", line 490, in increment\n raise reraise(type(error), error, _stacktrace)\n ~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/home/harold/workspace/atv-spiders/py/.venv/lib/python3.14/site-packages/urllib3/util/util.py\", line 39, in reraise\n raise value\n File \"/home/harold/workspace/atv-spiders/py/.venv/lib/python3.14/site-packages/urllib3/connectionpool.py\", line 787, in urlopen\n response = self._make_request(\n conn,\n ...<10 lines>...\n **response_kw,\n )\nurllib3.exceptions.ReadTimeoutError: HTTPSConnectionPool(host='40000.me', port=443): Read timed out. (read timeout=10)\n\nDuring handling of the above exception, another exception occurred:\n\nTraceback (most recent call last):\n File \"/home/harold/workspace/atv-spiders/py/validate_spiders.py\", line 721, in validate_spider_file\n _validate_from_tid(\n ~~~~~~~~~~~~~~~~~~^\n spider=spider,\n ^^^^^^^^^^^^^^\n ...<6 lines>...\n logger=logger,\n ^^^^^^^^^^^^^^\n )\n ^\n File \"/home/harold/workspace/atv-spiders/py/validate_spiders.py\", line 417, in _validate_from_tid\n category_result = _run_timed(result[\"timings_ms\"], \"category\", spider.categoryContent, clock, tid, \"1\", False, {})\n File \"/home/harold/workspace/atv-spiders/py/validate_spiders.py\", line 296, in _run_timed\n return func(*args, **kwargs)\n File \"/home/harold/workspace/tvbox-resources/py/四万影视.txt\", line 238, in categoryContent\n File \"/home/harold/workspace/tvbox-resources/py/四万影视.txt\", line 212, in _api_get\nrequests.exceptions.ReadTimeout: HTTPSConnectionPool(host='40000.me', port=443): Read timed out. (read timeout=10)\n",
"timings_ms": {
"module_load": 4.062,
"init": 0.001,
"module_load": 12.873,
"init": 0.003,
"home": 0.001,
"category": 10016.829,
"category": 10022.245,
"detail": 0.0,
"player": 0.0,
"url_check": 0.0,
"total": 10022.413
"total": 10039.174
},
"counts": {
"classes": 5,
@@ -1197,14 +1236,14 @@
"error": "分类视频列表为空",
"traceback": null,
"timings_ms": {
"module_load": 5.452,
"module_load": 12.947,
"init": 0.001,
"home": 0.0,
"category": 864.903,
"home": 0.001,
"category": 9513.486,
"detail": 0.0,
"player": 0.0,
"url_check": 0.0,
"total": 1903.735
"total": 15788.054
},
"counts": {
"classes": 6,
@@ -1236,14 +1275,14 @@
"error": null,
"traceback": null,
"timings_ms": {
"module_load": 7.665,
"module_load": 12.383,
"init": 0.001,
"home": 0.001,
"category": 510.957,
"detail": 366.072,
"player": 0.003,
"url_check": 1216.336,
"total": 2101.466
"category": 8905.127,
"detail": 360.288,
"player": 0.006,
"url_check": 1124.95,
"total": 10403.322
},
"counts": {
"classes": 6,
@@ -1275,14 +1314,14 @@
"error": null,
"traceback": null,
"timings_ms": {
"module_load": 5.677,
"module_load": 8.377,
"init": 0.001,
"home": 0.007,
"category": 807.104,
"detail": 443.629,
"player": 0.004,
"url_check": 1842.825,
"total": 3101.068
"home": 0.011,
"category": 9772.633,
"detail": 7144.381,
"player": 0.007,
"url_check": 1824.416,
"total": 23764.458
},
"counts": {
"classes": 6,
@@ -1293,16 +1332,16 @@
"samples": {
"tid": "1",
"vod_id": "78244",
"flag": "rym3u8",
"play_id": "https://svip.ryiplay18.com/20260528/6715_f9025f29/index.m3u8"
"flag": "ruyi",
"play_id": "https://svip.ryiplay18.com/share/38faae069a1371784081ea9ad9b279d0"
},
"player": {
"parse": 0,
"url": "https://svip.ryiplay18.com/20260528/6715_f9025f29/index.m3u8",
"parse": 1,
"url": "https://svip.ryiplay18.com/share/38faae069a1371784081ea9ad9b279d0",
"valid": true,
"reachable": true,
"status_code": 200,
"final_url": "https://svip.ryiplay18.com/20260528/6715_f9025f29/index.m3u8",
"final_url": "https://svip.ryiplay18.com/share/38faae069a1371784081ea9ad9b279d0",
"reason": null
}
},
@@ -1314,14 +1353,14 @@
"error": null,
"traceback": null,
"timings_ms": {
"module_load": 11.04,
"init": 444.81,
"home": 1022.949,
"category": 453.361,
"detail": 505.883,
"player": 2033.264,
"url_check": 76.589,
"total": 4548.333
"module_load": 14.742,
"init": 515.315,
"home": 9942.779,
"category": 5679.75,
"detail": 510.454,
"player": 1704.311,
"url_check": 83.46,
"total": 18451.416
},
"counts": {
"classes": 9,
@@ -1353,14 +1392,14 @@
"error": null,
"traceback": null,
"timings_ms": {
"module_load": 7.64,
"module_load": 6.984,
"init": 0.001,
"home": 0.001,
"category": 909.185,
"detail": 831.506,
"player": 1697.037,
"url_check": 483.117,
"total": 3929.071
"category": 729.55,
"detail": 717.594,
"player": 12968.593,
"url_check": 545.937,
"total": 14969.399
},
"counts": {
"classes": 4,
@@ -1376,11 +1415,11 @@
},
"player": {
"parse": 0,
"url": "https://media-bjcy-fy-person01.bjoss.ctyunxs.cn/PERSONCLOUD/874f908a-f9df-4538-942a-7342fda0ff8a.m3u8?x-amz-CLIENTTYPEIN=UNKNOWN&AWSAccessKeyId=0Lg7dAq3ZfHvePP8DKEU&x-amz-userLevel=0&x-amz-limitrate=51200&x-amz-UID=269636103&x-amz-APPID=828221&response-content-disposition=attachment%3Bfilename%3D%22%E6%AD%A3%E7%89%87.m3u8%22%3Bfilename*%3DUTF-8%27%27%25E6%25AD%25A3%25E7%2589%2587.m3u8&x-amz-CLIENTNETWORK=UNKNOWN&x-amz-CLOUDTYPEIN=PERSON&Signature=aLTfidj4360DfGadexGLyFOVrkw%3D&Expires=1780013584&x-amz-FSIZE=58373&x-amz-UFID=624471240788981016",
"url": "https://media-bjcy-fy-person01.bjoss.ctyunxs.cn/PERSONCLOUD/874f908a-f9df-4538-942a-7342fda0ff8a.m3u8?x-amz-CLIENTTYPEIN=UNKNOWN&AWSAccessKeyId=0Lg7dAq3ZfHvePP8DKEU&x-amz-userLevel=0&x-amz-limitrate=51200&x-amz-UID=269636103&x-amz-APPID=828221&response-content-disposition=attachment%3Bfilename%3D%22%E6%AD%A3%E7%89%87.m3u8%22%3Bfilename*%3DUTF-8%27%27%25E6%25AD%25A3%25E7%2589%2587.m3u8&x-amz-CLIENTNETWORK=UNKNOWN&x-amz-CLOUDTYPEIN=PERSON&Signature=X2kxOUNj5DN/EDIknHK1wpW72Pc%3D&Expires=1780016867&x-amz-FSIZE=58373&x-amz-UFID=624471240788981016",
"valid": true,
"reachable": true,
"status_code": 200,
"final_url": "https://media-bjcy-fy-person01.bjoss.ctyunxs.cn/PERSONCLOUD/874f908a-f9df-4538-942a-7342fda0ff8a.m3u8?x-amz-CLIENTTYPEIN=UNKNOWN&AWSAccessKeyId=0Lg7dAq3ZfHvePP8DKEU&x-amz-userLevel=0&x-amz-limitrate=51200&x-amz-UID=269636103&x-amz-APPID=828221&response-content-disposition=attachment%3Bfilename%3D%22%E6%AD%A3%E7%89%87.m3u8%22%3Bfilename*%3DUTF-8%27%27%25E6%25AD%25A3%25E7%2589%2587.m3u8&x-amz-CLIENTNETWORK=UNKNOWN&x-amz-CLOUDTYPEIN=PERSON&Signature=aLTfidj4360DfGadexGLyFOVrkw%3D&Expires=1780013584&x-amz-FSIZE=58373&x-amz-UFID=624471240788981016",
"final_url": "https://media-bjcy-fy-person01.bjoss.ctyunxs.cn/PERSONCLOUD/874f908a-f9df-4538-942a-7342fda0ff8a.m3u8?x-amz-CLIENTTYPEIN=UNKNOWN&AWSAccessKeyId=0Lg7dAq3ZfHvePP8DKEU&x-amz-userLevel=0&x-amz-limitrate=51200&x-amz-UID=269636103&x-amz-APPID=828221&response-content-disposition=attachment%3Bfilename%3D%22%E6%AD%A3%E7%89%87.m3u8%22%3Bfilename*%3DUTF-8%27%27%25E6%25AD%25A3%25E7%2589%2587.m3u8&x-amz-CLIENTNETWORK=UNKNOWN&x-amz-CLOUDTYPEIN=PERSON&Signature=X2kxOUNj5DN/EDIknHK1wpW72Pc%3D&Expires=1780016867&x-amz-FSIZE=58373&x-amz-UFID=624471240788981016",
"reason": null
}
},
@@ -1392,14 +1431,14 @@
"error": null,
"traceback": null,
"timings_ms": {
"module_load": 4.206,
"init": 0.023,
"home": 168.905,
"category": 507.421,
"detail": 316.942,
"player": 0.005,
"url_check": 143.775,
"total": 1142.182
"module_load": 3.31,
"init": 0.015,
"home": 186.768,
"category": 269.379,
"detail": 320.557,
"player": 0.002,
"url_check": 90.186,
"total": 870.979
},
"counts": {
"classes": 30,
@@ -1411,15 +1450,15 @@
"tid": "都市",
"vod_id": "110000044555935694",
"flag": "1080P",
"play_id": "https://tv-video.cdn.drama.9ddm.com/22/A0/22A0BFFF46651CC23355B115F6307653.mp4?timestamp=1780013282&sign=adb63e197695ea4e2d20159bf79f5a1e"
"play_id": "https://tv-video.cdn.drama.9ddm.com/22/A0/22A0BFFF46651CC23355B115F6307653.mp4?timestamp=1780016555&sign=2d3f96cfc27aa12d3379e4b996a1cea4"
},
"player": {
"parse": 0,
"url": "https://tv-video.cdn.drama.9ddm.com/22/A0/22A0BFFF46651CC23355B115F6307653.mp4?timestamp=1780013282&sign=adb63e197695ea4e2d20159bf79f5a1e",
"url": "https://tv-video.cdn.drama.9ddm.com/22/A0/22A0BFFF46651CC23355B115F6307653.mp4?timestamp=1780016555&sign=2d3f96cfc27aa12d3379e4b996a1cea4",
"valid": true,
"reachable": true,
"status_code": 200,
"final_url": "https://tv-video.cdn.drama.9ddm.com/22/A0/22A0BFFF46651CC23355B115F6307653.mp4?timestamp=1780013282&sign=adb63e197695ea4e2d20159bf79f5a1e",
"final_url": "https://tv-video.cdn.drama.9ddm.com/22/A0/22A0BFFF46651CC23355B115F6307653.mp4?timestamp=1780016555&sign=2d3f96cfc27aa12d3379e4b996a1cea4",
"reason": null
}
},
@@ -1431,14 +1470,14 @@
"error": null,
"traceback": null,
"timings_ms": {
"module_load": 5.959,
"module_load": 4.242,
"init": 0.001,
"home": 0.001,
"category": 651.806,
"detail": 415.843,
"player": 414.738,
"url_check": 1899.487,
"total": 3388.37
"home": 0.0,
"category": 9012.087,
"detail": 360.391,
"player": 5767.927,
"url_check": 1992.893,
"total": 17138.116
},
"counts": {
"classes": 5,
@@ -1448,17 +1487,17 @@
},
"samples": {
"tid": "1",
"vod_id": "3544",
"vod_id": "3613",
"flag": "在线云播",
"play_id": "3544_1_1"
"play_id": "3613_1_1"
},
"player": {
"parse": 0,
"url": "https://cdn.yzzy31-play.com/20251216/9033_3613ef1e/index.m3u8",
"url": "https://player.yzzyvip-35.com/20260331/3348_333cb763/index.m3u8",
"valid": true,
"reachable": true,
"status_code": 200,
"final_url": "https://cdn.yzzy31-play.com/20251216/9033_3613ef1e/index.m3u8",
"final_url": "https://player.yzzyvip-35.com/20260331/3348_333cb763/index.m3u8",
"reason": null
}
},
@@ -1470,14 +1509,14 @@
"error": null,
"traceback": null,
"timings_ms": {
"module_load": 9.595,
"module_load": 5.848,
"init": 0.0,
"home": 0.001,
"category": 485.33,
"detail": 630.222,
"category": 429.805,
"detail": 887.827,
"player": 0.002,
"url_check": 335.141,
"total": 1461.282
"url_check": 404.951,
"total": 1728.925
},
"counts": {
"classes": 5,
@@ -1509,14 +1548,14 @@
"error": null,
"traceback": null,
"timings_ms": {
"module_load": 14.041,
"module_load": 7.595,
"init": 0.001,
"home": 0.001,
"category": 271.029,
"detail": 228.815,
"player": 0.013,
"url_check": 797.607,
"total": 1311.959
"category": 489.928,
"detail": 206.616,
"player": 0.007,
"url_check": 272.79,
"total": 977.533
},
"counts": {
"classes": 7,
@@ -1548,14 +1587,14 @@
"error": null,
"traceback": null,
"timings_ms": {
"module_load": 12.47,
"module_load": 6.105,
"init": 0.001,
"home": 0.001,
"category": 2265.609,
"detail": 1359.518,
"player": 1575.28,
"url_check": 1998.74,
"total": 7212.372
"category": 10535.888,
"detail": 1473.111,
"player": 1469.366,
"url_check": 1896.242,
"total": 15381.225
},
"counts": {
"classes": 4,
@@ -1587,14 +1626,14 @@
"error": null,
"traceback": null,
"timings_ms": {
"module_load": 9.153,
"init": 420.048,
"home": 368.152,
"category": 393.014,
"detail": 498.584,
"player": 901.221,
"url_check": 1205.266,
"total": 3796.413
"module_load": 4.107,
"init": 389.182,
"home": 10707.315,
"category": 12049.188,
"detail": 412.779,
"player": 9333.706,
"url_check": 1019.394,
"total": 33916.407
},
"counts": {
"classes": 8,
@@ -1610,11 +1649,11 @@
},
"player": {
"parse": 0,
"url": "https://usaydd.0rvgx279.com/m3u87/share/7518179/7713675/20260522/132143/720/index.m3u8?sign=70a08c2efe7d4905ae15db8561c7505c&t=1780013285",
"url": "https://usaydd.xbavporn.com/m3u87/share/7518179/7713675/20260522/132143/720/index.m3u8?sign=5653c5342de3d26326c327888111d784&t=1780016590",
"valid": true,
"reachable": true,
"status_code": 200,
"final_url": "https://usaydd.0rvgx279.com/m3u87/share/7518179/7713675/20260522/132143/720/index.m3u8?sign=70a08c2efe7d4905ae15db8561c7505c&t=1780013285",
"final_url": "https://usaydd.xbavporn.com/m3u87/share/7518179/7713675/20260522/132143/720/index.m3u8?sign=5653c5342de3d26326c327888111d784&t=1780016590",
"reason": null
}
},
@@ -1626,14 +1665,14 @@
"error": null,
"traceback": null,
"timings_ms": {
"module_load": 18.243,
"module_load": 9.627,
"init": 0.001,
"home": 0.001,
"category": 468.987,
"detail": 287.979,
"player": 0.005,
"url_check": 1048.402,
"total": 1824.611
"category": 5949.063,
"detail": 359.514,
"player": 0.007,
"url_check": 1149.35,
"total": 7468.048
},
"counts": {
"classes": 6,
@@ -1665,14 +1704,14 @@
"error": null,
"traceback": null,
"timings_ms": {
"module_load": 12.376,
"init": 122.601,
"home": 187.941,
"category": 153.485,
"detail": 160.104,
"player": 138.813,
"url_check": 359.08,
"total": 1135.101
"module_load": 9.956,
"init": 129.363,
"home": 187.26,
"category": 135.12,
"detail": 100.813,
"player": 827.651,
"url_check": 681.575,
"total": 2072.341
},
"counts": {
"classes": 7,
@@ -1682,17 +1721,17 @@
},
"samples": {
"tid": "1",
"vod_id": "403963",
"flag": "🔥蓝光🔥",
"play_id": "YYNB-fb05126bd0ec8d1202c273ed27abff61@@@YYNB"
"vod_id": "413638",
"flag": "🔥蓝光4K--②号🔥",
"play_id": "xfy-h9ZFVRM+eowUsJdVTXqIM33qZd7QMy0ckmrZHgoKjDIxW6bJxADCOl5gHriPq9VfmUyAjC3Yv1vXWry1kRhiXaRPcwbDvPmvSTEn90ggCRVv9X+LdByMnn62KO7Yj6o8@@@xfyun"
},
"player": {
"parse": 0,
"url": "https://fffan.wki8.com/hls/2777ef7654397662a7be88aadd40562d.m3u8?token=a4f9a9f07dfcacdf153620b7584dd3a5&time=1780013283&YYNB.m3u8",
"url": "https://xfyvideochandi.online/m.php?data=9JNpgjlvwTy_6Y8t7EDm8yT3ktOt-iaPnzx0_R8cr24bpZIFu9uBw4_yXCBY3RGfEzz51EqRZqCkGzzMVCuJTOMyR5DMY2mun_-EsEc6hz8AqkIOUN-DXkHw0zoV9_eu8aZSgX6Pu4IcRuCcFMssaCY8eJYLq3HFjzikmlwWQ51m3205p27_rURwiPiHj_ocdJG4NDIwnzOBjg25Cf5BuFywSWg6f_MkA5kLy0UB_Jg&xfy.m3u8",
"valid": true,
"reachable": true,
"status_code": 200,
"final_url": "https://fffan.wki8.com/hls/2777ef7654397662a7be88aadd40562d.m3u8?token=a4f9a9f07dfcacdf153620b7584dd3a5&time=1780013283&YYNB.m3u8",
"final_url": "https://xfyvideochandi.online/m.php?data=9JNpgjlvwTy_6Y8t7EDm8yT3ktOt-iaPnzx0_R8cr24bpZIFu9uBw4_yXCBY3RGfEzz51EqRZqCkGzzMVCuJTOMyR5DMY2mun_-EsEc6hz8AqkIOUN-DXkHw0zoV9_eu8aZSgX6Pu4IcRuCcFMssaCY8eJYLq3HFjzikmlwWQ51m3205p27_rURwiPiHj_ocdJG4NDIwnzOBjg25Cf5BuFywSWg6f_MkA5kLy0UB_Jg&xfy.m3u8",
"reason": null
}
},
@@ -1704,14 +1743,14 @@
"error": null,
"traceback": null,
"timings_ms": {
"module_load": 5.259,
"init": 0.0,
"home": 330.502,
"category": 375.608,
"detail": 1272.539,
"player": 0.021,
"url_check": 308.005,
"total": 2293.547
"module_load": 5.542,
"init": 0.001,
"home": 651.987,
"category": 379.215,
"detail": 723.553,
"player": 0.057,
"url_check": 371.762,
"total": 2133.318
},
"counts": {
"classes": 10,
@@ -1743,14 +1782,14 @@
"error": null,
"traceback": null,
"timings_ms": {
"module_load": 7.107,
"init": 239.375,
"home": 564.958,
"category": 257.067,
"detail": 244.083,
"player": 895.14,
"url_check": 567.461,
"total": 2775.754
"module_load": 10.4,
"init": 320.694,
"home": 480.35,
"category": 6744.109,
"detail": 314.779,
"player": 4353.66,
"url_check": 705.439,
"total": 12930.02
},
"counts": {
"classes": 7,
@@ -1766,11 +1805,11 @@
},
"player": {
"parse": 0,
"url": "https://png.ruyijx.com/m3u8/FhIb8dI4N0Rq5N.m3u8?4SnmurtLmfAOS31uPY",
"url": "https://png.ruyijx.com/m3u8/Qq5QavqM1KcyB5.m3u8?6a7Ko6nFnnb7QQP6EQ",
"valid": true,
"reachable": true,
"status_code": 200,
"final_url": "https://png.ruyijx.com/m3u8/FhIb8dI4N0Rq5N.m3u8?4SnmurtLmfAOS31uPY",
"final_url": "https://png.ruyijx.com/m3u8/Qq5QavqM1KcyB5.m3u8?6a7Ko6nFnnb7QQP6EQ",
"reason": null
}
},
@@ -1782,14 +1821,14 @@
"error": null,
"traceback": null,
"timings_ms": {
"module_load": 4.262,
"module_load": 5.043,
"init": 0.001,
"home": 0.001,
"category": 221.06,
"detail": 352.19,
"player": 0.006,
"url_check": 1017.544,
"total": 1595.649
"category": 212.764,
"detail": 189.565,
"player": 0.004,
"url_check": 1091.915,
"total": 1499.88
},
"counts": {
"classes": 5,
@@ -1821,14 +1860,14 @@
"error": null,
"traceback": null,
"timings_ms": {
"module_load": 10.968,
"module_load": 11.431,
"init": 0.003,
"home": 273.699,
"category": 1461.957,
"detail": 287.952,
"player": 241.632,
"url_check": 93.601,
"total": 2370.855
"home": 360.276,
"category": 334.746,
"detail": 351.6,
"player": 315.381,
"url_check": 83.158,
"total": 1457.423
},
"counts": {
"classes": 10,
@@ -1844,11 +1883,11 @@
},
"player": {
"parse": 0,
"url": "http://43.248.100.143:9090/nby/m3u8/getM3u8?name=jx.91by.top&time=1780013285941&url=NBY-e84585334a25c5b49078dfac81549a0b.m3u8",
"url": "http://210.16.164.53:9090/nby/m3u8/getM3u8?name=jx.91by.top&time=1780016563901&url=NBY-e84585334a25c5b49078dfac81549a0b.m3u8",
"valid": true,
"reachable": true,
"status_code": 200,
"final_url": "http://43.248.100.143:9090/nby/m3u8/getM3u8?name=jx.91by.top&time=1780013285941&url=NBY-e84585334a25c5b49078dfac81549a0b.m3u8",
"final_url": "http://210.16.164.53:9090/nby/m3u8/getM3u8?name=jx.91by.top&time=1780016563901&url=NBY-e84585334a25c5b49078dfac81549a0b.m3u8",
"reason": null
}
},
@@ -1860,18 +1899,18 @@
"error": null,
"traceback": null,
"timings_ms": {
"module_load": 12.493,
"init": 0.024,
"home": 3515.319,
"category": 627.226,
"detail": 194.302,
"player": 0.002,
"url_check": 117.858,
"total": 4468.274
"module_load": 11.523,
"init": 0.017,
"home": 3358.194,
"category": 755.155,
"detail": 128.425,
"player": 0.001,
"url_check": 113.645,
"total": 4367.545
},
"counts": {
"classes": 11,
"category_videos": 60,
"category_videos": 48,
"detail_videos": 1,
"episodes": 1
},
@@ -1899,14 +1938,14 @@
"error": null,
"traceback": null,
"timings_ms": {
"module_load": 4.141,
"init": 0.0,
"module_load": 8.955,
"init": 0.001,
"home": 0.001,
"category": 480.532,
"detail": 322.982,
"player": 328.113,
"url_check": 213.719,
"total": 1350.121
"category": 5756.779,
"detail": 303.143,
"player": 360.68,
"url_check": 234.419,
"total": 6664.973
},
"counts": {
"classes": 6,
@@ -1938,14 +1977,14 @@
"error": "playerContent 未返回播放地址",
"traceback": null,
"timings_ms": {
"module_load": 7.612,
"init": 194.429,
"home": 243.823,
"category": 581.51,
"detail": 149.667,
"player": 311.149,
"module_load": 7.787,
"init": 219.578,
"home": 215.165,
"category": 385.716,
"detail": 114.779,
"player": 316.898,
"url_check": 0.0,
"total": 2795.351
"total": 14348.279
},
"counts": {
"classes": 5,
@@ -1977,14 +2016,14 @@
"error": null,
"traceback": null,
"timings_ms": {
"module_load": 6.983,
"module_load": 6.74,
"init": 0.001,
"home": 0.001,
"category": 845.73,
"detail": 677.434,
"player": 0.003,
"url_check": 896.906,
"total": 2427.433
"category": 682.276,
"detail": 662.236,
"player": 0.004,
"url_check": 952.429,
"total": 2304.249
},
"counts": {
"classes": 8,
@@ -2016,14 +2055,14 @@
"error": null,
"traceback": null,
"timings_ms": {
"module_load": 39.288,
"module_load": 40.398,
"init": 0.001,
"home": 2.693,
"category": 979.641,
"detail": 662.104,
"home": 2.603,
"category": 676.182,
"detail": 736.376,
"player": 0.002,
"url_check": 1014.299,
"total": 2698.969
"url_check": 1084.557,
"total": 2540.942
},
"counts": {
"classes": 10,
@@ -2055,14 +2094,14 @@
"error": null,
"traceback": null,
"timings_ms": {
"module_load": 48.218,
"init": 0.002,
"home": 0.024,
"category": 585.027,
"detail": 758.082,
"player": 386.917,
"url_check": 74.5,
"total": 1854.01
"module_load": 5.943,
"init": 0.001,
"home": 0.011,
"category": 11727.647,
"detail": 905.562,
"player": 378.095,
"url_check": 369.849,
"total": 13387.986
},
"counts": {
"classes": 5,
@@ -2078,11 +2117,11 @@
},
"player": {
"parse": 0,
"url": "https://vd.jiunuow.com/de8fb16898ddf1f1bc548147712f399d/20260529080806/decry/vd/20260311/MjYwZjE1YTRkO/172631/1998_1080/aac/h264/hls/decrypt/index.m3u8",
"url": "https://vd.jiunuow.com/b86f1a48afd6778085ecf14f8dcd9417/20260529090300/decry/vd/20260311/MjYwZjE1YTRkO/172631/1998_1080/aac/h264/hls/decrypt/index.m3u8",
"valid": true,
"reachable": true,
"status_code": 200,
"final_url": "https://vd.jiunuow.com/de8fb16898ddf1f1bc548147712f399d/20260529080806/decry/vd/20260311/MjYwZjE1YTRkO/172631/1998_1080/aac/h264/hls/decrypt/index.m3u8",
"final_url": "https://vd.jiunuow.com/b86f1a48afd6778085ecf14f8dcd9417/20260529090300/decry/vd/20260311/MjYwZjE1YTRkO/172631/1998_1080/aac/h264/hls/decrypt/index.m3u8",
"reason": null
}
},
@@ -2094,14 +2133,14 @@
"error": null,
"traceback": null,
"timings_ms": {
"module_load": 4.119,
"module_load": 7.212,
"init": 0.001,
"home": 353.639,
"category": 312.657,
"detail": 611.244,
"player": 257.639,
"url_check": 54.008,
"total": 1594.085
"home": 419.613,
"category": 262.939,
"detail": 565.157,
"player": 240.531,
"url_check": 34.262,
"total": 1530.423
},
"counts": {
"classes": 29,
@@ -2133,14 +2172,14 @@
"error": null,
"traceback": null,
"timings_ms": {
"module_load": 5.114,
"init": 0.0,
"home": 583.808,
"category": 268.936,
"detail": 276.561,
"player": 0.022,
"url_check": 348.437,
"total": 1483.427
"module_load": 5.633,
"init": 0.001,
"home": 299.664,
"category": 248.772,
"detail": 239.511,
"player": 0.014,
"url_check": 303.891,
"total": 1098.098
},
"counts": {
"classes": 8,
@@ -2172,14 +2211,14 @@
"error": null,
"traceback": null,
"timings_ms": {
"module_load": 5.262,
"module_load": 5.578,
"init": 0.001,
"home": 0.001,
"category": 296.178,
"detail": 292.04,
"player": 207.607,
"url_check": 1134.023,
"total": 1935.714
"home": 0.0,
"category": 8664.841,
"detail": 7952.524,
"player": 8675.007,
"url_check": 1175.208,
"total": 26474.002
},
"counts": {
"classes": 4,
@@ -2211,14 +2250,14 @@
"error": null,
"traceback": null,
"timings_ms": {
"module_load": 9.343,
"init": 0.023,
"module_load": 8.607,
"init": 0.018,
"home": 0.001,
"category": 1614.932,
"detail": 418.983,
"player": 0.003,
"url_check": 1095.282,
"total": 3139.521
"category": 12469.839,
"detail": 334.602,
"player": 0.002,
"url_check": 1373.005,
"total": 14186.469
},
"counts": {
"classes": 5,
@@ -2250,18 +2289,18 @@
"error": null,
"traceback": null,
"timings_ms": {
"module_load": 20.519,
"init": 1296.809,
"home": 0.08,
"category": 433.714,
"detail": 313.79,
"player": 0.001,
"url_check": 61.87,
"total": 2127.433
"module_load": 23.556,
"init": 963.351,
"home": 0.151,
"category": 695.368,
"detail": 600.38,
"player": 0.002,
"url_check": 50.479,
"total": 2334.195
},
"counts": {
"classes": 11,
"category_videos": 78,
"category_videos": 77,
"detail_videos": 1,
"episodes": 1
},
@@ -2289,14 +2328,14 @@
"error": null,
"traceback": null,
"timings_ms": {
"module_load": 3.399,
"init": 0.0,
"module_load": 3.691,
"init": 0.001,
"home": 0.0,
"category": 203.089,
"detail": 299.663,
"player": 0.01,
"url_check": 1032.845,
"total": 1539.568
"category": 351.885,
"detail": 320.474,
"player": 0.005,
"url_check": 917.254,
"total": 1594.383
},
"counts": {
"classes": 2,
@@ -2323,40 +2362,40 @@
{
"spider": "糯米",
"file": "糯米.txt",
"success": false,
"failed_stage": "url_check",
"error": "HTTPSConnectionPool(host='vip.123pan.cn', port=443): Max retries exceeded with url: /1853039965/202510/%E4%B8%BB%E8%A7%92/%E4%B8%BB%E8%A7%92EP01.m3u8 (Caused by SSLError(SSLError(1, '[SSL: RECORD_LAYER_FAILURE] record layer failure (_ssl.c:1081)')))",
"success": true,
"failed_stage": null,
"error": null,
"traceback": null,
"timings_ms": {
"module_load": 5.155,
"init": 0.0,
"home": 480.251,
"category": 445.854,
"detail": 141.152,
"player": 272.329,
"url_check": 55.611,
"total": 2881.625
"module_load": 8.042,
"init": 0.001,
"home": 9163.935,
"category": 5733.142,
"detail": 199.808,
"player": 435.394,
"url_check": 1826.344,
"total": 26451.865
},
"counts": {
"classes": 7,
"category_videos": 46,
"classes": 5,
"category_videos": 168,
"detail_videos": 1,
"episodes": 2
},
"samples": {
"tid": "/vod-type-id-2-pg-1.html",
"vod_id": "90367",
"flag": "lzm3u8",
"play_id": "/vod-play-id-90367-src-2-num-1.html"
"tid": "dianying",
"vod_id": "/vod/63169.html",
"flag": "FF",
"play_id": "/play/63169-1-1.html"
},
"player": {
"parse": 0,
"url": "https://vip.123pan.cn/1853039965/202510/主角/主角EP01.m3u8",
"valid": false,
"reachable": false,
"status_code": null,
"final_url": "https://vip.123pan.cn/1853039965/202510/主角/主角EP01.m3u8",
"reason": "HTTPSConnectionPool(host='vip.123pan.cn', port=443): Max retries exceeded with url: /1853039965/202510/%E4%B8%BB%E8%A7%92/%E4%B8%BB%E8%A7%92EP01.m3u8 (Caused by SSLError(SSLError(1, '[SSL: RECORD_LAYER_FAILURE] record layer failure (_ssl.c:1081)')))"
"url": "https://vip.ffzy-plays.com/20260527/54022_3b36ae8d/index.m3u8",
"valid": true,
"reachable": true,
"status_code": 200,
"final_url": "https://vip.ffzy-plays.com/20260527/54022_3b36ae8d/index.m3u8",
"reason": null
}
},
{
@@ -2367,14 +2406,14 @@
"error": "Expecting value: line 1 column 1 (char 0)",
"traceback": "Traceback (most recent call last):\n File \"/home/harold/workspace/atv-spiders/py/.venv/lib/python3.14/site-packages/requests/models.py\", line 978, in json\n return complexjson.loads(self.text, **kwargs)\n ~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^\n File \"/home/harold/.local/share/uv/python/cpython-3.14.3-linux-x86_64-gnu/lib/python3.14/json/__init__.py\", line 352, in loads\n return _default_decoder.decode(s)\n ~~~~~~~~~~~~~~~~~~~~~~~^^^\n File \"/home/harold/.local/share/uv/python/cpython-3.14.3-linux-x86_64-gnu/lib/python3.14/json/decoder.py\", line 345, in decode\n obj, end = self.raw_decode(s, idx=_w(s, 0).end())\n ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^\n File \"/home/harold/.local/share/uv/python/cpython-3.14.3-linux-x86_64-gnu/lib/python3.14/json/decoder.py\", line 363, in raw_decode\n raise JSONDecodeError(\"Expecting value\", s, err.value) from None\njson.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)\n\nDuring handling of the above exception, another exception occurred:\n\nTraceback (most recent call last):\n File \"/home/harold/workspace/atv-spiders/py/validate_spiders.py\", line 721, in validate_spider_file\n _validate_from_tid(\n ~~~~~~~~~~~~~~~~~~^\n spider=spider,\n ^^^^^^^^^^^^^^\n ...<6 lines>...\n logger=logger,\n ^^^^^^^^^^^^^^\n )\n ^\n File \"/home/harold/workspace/atv-spiders/py/validate_spiders.py\", line 472, in _validate_from_tid\n player_result = _run_timed(result[\"timings_ms\"], \"player\", spider.playerContent, clock, play[\"flag\"], play[\"play_id\"], [])\n File \"/home/harold/workspace/atv-spiders/py/validate_spiders.py\", line 296, in _run_timed\n return func(*args, **kwargs)\n File \"/home/harold/workspace/tvbox-resources/py/网易云音乐.txt\", line 124, in playerContent\n File \"/home/harold/workspace/atv-spiders/py/.venv/lib/python3.14/site-packages/requests/models.py\", line 982, in json\n raise RequestsJSONDecodeError(e.msg, e.doc, e.pos)\nrequests.exceptions.JSONDecodeError: Expecting value: line 1 column 1 (char 0)\n",
"timings_ms": {
"module_load": 3.691,
"module_load": 12.299,
"init": 0.001,
"home": 499.206,
"category": 457.057,
"home": 412.324,
"category": 350.11,
"detail": 0.005,
"player": 296.226,
"player": 304.558,
"url_check": 0.0,
"total": 1258.472
"total": 1083.745
},
"counts": {
"classes": 62,
@@ -2384,9 +2423,9 @@
},
"samples": {
"tid": "/discover/toplist?id=19723756",
"vod_id": "3384368022@Reno My Way@宋雨琦👉MP3",
"vod_id": "3353437817@我对缘分小心翼翼@林俊杰👉MV",
"flag": "网易云音乐",
"play_id": "3384368022"
"play_id": "3353437817"
},
"player": {
"parse": null,
@@ -2402,18 +2441,18 @@
"spider": "耐视点播",
"file": "耐视点播.txt",
"success": false,
"failed_stage": "category",
"error": "分类视频列表为空",
"traceback": null,
"failed_stage": "unexpected",
"error": "('Connection aborted.', RemoteDisconnected('Remote end closed connection without response'))",
"traceback": "Traceback (most recent call last):\n File \"/home/harold/workspace/atv-spiders/py/validate_spiders.py\", line 721, in validate_spider_file\n _validate_from_tid(\n ~~~~~~~~~~~~~~~~~~^\n spider=spider,\n ^^^^^^^^^^^^^^\n ...<6 lines>...\n logger=logger,\n ^^^^^^^^^^^^^^\n )\n ^\n File \"/home/harold/workspace/atv-spiders/py/validate_spiders.py\", line 428, in _validate_from_tid\n video = _extract_first_video(category_result)\n File \"/home/harold/workspace/atv-spiders/py/validate_spiders.py\", line 320, in _extract_first_video\n raise ValidationError(\"category\", \"分类视频列表为空\")\nValidationError: 分类视频列表为空\n\nDuring handling of the above exception, another exception occurred:\n\nTraceback (most recent call last):\n File \"/home/harold/workspace/atv-spiders/py/.venv/lib/python3.14/site-packages/urllib3/connectionpool.py\", line 787, in urlopen\n response = self._make_request(\n conn,\n ...<10 lines>...\n **response_kw,\n )\n File \"/home/harold/workspace/atv-spiders/py/.venv/lib/python3.14/site-packages/urllib3/connectionpool.py\", line 534, in _make_request\n response = conn.getresponse()\n File \"/home/harold/workspace/atv-spiders/py/.venv/lib/python3.14/site-packages/urllib3/connection.py\", line 571, in getresponse\n httplib_response = super().getresponse()\n File \"/home/harold/.local/share/uv/python/cpython-3.14.3-linux-x86_64-gnu/lib/python3.14/http/client.py\", line 1450, in getresponse\n response.begin()\n ~~~~~~~~~~~~~~^^\n File \"/home/harold/.local/share/uv/python/cpython-3.14.3-linux-x86_64-gnu/lib/python3.14/http/client.py\", line 336, in begin\n version, status, reason = self._read_status()\n ~~~~~~~~~~~~~~~~~^^\nhttp.client.RemoteDisconnected: Remote end closed connection without response\n\nDuring handling of the above exception, another exception occurred:\n\nTraceback (most recent call last):\n File \"/home/harold/workspace/atv-spiders/py/.venv/lib/python3.14/site-packages/requests/adapters.py\", line 645, in send\n resp = conn.urlopen(\n method=request.method,\n ...<9 lines>...\n chunked=chunked,\n )\n File \"/home/harold/workspace/atv-spiders/py/.venv/lib/python3.14/site-packages/urllib3/connectionpool.py\", line 841, in urlopen\n retries = retries.increment(\n method, url, error=new_e, _pool=self, _stacktrace=sys.exc_info()[2]\n )\n File \"/home/harold/workspace/atv-spiders/py/.venv/lib/python3.14/site-packages/urllib3/util/retry.py\", line 490, in increment\n raise reraise(type(error), error, _stacktrace)\n ~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/home/harold/workspace/atv-spiders/py/.venv/lib/python3.14/site-packages/urllib3/util/util.py\", line 38, in reraise\n raise value.with_traceback(tb)\n File \"/home/harold/workspace/atv-spiders/py/.venv/lib/python3.14/site-packages/urllib3/connectionpool.py\", line 787, in urlopen\n response = self._make_request(\n conn,\n ...<10 lines>...\n **response_kw,\n )\nurllib3.exceptions.ProtocolError: ('Connection aborted.', RemoteDisconnected('Remote end closed connection without response'))\n\nDuring handling of the above exception, another exception occurred:\n\nTraceback (most recent call last):\n File \"/home/harold/workspace/atv-spiders/py/validate_spiders.py\", line 737, in validate_spider_file\n _validate_from_tid(\n ~~~~~~~~~~~~~~~~~~^\n spider=spider,\n ^^^^^^^^^^^^^^\n ...<6 lines>...\n logger=logger,\n ^^^^^^^^^^^^^^\n )\n ^\n File \"/home/harold/workspace/atv-spiders/py/validate_spiders.py\", line 417, in _validate_from_tid\n category_result = _run_timed(result[\"timings_ms\"], \"category\", spider.categoryContent, clock, tid, \"1\", False, {})\n File \"/home/harold/workspace/atv-spiders/py/validate_spiders.py\", line 296, in _run_timed\n return func(*args, **kwargs)\n File \"/home/harold/workspace/tvbox-resources/py/耐视点播.txt\", line 174, in categoryContent\n File \"/home/harold/workspace/tvbox-resources/py/耐视点播.txt\", line 76, in _request_html\nrequests.exceptions.ConnectionError: ('Connection aborted.', RemoteDisconnected('Remote end closed connection without response'))\n",
"timings_ms": {
"module_load": 4.619,
"module_load": 15.479,
"init": 0.001,
"home": 0.001,
"category": 1660.528,
"category": 9832.361,
"detail": 0.0,
"player": 0.0,
"url_check": 0.0,
"total": 3583.777
"total": 30171.009
},
"counts": {
"classes": 6,
@@ -2445,14 +2484,14 @@
"error": null,
"traceback": null,
"timings_ms": {
"module_load": 5.921,
"module_load": 5.617,
"init": 0.001,
"home": 126.067,
"category": 279.187,
"detail": 1136.099,
"player": 0.003,
"url_check": 189.389,
"total": 1737.236
"home": 92.518,
"category": 262.952,
"detail": 1093.569,
"player": 0.002,
"url_check": 203.338,
"total": 1658.78
},
"counts": {
"classes": 7,
@@ -2484,14 +2523,14 @@
"error": null,
"traceback": null,
"timings_ms": {
"module_load": 13.432,
"module_load": 14.119,
"init": 0.001,
"home": 0.001,
"category": 729.326,
"detail": 420.145,
"player": 0.007,
"url_check": 159.156,
"total": 1322.59
"category": 1157.957,
"detail": 10828.529,
"player": 0.008,
"url_check": 145.205,
"total": 12146.369
},
"counts": {
"classes": 7,
@@ -2523,14 +2562,14 @@
"error": null,
"traceback": null,
"timings_ms": {
"module_load": 5.324,
"init": 0.0,
"home": 466.435,
"category": 449.323,
"detail": 347.107,
"player": 574.263,
"url_check": 1911.561,
"total": 3755.635
"module_load": 10.298,
"init": 0.001,
"home": 452.567,
"category": 9239.563,
"detail": 9847.463,
"player": 7456.01,
"url_check": 873.341,
"total": 27880.029
},
"counts": {
"classes": 4,
@@ -2557,39 +2596,39 @@
{
"spider": "虎斑",
"file": "虎斑.txt",
"success": true,
"failed_stage": null,
"error": null,
"traceback": null,
"success": false,
"failed_stage": "unexpected",
"error": "HTTPConnectionPool(host='38.76.197.203', port=16969): Read timed out.",
"traceback": "Traceback (most recent call last):\n File \"/home/harold/workspace/atv-spiders/py/.venv/lib/python3.14/site-packages/urllib3/response.py\", line 903, in _error_catcher\n yield\n File \"/home/harold/workspace/atv-spiders/py/.venv/lib/python3.14/site-packages/urllib3/response.py\", line 1421, in read_chunked\n chunk = self._handle_chunk(amt)\n File \"/home/harold/workspace/atv-spiders/py/.venv/lib/python3.14/site-packages/urllib3/response.py\", line 1354, in _handle_chunk\n value = self._fp._safe_read(amt) # type: ignore[union-attr]\n File \"/home/harold/.local/share/uv/python/cpython-3.14.3-linux-x86_64-gnu/lib/python3.14/http/client.py\", line 648, in _safe_read\n data = self.fp.read(cursize)\n File \"/home/harold/.local/share/uv/python/cpython-3.14.3-linux-x86_64-gnu/lib/python3.14/socket.py\", line 725, in readinto\n return self._sock.recv_into(b)\n ~~~~~~~~~~~~~~~~~~~~^^^\nTimeoutError: timed out\n\nThe above exception was the direct cause of the following exception:\n\nTraceback (most recent call last):\n File \"/home/harold/workspace/atv-spiders/py/.venv/lib/python3.14/site-packages/requests/models.py\", line 822, in generate\n yield from self.raw.stream(chunk_size, decode_content=True)\n File \"/home/harold/workspace/atv-spiders/py/.venv/lib/python3.14/site-packages/urllib3/response.py\", line 1250, in stream\n yield from self.read_chunked(amt, decode_content=decode_content)\n File \"/home/harold/workspace/atv-spiders/py/.venv/lib/python3.14/site-packages/urllib3/response.py\", line 1397, in read_chunked\n with self._error_catcher():\n ~~~~~~~~~~~~~~~~~~~^^\n File \"/home/harold/.local/share/uv/python/cpython-3.14.3-linux-x86_64-gnu/lib/python3.14/contextlib.py\", line 162, in __exit__\n self.gen.throw(value)\n ~~~~~~~~~~~~~~^^^^^^^\n File \"/home/harold/workspace/atv-spiders/py/.venv/lib/python3.14/site-packages/urllib3/response.py\", line 908, in _error_catcher\n raise ReadTimeoutError(self._pool, None, \"Read timed out.\") from e # type: ignore[arg-type]\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nurllib3.exceptions.ReadTimeoutError: HTTPConnectionPool(host='38.76.197.203', port=16969): Read timed out.\n\nDuring handling of the above exception, another exception occurred:\n\nTraceback (most recent call last):\n File \"/home/harold/workspace/atv-spiders/py/validate_spiders.py\", line 721, in validate_spider_file\n _validate_from_tid(\n ~~~~~~~~~~~~~~~~~~^\n spider=spider,\n ^^^^^^^^^^^^^^\n ...<6 lines>...\n logger=logger,\n ^^^^^^^^^^^^^^\n )\n ^\n File \"/home/harold/workspace/atv-spiders/py/validate_spiders.py\", line 417, in _validate_from_tid\n category_result = _run_timed(result[\"timings_ms\"], \"category\", spider.categoryContent, clock, tid, \"1\", False, {})\n File \"/home/harold/workspace/atv-spiders/py/validate_spiders.py\", line 296, in _run_timed\n return func(*args, **kwargs)\n File \"/home/harold/workspace/tvbox-resources/py/虎斑.txt\", line 904, in categoryContent\n File \"/home/harold/workspace/tvbox-resources/py/虎斑.txt\", line 695, in _request_html\nrequests.exceptions.ConnectionError: HTTPConnectionPool(host='38.76.197.203', port=16969): Read timed out.\n",
"timings_ms": {
"module_load": 7.963,
"module_load": 8.066,
"init": 0.001,
"home": 0.001,
"category": 493.159,
"detail": 7973.263,
"player": 0.015,
"url_check": 152.381,
"total": 8627.345
"category": 15608.842,
"detail": 0.0,
"player": 0.0,
"url_check": 0.0,
"total": 15623.475
},
"counts": {
"classes": 7,
"category_videos": 72,
"detail_videos": 1,
"episodes": 2
"category_videos": 0,
"detail_videos": 0,
"episodes": 0
},
"samples": {
"tid": "1",
"vod_id": "461288",
"flag": "夸克#虎斑",
"play_id": "https://pan.quark.cn/s/b320797d0477"
"vod_id": null,
"flag": null,
"play_id": null
},
"player": {
"parse": 0,
"url": "https://pan.quark.cn/s/b320797d0477",
"valid": true,
"reachable": true,
"status_code": 200,
"final_url": "https://pan.quark.cn/s/b320797d0477",
"parse": null,
"url": "",
"valid": false,
"reachable": null,
"status_code": null,
"final_url": "",
"reason": null
}
},
@@ -2601,14 +2640,14 @@
"error": null,
"traceback": null,
"timings_ms": {
"module_load": 9.283,
"module_load": 8.928,
"init": 0.001,
"home": 0.001,
"category": 612.295,
"detail": 637.515,
"player": 0.003,
"url_check": 1014.929,
"total": 2274.48
"category": 22736.874,
"detail": 395.335,
"player": 0.005,
"url_check": 1150.53,
"total": 24292.003
},
"counts": {
"classes": 7,
@@ -2640,14 +2679,14 @@
"error": null,
"traceback": null,
"timings_ms": {
"module_load": 6.899,
"module_load": 7.773,
"init": 0.001,
"home": 0.001,
"category": 801.996,
"detail": 292.301,
"player": 285.671,
"url_check": 1311.646,
"total": 2699.085
"category": 761.749,
"detail": 9743.517,
"player": 284.334,
"url_check": 1235.326,
"total": 12033.408
},
"counts": {
"classes": 4,
@@ -2679,14 +2718,14 @@
"error": null,
"traceback": null,
"timings_ms": {
"module_load": 6.443,
"module_load": 6.353,
"init": 0.0,
"home": 462.391,
"category": 292.089,
"detail": 249.148,
"player": 323.963,
"url_check": 426.413,
"total": 1762.035
"home": 490.323,
"category": 196.814,
"detail": 328.385,
"player": 7413.541,
"url_check": 430.592,
"total": 8866.659
},
"counts": {
"classes": 6,
@@ -2696,17 +2735,17 @@
},
"samples": {
"tid": "20",
"vod_id": "135188",
"vod_id": "134532",
"flag": "备用源(有广勿信)",
"play_id": "https://svip.ffzyplay.com/?url=https://vip.ffzy-online3.com/20260518/44505_313fa9a7/index.m3u8|香港探秘地图粤语|1"
"play_id": "https://svip.ffzyplay.com/?url=https://vod.feifei-video.com/20260427/42451_1abe906b/index.m3u8|魅力航班第二季|1"
},
"player": {
"parse": 0,
"url": "https://svip.ffzyplay.com/?url=https://vip.ffzy-online3.com/20260518/44505_313fa9a7/index.m3u8",
"url": "https://svip.ffzyplay.com/?url=https://vod.feifei-video.com/20260427/42451_1abe906b/index.m3u8",
"valid": true,
"reachable": true,
"status_code": 200,
"final_url": "https://svip.ffzyplay.com/?url=https://vip.ffzy-online3.com/20260518/44505_313fa9a7/index.m3u8",
"final_url": "https://svip.ffzyplay.com/?url=https://vod.feifei-video.com/20260427/42451_1abe906b/index.m3u8",
"reason": null
}
},
@@ -2718,14 +2757,14 @@
"error": "分类视频列表为空",
"traceback": null,
"timings_ms": {
"module_load": 4.318,
"module_load": 7.409,
"init": 0.001,
"home": 0.0,
"category": 287.529,
"category": 8059.504,
"detail": 0.0,
"player": 0.0,
"url_check": 0.0,
"total": 490.53
"total": 8245.273
},
"counts": {
"classes": 6,
@@ -2757,14 +2796,14 @@
"error": null,
"traceback": null,
"timings_ms": {
"module_load": 9.238,
"init": 0.001,
"home": 374.348,
"category": 110.669,
"detail": 3459.388,
"player": 148.625,
"url_check": 41.666,
"total": 4146.246
"module_load": 4.89,
"init": 0.0,
"home": 367.778,
"category": 104.083,
"detail": 3372.739,
"player": 160.682,
"url_check": 48.452,
"total": 4059.677
},
"counts": {
"classes": 4,
@@ -2780,11 +2819,11 @@
},
"player": {
"parse": 0,
"url": "http://car-lv.kuwo.cn/faeea2588d983b6e275defe177c7a539/6a18d8ec/resource/30106/trackmedia/long/M500002ZiI9a1sctnS.mp3?bitrate$128&format$mp3&source$kwplayerhd_ar_4.3.0.8_tianbao_T1A_qirui.apk&type$convert_url_with_sign&user$&loginUid$",
"url": "http://car-lv.kuwo.cn/e711f492122b2d26668ba2f72ec45ab8/6a18e5c6/resource/30106/trackmedia/long/M500002ZiI9a1sctnS.mp3?bitrate$128&format$mp3&source$kwplayerhd_ar_4.3.0.8_tianbao_T1A_qirui.apk&type$convert_url_with_sign&user$&loginUid$",
"valid": true,
"reachable": true,
"status_code": 200,
"final_url": "http://car-lv.kuwo.cn/faeea2588d983b6e275defe177c7a539/6a18d8ec/resource/30106/trackmedia/long/M500002ZiI9a1sctnS.mp3?bitrate$128&format$mp3&source$kwplayerhd_ar_4.3.0.8_tianbao_T1A_qirui.apk&type$convert_url_with_sign&user$&loginUid$",
"final_url": "http://car-lv.kuwo.cn/e711f492122b2d26668ba2f72ec45ab8/6a18e5c6/resource/30106/trackmedia/long/M500002ZiI9a1sctnS.mp3?bitrate$128&format$mp3&source$kwplayerhd_ar_4.3.0.8_tianbao_T1A_qirui.apk&type$convert_url_with_sign&user$&loginUid$",
"reason": null
}
},
@@ -2796,14 +2835,14 @@
"error": null,
"traceback": null,
"timings_ms": {
"module_load": 9.683,
"init": 415.272,
"home": 243.42,
"category": 260.548,
"detail": 257.204,
"player": 357.389,
"url_check": 235.25,
"total": 1780.133
"module_load": 7.154,
"init": 442.617,
"home": 258.415,
"category": 288.141,
"detail": 308.709,
"player": 362.223,
"url_check": 24.485,
"total": 1692.9
},
"counts": {
"classes": 12,
@@ -2813,17 +2852,17 @@
},
"samples": {
"tid": "recommend",
"vod_id": "822573066",
"vod_id": "854978064",
"flag": "酷狗音乐",
"play_id": "822573066"
"play_id": "854978064"
},
"player": {
"parse": 0,
"url": "http://fsdg360.tx.kugou.com/202605290808/3fd0828f684533b428bb262aabdc97a4/v3/821a671d72e3dbc343b7cbb57571593e/yp/full/ap1013_us0_mic85f71c379c462618de1399950957c33_pi6101_mx822573066_qumultitrack_s2358027141.mkv?ft=car_203559_10049&fts=b05bb02d44717442054bac7624ed9a29&ext=.mkv",
"url": "http://fsdg360.tx.kugou.com/202605290903/0a1b20f6dc9a33af46136a43906044c1/v3/6a1368ffa32207172f51e979651b3b7c/yp/full/ap1013_us0_mic85f71c379c462618de1399950957c33_pi6101_mx854978064_qumultitrack_s2058156924.mkv?ft=car_203559_10049&fts=b05bb02d44717442054bac7624ed9a29&ext=.mkv",
"valid": true,
"reachable": true,
"status_code": 200,
"final_url": "http://fsdg360.tx.kugou.com/202605290808/3fd0828f684533b428bb262aabdc97a4/v3/821a671d72e3dbc343b7cbb57571593e/yp/full/ap1013_us0_mic85f71c379c462618de1399950957c33_pi6101_mx822573066_qumultitrack_s2358027141.mkv?ft=car_203559_10049&fts=b05bb02d44717442054bac7624ed9a29&ext=.mkv",
"final_url": "http://fsdg360.tx.kugou.com/202605290903/0a1b20f6dc9a33af46136a43906044c1/v3/6a1368ffa32207172f51e979651b3b7c/yp/full/ap1013_us0_mic85f71c379c462618de1399950957c33_pi6101_mx854978064_qumultitrack_s2058156924.mkv?ft=car_203559_10049&fts=b05bb02d44717442054bac7624ed9a29&ext=.mkv",
"reason": null
}
},
@@ -2835,14 +2874,14 @@
"error": null,
"traceback": null,
"timings_ms": {
"module_load": 5.887,
"module_load": 15.226,
"init": 0.001,
"home": 1725.073,
"category": 203.405,
"detail": 199.52,
"player": 209.691,
"url_check": 1157.552,
"total": 3502.074
"home": 1574.235,
"category": 211.591,
"detail": 203.326,
"player": 230.227,
"url_check": 512.757,
"total": 2748.142
},
"counts": {
"classes": 4,
@@ -2858,11 +2897,11 @@
},
"player": {
"parse": 0,
"url": "https://ppvod011.blbtgg.com/splitOut/20260318/1267932/V20260318194542050871267932/index.m3u8?auth_key=1780013290-595209eba54f43c9a5f9d7c5eaab2f9a-0-2fa534dcba41d595d044142be48baab2",
"url": "https://ppvod01.kqgfbs.com/splitOut/20260318/1267932/V20260318194542050871267932/index.m3u8?t=6a190ff6&whip=171.212.167.174&sign=cf0ace9481c9ce26510959137c19b3684ab05adf",
"valid": true,
"reachable": true,
"status_code": 200,
"final_url": "https://ppvod011.blbtgg.com/splitOut/20260318/1267932/V20260318194542050871267932/index.m3u8?auth_key=1780013290-595209eba54f43c9a5f9d7c5eaab2f9a-0-2fa534dcba41d595d044142be48baab2",
"final_url": "https://ppvod01.kqgfbs.com/splitOut/20260318/1267932/V20260318194542050871267932/index.m3u8?t=6a190ff6&whip=171.212.167.174&sign=cf0ace9481c9ce26510959137c19b3684ab05adf",
"reason": null
}
},
@@ -2874,14 +2913,14 @@
"error": null,
"traceback": null,
"timings_ms": {
"module_load": 6.543,
"module_load": 9.475,
"init": 0.001,
"home": 0.001,
"category": 375.875,
"detail": 301.518,
"category": 17717.611,
"detail": 2971.848,
"player": 0.007,
"url_check": 142.227,
"total": 826.602
"url_check": 171.354,
"total": 20870.734
},
"counts": {
"classes": 5,
@@ -2913,14 +2952,14 @@
"error": null,
"traceback": null,
"timings_ms": {
"module_load": 6.914,
"module_load": 6.265,
"init": 0.001,
"home": 0.001,
"category": 973.972,
"detail": 977.726,
"player": 1035.764,
"url_check": 890.842,
"total": 3885.982
"category": 980.418,
"detail": 7103.907,
"player": 10117.988,
"url_check": 828.392,
"total": 19037.592
},
"counts": {
"classes": 4,
@@ -2952,14 +2991,14 @@
"error": "分类列表为空",
"traceback": null,
"timings_ms": {
"module_load": 4.995,
"module_load": 6.717,
"init": 0.001,
"home": 319.071,
"home": 6890.427,
"category": 0.0,
"detail": 0.0,
"player": 0.0,
"url_check": 0.0,
"total": 324.206
"total": 6897.282
},
"counts": {
"classes": 0,
@@ -2991,14 +3030,14 @@
"error": null,
"traceback": null,
"timings_ms": {
"module_load": 4.88,
"module_load": 5.447,
"init": 0.001,
"home": 0.0,
"category": 196.788,
"detail": 267.355,
"player": 0.015,
"url_check": 604.15,
"total": 1073.827
"home": 0.001,
"category": 3524.137,
"detail": 454.924,
"player": 0.01,
"url_check": 396.476,
"total": 18450.669
},
"counts": {
"classes": 6,
@@ -3007,18 +3046,18 @@
"episodes": 2
},
"samples": {
"tid": "1",
"vod_id": "171427",
"tid": "2",
"vod_id": "155698",
"flag": "LZ源",
"play_id": "eyJ1cmwiOiJodHRwczovL3YubHpjZG4yNy5jb20vMjAyNTA3MzEvNjc5XzUwYTJiMDQ3L2luZGV4Lm0zdTgiLCJwYXJzZV9hcGkiOiJodHRwczovL2RlbC5tdDMyMC5jb20vbHpmZi5waHA_dXJsPSIsImhlYWRlcnMiOnt9LCJ1c2VyX2FnZW50IjoiIn0="
"play_id": "eyJ1cmwiOiJodHRwczovL3YubHpjZG4yOC5jb20vMjAyNTA5MjMvMjMyNl9hOWJmMjM0YS9pbmRleC5tM3U4IiwicGFyc2VfYXBpIjoiaHR0cHM6Ly9kZWwubXQzMjAuY29tL2x6ZmYucGhwP3VybD0iLCJoZWFkZXJzIjp7fSwidXNlcl9hZ2VudCI6IiJ9"
},
"player": {
"parse": 0,
"url": "https://v.lzcdn27.com/20250731/679_50a2b047/index.m3u8",
"url": "https://v.lzcdn28.com/20250923/2326_a9bf234a/index.m3u8",
"valid": true,
"reachable": true,
"status_code": 200,
"final_url": "https://v.lzcdn27.com/20250731/679_50a2b047/index.m3u8",
"final_url": "https://v.lzcdn28.com/20250923/2326_a9bf234a/index.m3u8",
"reason": null
}
},
@@ -3030,14 +3069,14 @@
"error": "('Connection aborted.', RemoteDisconnected('Remote end closed connection without response'))",
"traceback": "Traceback (most recent call last):\n File \"/home/harold/workspace/atv-spiders/py/.venv/lib/python3.14/site-packages/urllib3/connectionpool.py\", line 787, in urlopen\n response = self._make_request(\n conn,\n ...<10 lines>...\n **response_kw,\n )\n File \"/home/harold/workspace/atv-spiders/py/.venv/lib/python3.14/site-packages/urllib3/connectionpool.py\", line 534, in _make_request\n response = conn.getresponse()\n File \"/home/harold/workspace/atv-spiders/py/.venv/lib/python3.14/site-packages/urllib3/connection.py\", line 571, in getresponse\n httplib_response = super().getresponse()\n File \"/home/harold/.local/share/uv/python/cpython-3.14.3-linux-x86_64-gnu/lib/python3.14/http/client.py\", line 1450, in getresponse\n response.begin()\n ~~~~~~~~~~~~~~^^\n File \"/home/harold/.local/share/uv/python/cpython-3.14.3-linux-x86_64-gnu/lib/python3.14/http/client.py\", line 336, in begin\n version, status, reason = self._read_status()\n ~~~~~~~~~~~~~~~~~^^\nhttp.client.RemoteDisconnected: Remote end closed connection without response\n\nDuring handling of the above exception, another exception occurred:\n\nTraceback (most recent call last):\n File \"/home/harold/workspace/atv-spiders/py/.venv/lib/python3.14/site-packages/requests/adapters.py\", line 645, in send\n resp = conn.urlopen(\n method=request.method,\n ...<9 lines>...\n chunked=chunked,\n )\n File \"/home/harold/workspace/atv-spiders/py/.venv/lib/python3.14/site-packages/urllib3/connectionpool.py\", line 841, in urlopen\n retries = retries.increment(\n method, url, error=new_e, _pool=self, _stacktrace=sys.exc_info()[2]\n )\n File \"/home/harold/workspace/atv-spiders/py/.venv/lib/python3.14/site-packages/urllib3/util/retry.py\", line 490, in increment\n raise reraise(type(error), error, _stacktrace)\n ~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/home/harold/workspace/atv-spiders/py/.venv/lib/python3.14/site-packages/urllib3/util/util.py\", line 38, in reraise\n raise value.with_traceback(tb)\n File \"/home/harold/workspace/atv-spiders/py/.venv/lib/python3.14/site-packages/urllib3/connectionpool.py\", line 787, in urlopen\n response = self._make_request(\n conn,\n ...<10 lines>...\n **response_kw,\n )\nurllib3.exceptions.ProtocolError: ('Connection aborted.', RemoteDisconnected('Remote end closed connection without response'))\n\nDuring handling of the above exception, another exception occurred:\n\nTraceback (most recent call last):\n File \"/home/harold/workspace/atv-spiders/py/validate_spiders.py\", line 705, in validate_spider_file\n home_result = _run_timed(result[\"timings_ms\"], \"home\", spider.homeContent, clock, False)\n File \"/home/harold/workspace/atv-spiders/py/validate_spiders.py\", line 296, in _run_timed\n return func(*args, **kwargs)\n File \"/home/harold/workspace/tvbox-resources/py/黑猫APP.txt\", line 155, in homeContent\n File \"/home/harold/workspace/tvbox-resources/py/黑猫APP.txt\", line 67, in _api_post\n File \"/home/harold/workspace/atv-spiders/py/base/spider.py\", line 152, in post\n rsp = requests.post(url, params=params, data=data, json=json, cookies=cookies, headers=headers, timeout=timeout,\n verify=verify, stream=stream, allow_redirects=allow_redirects)\nrequests.exceptions.ConnectionError: ('Connection aborted.', RemoteDisconnected('Remote end closed connection without response'))\n",
"timings_ms": {
"module_load": 5.294,
"module_load": 5.347,
"init": 0.001,
"home": 263.678,
"home": 197.249,
"category": 0.0,
"detail": 0.0,
"player": 0.0,
"url_check": 0.0,
"total": 275.748
"total": 206.185
},
"counts": {
"classes": 0,