Files
tvboxzt/spider_validation.json
T
2026-05-29 09:03:30 +08:00

3104 lines
112 KiB
JSON

{
"generated_at": "2026-05-29T09:02:16+08:00",
"max_workers": 16,
"total_duration_ms": 73106.067,
"summary": {
"total": 79,
"success": 65,
"failed": 14,
"success_rate": 0.8228,
"stage_failures": {
"module_load": 0,
"init": 0,
"home": 1,
"category": 3,
"detail": 1,
"player": 1,
"url_check": 0,
"unexpected": 8
}
},
"results": [
{
"spider": "4KVM",
"file": "4KVM.txt",
"success": true,
"failed_stage": null,
"error": null,
"traceback": null,
"timings_ms": {
"module_load": 120.741,
"init": 0.001,
"home": 466.278,
"category": 5878.583,
"detail": 335.017,
"player": 10119.243,
"url_check": 424.737,
"total": 47368.223
},
"counts": {
"classes": 6,
"category_videos": 24,
"detail_videos": 1,
"episodes": 1
},
"samples": {
"tid": "0",
"vod_id": "ch45uoheg",
"flag": "alists",
"play_id": "34106|ch45uoheg"
},
"player": {
"parse": 0,
"url": "https://oss.douyinbit.com/m3u8/343cbeca6f317f32363710b998c7ef04.m3u8",
"valid": true,
"reachable": true,
"status_code": 200,
"final_url": "https://oss.douyinbit.com/m3u8/343cbeca6f317f32363710b998c7ef04.m3u8",
"reason": null
}
},
{
"spider": "4K指南",
"file": "4K指南.txt",
"success": true,
"failed_stage": null,
"error": null,
"traceback": null,
"timings_ms": {
"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,
"category_videos": 50,
"detail_videos": 1,
"episodes": 2
},
"samples": {
"tid": "zuixin",
"vod_id": "20247",
"flag": "夸克网盘",
"play_id": "push://https://pan.quark.cn/s/ff3b1d0af705"
},
"player": {
"parse": 0,
"url": "https://pan.quark.cn/s/ff3b1d0af705",
"valid": true,
"reachable": true,
"status_code": 200,
"final_url": "https://pan.quark.cn/s/ff3b1d0af705",
"reason": null
}
},
{
"spider": "6V磁力",
"file": "6V磁力.txt",
"success": true,
"failed_stage": null,
"error": null,
"traceback": null,
"timings_ms": {
"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,
"category_videos": 18,
"detail_videos": 1,
"episodes": 2
},
"samples": {
"tid": "dianshiju/guoju",
"vod_id": "/dianshiju/guoju/28754.html",
"flag": "01-07.1080p.HD国语中字无水印.mkv",
"play_id": "magnet:?xt=urn:btih:179e2e96aecc2ff52e16b81e3b3c1e89a6010b05&dn=%E4%B8%BB%E8%A7%9201-07"
},
"player": {
"parse": 0,
"url": "magnet:?xt=urn:btih:179e2e96aecc2ff52e16b81e3b3c1e89a6010b05&dn=%E4%B8%BB%E8%A7%9201-07",
"valid": true,
"reachable": null,
"status_code": null,
"final_url": "magnet:?xt=urn:btih:179e2e96aecc2ff52e16b81e3b3c1e89a6010b05&dn=%E4%B8%BB%E8%A7%9201-07",
"reason": "非 HTTP 地址,按协议格式通过"
}
},
{
"spider": "AAZ音乐",
"file": "AAZ音乐.txt",
"success": true,
"failed_stage": null,
"error": null,
"traceback": null,
"timings_ms": {
"module_load": 217.955,
"init": 0.001,
"home": 6992.122,
"category": 6764.974,
"detail": 8634.911,
"player": 174.946,
"url_check": 590.015,
"total": 23375.658
},
"counts": {
"classes": 6,
"category_videos": 60,
"detail_videos": 1,
"episodes": 1
},
"samples": {
"tid": "new",
"vod_id": "song:e0f3c77fa564632f924f77fc5943ba7e",
"flag": "AAZ音乐",
"play_id": "song:e0f3c77fa564632f924f77fc5943ba7e"
},
"player": {
"parse": 0,
"url": "https://s.5bb3.com/m4a/3374e5b4a4d9d8e8f967976747b5c2ca.m4a",
"valid": true,
"reachable": true,
"status_code": 200,
"final_url": "https://car-lv.kuwo.cn/3d706b8d4cef413ba68de7d10da44800/6a18e5aa/resource/1307392909/trackmedia/C200000W91kQ0efKLA.m4a?from=vip",
"reason": null
}
},
{
"spider": "PPnix",
"file": "PPnix.txt",
"success": true,
"failed_stage": null,
"error": null,
"traceback": null,
"timings_ms": {
"module_load": 253.063,
"init": 0.001,
"home": 0.001,
"category": 7434.915,
"detail": 530.47,
"player": 0.012,
"url_check": 198.484,
"total": 8417.534
},
"counts": {
"classes": 2,
"category_videos": 24,
"detail_videos": 1,
"episodes": 1
},
"samples": {
"tid": "1",
"vod_id": "movie/8201.html",
"flag": "PPnix",
"play_id": "8201|1080P"
},
"player": {
"parse": 0,
"url": "https://www.ppnix.com/info/m3u8/8201/1080P.m3u8",
"valid": true,
"reachable": true,
"status_code": 200,
"final_url": "https://www.ppnix.com/info/m3u8/8201/1080P.m3u8",
"reason": null
}
},
{
"spider": "QQ音乐",
"file": "QQ音乐.txt",
"success": true,
"failed_stage": null,
"error": null,
"traceback": null,
"timings_ms": {
"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,
"category_videos": 30,
"detail_videos": 1,
"episodes": 1
},
"samples": {
"tid": "playlist",
"vod_id": "playlist:8864481091",
"flag": "QQ音乐",
"play_id": "qqmusic:000vFwcA30PDQL:404200507|我爱的这个世界 - 刘宇宁"
},
"player": {
"parse": 0,
"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=91873c6742541c73bad07d589aa980d7&vkey=6E0FD6591C4370BD3A55EE1039983A2D35C1B0F61E487816DA5A7331166B977078D6ED672461E0E3DB7FC42423CFFE491C774B185BE8B62E__v2b9abeb9&uin=1152921504846230218&fromtag=119114&redirect=1",
"reason": null
}
},
{
"spider": "YouTube",
"file": "YouTube.txt",
"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": 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": 0,
"episodes": 0
},
"samples": {
"tid": "cat_recommend",
"vod_id": "yt:video:E3jcQgR3TNE",
"flag": null,
"play_id": null
},
"player": {
"parse": null,
"url": "",
"valid": false,
"reachable": null,
"status_code": null,
"final_url": "",
"reason": null
}
},
{
"spider": "libvio",
"file": "libvio.txt",
"success": true,
"failed_stage": null,
"error": null,
"traceback": null,
"timings_ms": {
"module_load": 192.587,
"init": 0.001,
"home": 0.001,
"category": 7723.289,
"detail": 200.298,
"player": 0.007,
"url_check": 145.006,
"total": 8266.896
},
"counts": {
"classes": 6,
"category_videos": 48,
"detail_videos": 1,
"episodes": 2
},
"samples": {
"tid": "index",
"vod_id": "714893476",
"flag": "夸克",
"play_id": "https://pan.quark.cn/s/1443eb7917c1"
},
"player": {
"parse": 0,
"url": "https://pan.quark.cn/s/1443eb7917c1",
"valid": true,
"reachable": true,
"status_code": 200,
"final_url": "https://pan.quark.cn/s/1443eb7917c1",
"reason": null
}
},
{
"spider": "youknow",
"file": "youknow.txt",
"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": 195.061,
"init": 0.001,
"home": 0.001,
"category": 10461.589,
"detail": 1008.42,
"player": 8533.808,
"url_check": 5245.053,
"total": 36377.066
},
"counts": {
"classes": 7,
"category_videos": 72,
"detail_videos": 0,
"episodes": 0
},
"samples": {
"tid": "drama",
"vod_id": "204169",
"flag": null,
"play_id": null
},
"player": {
"parse": null,
"url": "",
"valid": false,
"reachable": null,
"status_code": null,
"final_url": "",
"reason": null
}
},
{
"spider": "七味",
"file": "七味.txt",
"success": true,
"failed_stage": null,
"error": null,
"traceback": null,
"timings_ms": {
"module_load": 180.244,
"init": 0.004,
"home": 0.001,
"category": 8059.652,
"detail": 729.621,
"player": 0.004,
"url_check": 0.061,
"total": 8971.552
},
"counts": {
"classes": 5,
"category_videos": 42,
"detail_videos": 1,
"episodes": 2
},
"samples": {
"tid": "1",
"vod_id": "497727",
"flag": "磁力1",
"play_id": "magnet:?xt=urn:btih:b93bf20164ebaf4e8a5b7421af1f4b31a3c87b89&dn=La Prima Notte Di Quiete (1972) [720p] [BluRay] [YTS.BZ]"
},
"player": {
"parse": 0,
"url": "magnet:?xt=urn:btih:b93bf20164ebaf4e8a5b7421af1f4b31a3c87b89&dn=La Prima Notte Di Quiete (1972) [720p] [BluRay] [YTS.BZ]",
"valid": true,
"reachable": null,
"status_code": null,
"final_url": "magnet:?xt=urn:btih:b93bf20164ebaf4e8a5b7421af1f4b31a3c87b89&dn=La Prima Notte Di Quiete (1972) [720p] [BluRay] [YTS.BZ]",
"reason": "非 HTTP 地址,按协议格式通过"
}
},
{
"spider": "不太灵",
"file": "不太灵.txt",
"success": true,
"failed_stage": null,
"error": null,
"traceback": null,
"timings_ms": {
"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,
"category_videos": 25,
"detail_videos": 1,
"episodes": 2
},
"samples": {
"tid": "1",
"vod_id": "38489690",
"flag": "夸克",
"play_id": "https://pan.quark.cn/s/b8a015968cb9"
},
"player": {
"parse": 0,
"url": "https://pan.quark.cn/s/b8a015968cb9",
"valid": true,
"reachable": true,
"status_code": 200,
"final_url": "https://pan.quark.cn/s/b8a015968cb9",
"reason": null
}
},
{
"spider": "世纪音乐",
"file": "世纪音乐.txt",
"success": false,
"failed_stage": "detail",
"error": "详情缺少播放源或播放列表",
"traceback": null,
"timings_ms": {
"module_load": 115.515,
"init": 0.001,
"home": 427.237,
"category": 0.005,
"detail": 101.781,
"player": 0.0,
"url_check": 0.0,
"total": 747.077
},
"counts": {
"classes": 5,
"category_videos": 3,
"detail_videos": 1,
"episodes": 0
},
"samples": {
"tid": "rank_list",
"vod_id": "rank:rise",
"flag": null,
"play_id": null
},
"player": {
"parse": null,
"url": "",
"valid": false,
"reachable": null,
"status_code": null,
"final_url": "",
"reason": null
}
},
{
"spider": "两个BT",
"file": "两个BT.txt",
"success": true,
"failed_stage": null,
"error": null,
"traceback": null,
"timings_ms": {
"module_load": 214.159,
"init": 0.001,
"home": 0.001,
"category": 361.248,
"detail": 8853.247,
"player": 14953.589,
"url_check": 1603.389,
"total": 46095.287
},
"counts": {
"classes": 14,
"category_videos": 24,
"detail_videos": 1,
"episodes": 1
},
"samples": {
"tid": "meiju",
"vod_id": "ch46tn28s",
"flag": "两个BT",
"play_id": "eyJwaWQiOiIvcGxheS9jaDQ2dG4yOHMiLCJzaWQiOiJjaDQ2dG4yOHMiLCJuYW1lIjoiMSJ9"
},
"player": {
"parse": 0,
"url": "https://zijieapi.douyinbyte.com/m3u8/2b085f2e90e2499c6dd0919420b47958.m3u8",
"valid": true,
"reachable": true,
"status_code": 200,
"final_url": "https://zijieapi.douyinbyte.com/m3u8/2b085f2e90e2499c6dd0919420b47958.m3u8",
"reason": null
}
},
{
"spider": "乌云影视",
"file": "乌云影视.txt",
"success": true,
"failed_stage": null,
"error": null,
"traceback": null,
"timings_ms": {
"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,
"category_videos": 24,
"detail_videos": 1,
"episodes": 1
},
"samples": {
"tid": "movie",
"vod_id": "483203",
"flag": "乌云影视",
"play_id": "eyJtZWRpYUlkIjogIjQ4MzIwMyIsICJzZWFzb25ObyI6IDEsICJlcE5vIjogMSwgInZpZGVvSWQiOiAxNTc2MjgzMiwgInBsYXlVcmwiOiAiaHR0cHM6Ly9kMWpkbm1rYzFuNWNuNC5jbG91ZGZyb250Lm5ldC9nZW5fb3ZlcnNlYXMvaHR0cHM6Ly9zMi5iZmxsdmlwLmNvbS92aWRlby95YW54aWF4aW5nL2E2ZWY4NTRjMGMxZi9pbmRleC5tM3U4IiwgIm5hbWUiOiAi56ysMembhiDpq5jmuIUifQ"
},
"player": {
"parse": 0,
"url": "https://d1jdnmkc1n5cn4.cloudfront.net/gen_overseas/https://s2.bfllvip.com/video/yanxiaxing/a6ef854c0c1f/index.m3u8",
"valid": true,
"reachable": true,
"status_code": 200,
"final_url": "https://d1jdnmkc1n5cn4.cloudfront.net/hls_overseas/b1e00dceb8697b100c7cc2bd549c95e9a6bdbe3b.m3u8",
"reason": null
}
},
{
"spider": "乐兔",
"file": "乐兔.txt",
"success": false,
"failed_stage": "category",
"error": "分类视频列表为空",
"traceback": null,
"timings_ms": {
"module_load": 204.399,
"init": 0.001,
"home": 0.0,
"category": 367.343,
"detail": 0.0,
"player": 0.0,
"url_check": 0.0,
"total": 1481.952
},
"counts": {
"classes": 5,
"category_videos": 0,
"detail_videos": 0,
"episodes": 0
},
"samples": {
"tid": "2",
"vod_id": null,
"flag": null,
"play_id": null
},
"player": {
"parse": null,
"url": "",
"valid": false,
"reachable": null,
"status_code": null,
"final_url": "",
"reason": null
}
},
{
"spider": "二小",
"file": "二小.txt",
"success": true,
"failed_stage": null,
"error": null,
"traceback": null,
"timings_ms": {
"module_load": 156.412,
"init": 0.001,
"home": 0.001,
"category": 822.191,
"detail": 362.071,
"player": 0.003,
"url_check": 1051.979,
"total": 2394.221
},
"counts": {
"classes": 4,
"category_videos": 72,
"detail_videos": 1,
"episodes": 2
},
"samples": {
"tid": "1",
"vod_id": "12448",
"flag": "百度#二小",
"play_id": "https://pan.baidu.com/s/1NapvmjEzldshuisESRLswg?pwd=8jzw"
},
"player": {
"parse": 0,
"url": "https://pan.baidu.com/s/1NapvmjEzldshuisESRLswg?pwd=8jzw",
"valid": true,
"reachable": true,
"status_code": 200,
"final_url": "https://pan.baidu.com/share/init?surl=NapvmjEzldshuisESRLswg&pwd=8jzw",
"reason": null
}
},
{
"spider": "人人电影",
"file": "人人电影.txt",
"success": true,
"failed_stage": null,
"error": null,
"traceback": null,
"timings_ms": {
"module_load": 3.674,
"init": 0.001,
"home": 0.0,
"category": 549.233,
"detail": 428.151,
"player": 0.016,
"url_check": 1108.868,
"total": 2090.455
},
"counts": {
"classes": 4,
"category_videos": 10,
"detail_videos": 1,
"episodes": 2
},
"samples": {
"tid": "movie/list_2",
"vod_id": "/movie/2020/0125/7883.html",
"flag": "baidu",
"play_id": "https://pan.baidu.com/s/1suZeb5GhI28-fn4NvKt2iQ?pwd=qbhx"
},
"player": {
"parse": 0,
"url": "https://pan.baidu.com/s/1suZeb5GhI28-fn4NvKt2iQ?pwd=qbhx",
"valid": true,
"reachable": true,
"status_code": 200,
"final_url": "https://pan.baidu.com/share/init?surl=suZeb5GhI28-fn4NvKt2iQ&pwd=qbhx",
"reason": null
}
},
{
"spider": "人人视频",
"file": "人人视频.txt",
"success": true,
"failed_stage": null,
"error": null,
"traceback": null,
"timings_ms": {
"module_load": 4.615,
"init": 0.001,
"home": 337.934,
"category": 235.942,
"detail": 215.98,
"player": 629.852,
"url_check": 152.516,
"total": 1577.721
},
"counts": {
"classes": 4,
"category_videos": 30,
"detail_videos": 1,
"episodes": 1
},
"samples": {
"tid": "TV",
"vod_id": "57302",
"flag": "人人专线",
"play_id": "57302@384481"
},
"player": {
"parse": 0,
"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
}
},
{
"spider": "优酷",
"file": "优酷.txt",
"success": true,
"failed_stage": null,
"error": null,
"traceback": null,
"timings_ms": {
"module_load": 9.083,
"init": 0.001,
"home": 0.001,
"category": 292.466,
"detail": 520.248,
"player": 0.003,
"url_check": 242.366,
"total": 1065.023
},
"counts": {
"classes": 6,
"category_videos": 23,
"detail_videos": 1,
"episodes": 1
},
"samples": {
"tid": "电视剧",
"vod_id": "show:bbaf2557249a4f2a9447",
"flag": "优酷",
"play_id": "https://v.youku.com/v_show/id_XNjUyMTM3MTY0OA==.html"
},
"player": {
"parse": 1,
"url": "https://v.youku.com/v_show/id_XNjUyMTM3MTY0OA==.html",
"valid": true,
"reachable": true,
"status_code": 200,
"final_url": "https://v.youku.com/v_show/id_XNjUyMTM3MTY0OA==.html",
"reason": null
}
},
{
"spider": "低端影视",
"file": "低端影视.txt",
"success": true,
"failed_stage": null,
"error": null,
"traceback": null,
"timings_ms": {
"module_load": 6.721,
"init": 0.001,
"home": 0.001,
"category": 6707.223,
"detail": 10084.897,
"player": 0.01,
"url_check": 415.087,
"total": 23957.566
},
"counts": {
"classes": 4,
"category_videos": 24,
"detail_videos": 1,
"episodes": 2
},
"samples": {
"tid": "series",
"vod_id": "movie/the-four-seasons-season-2",
"flag": "播放源 2 (1080P)",
"play_id": "https://hn.bfvvs.com/play/b823qYje/index.m3u8"
},
"player": {
"parse": 0,
"url": "https://hn.bfvvs.com/play/b823qYje/index.m3u8",
"valid": true,
"reachable": true,
"status_code": 200,
"final_url": "https://hn.bfvvs.com/play/b823qYje/index.m3u8",
"reason": null
}
},
{
"spider": "修罗",
"file": "修罗.txt",
"success": true,
"failed_stage": null,
"error": null,
"traceback": null,
"timings_ms": {
"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,
"category_videos": 24,
"detail_videos": 1,
"episodes": 2
},
"samples": {
"tid": "movie",
"vod_id": "kongbu/26940",
"flag": "磁力合集",
"play_id": "magnet:?xt=urn:btih:867fd8d84c83817625391aa5dfba8ad4005b90c9"
},
"player": {
"parse": 0,
"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://www.nmdvd.top/jx/player.php?vid=n2J/BuPNOJ%2BVeZWQBtXCe3YzNVc1U0NHTCs4WGc2amV2WjFzWGMrSXRNeTYvWmRFMEtLUC9jR1dUamlyWDJFRlA5dklDRkVmeVBZYXZVeVJXVkVOcXk0QUdzYzNVVVJncEx0NkZ3dzhiWHI0WU9rREZjeG1MTnExNWZTaERyWURKcysxSFhNZmI1UjU3NS9TTnkwV3hMUkdDT0VVVmd1Rll4Rm9OYm1XNGk0d2NlMTB4R1NFTEQ5QXE2VENJMFdGSk9JVGJXaHUwVkc0R3FkMg%3D%3D",
"reason": null
}
},
{
"spider": "凡客TV",
"file": "凡客TV.txt",
"success": true,
"failed_stage": null,
"error": null,
"traceback": null,
"timings_ms": {
"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,
"category_videos": 32,
"detail_videos": 1,
"episodes": 2
},
"samples": {
"tid": "2",
"vod_id": "611fc51c5af8b87c",
"flag": "高速线路",
"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/9c129389274e07aaa138d12d1533cc4f.m3u8",
"valid": true,
"reachable": true,
"status_code": 200,
"final_url": "https://fktv.me/ysapi/m3u8/p/9c129389274e07aaa138d12d1533cc4f.m3u8",
"reason": null
}
},
{
"spider": "剧圈圈",
"file": "剧圈圈.txt",
"success": false,
"failed_stage": "unexpected",
"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": 6.876,
"init": 0.0,
"home": 0.001,
"category": 10016.492,
"detail": 0.0,
"player": 0.0,
"url_check": 0.0,
"total": 10027.039
},
"counts": {
"classes": 5,
"category_videos": 0,
"detail_videos": 0,
"episodes": 0
},
"samples": {
"tid": "dianying",
"vod_id": null,
"flag": null,
"play_id": null
},
"player": {
"parse": null,
"url": "",
"valid": false,
"reachable": null,
"status_code": null,
"final_url": "",
"reason": null
}
},
{
"spider": "剧迷",
"file": "剧迷.txt",
"success": true,
"failed_stage": null,
"error": null,
"traceback": null,
"timings_ms": {
"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,
"category_videos": 149,
"detail_videos": 1,
"episodes": 2
},
"samples": {
"tid": "1",
"vod_id": "444469",
"flag": "高清线路 ᴴᴰ",
"play_id": "444469-5-1"
},
"player": {
"parse": 0,
"url": "https://vip.dytt-see.com/20260522/38907_e9814d39/index.m3u8",
"valid": true,
"reachable": true,
"status_code": 200,
"final_url": "https://vip.dytt-see.com/20260522/38907_e9814d39/index.m3u8",
"reason": null
}
},
{
"spider": "博看听书",
"file": "博看听书.txt",
"success": true,
"failed_stage": null,
"error": null,
"traceback": null,
"timings_ms": {
"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,
"category_videos": 24,
"detail_videos": 1,
"episodes": 1
},
"samples": {
"tid": "1319",
"vod_id": "902849",
"flag": "博看听书",
"play_id": "http://audio.bookan.com.cn/video1/audio/20200706001/aache64_133068a2.m4a"
},
"player": {
"parse": 0,
"url": "http://audio.bookan.com.cn/video1/audio/20200706001/aache64_133068a2.m4a",
"valid": true,
"reachable": true,
"status_code": 200,
"final_url": "http://audio.bookan.com.cn/video1/audio/20200706001/aache64_133068a2.m4a",
"reason": null
}
},
{
"spider": "双星",
"file": "双星.txt",
"success": true,
"failed_stage": null,
"error": null,
"traceback": null,
"timings_ms": {
"module_load": 5.064,
"init": 576.131,
"home": 0.005,
"category": 155.131,
"detail": 163.908,
"player": 0.002,
"url_check": 151.232,
"total": 1052.797
},
"counts": {
"classes": 7,
"category_videos": 15,
"detail_videos": 1,
"episodes": 2
},
"samples": {
"tid": "ju",
"vod_id": "/ju/10652.html",
"flag": "夸克",
"play_id": "https://pan.quark.cn/s/2e1f59625078"
},
"player": {
"parse": 0,
"url": "https://pan.quark.cn/s/2e1f59625078",
"valid": true,
"reachable": true,
"status_code": 200,
"final_url": "https://pan.quark.cn/s/2e1f59625078",
"reason": null
}
},
{
"spider": "听书",
"file": "听书.txt",
"success": true,
"failed_stage": null,
"error": null,
"traceback": null,
"timings_ms": {
"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,
"category_videos": 10,
"detail_videos": 1,
"episodes": 1
},
"samples": {
"tid": "6",
"vod_id": "63",
"flag": "直链",
"play_id": "2926931|||63"
},
"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=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=8736b1c008013c99b7b295012616baf8&buy_key=FM&token=2453&timestamp=1780016543&duration=453",
"reason": null
}
},
{
"spider": "听友FM",
"file": "听友FM.txt",
"success": true,
"failed_stage": null,
"error": null,
"traceback": null,
"timings_ms": {
"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,
"category_videos": 20,
"detail_videos": 1,
"episodes": 1
},
"samples": {
"tid": "46",
"vod_id": "9783312385",
"flag": "听友FM",
"play_id": "9783312385|1"
},
"player": {
"parse": 0,
"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=1780016560&sign=884cead7eab3edb3aaa0580a766779a5",
"reason": null
}
},
{
"spider": "咕咕动漫",
"file": "咕咕动漫.txt",
"success": true,
"failed_stage": null,
"error": null,
"traceback": null,
"timings_ms": {
"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,
"category_videos": 30,
"detail_videos": 1,
"episodes": 1
},
"samples": {
"tid": "6",
"vod_id": "5006",
"flag": "咕咕新线(国内高速)",
"play_id": "parse_api=a2796a09189261bcaf3cc4542d7c5ac2&url=3LubxqZsk6qbM3DCPWWx/cOuPcSr2xK2yOFGYC7FReM/Pgh9Xb/qg0/YIVmGivgx&token=|左撇子艾伦|1"
},
"player": {
"parse": 0,
"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=1811120558&x-signature=rRuxQigl7oP4fRs%2BGdka0UD3LoI%3D",
"reason": null
}
},
{
"spider": "四万影视",
"file": "四万影视.txt",
"success": false,
"failed_stage": "unexpected",
"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": 12.873,
"init": 0.003,
"home": 0.001,
"category": 10022.245,
"detail": 0.0,
"player": 0.0,
"url_check": 0.0,
"total": 10039.174
},
"counts": {
"classes": 5,
"category_videos": 0,
"detail_videos": 0,
"episodes": 0
},
"samples": {
"tid": "20",
"vod_id": null,
"flag": null,
"play_id": null
},
"player": {
"parse": null,
"url": "",
"valid": false,
"reachable": null,
"status_code": null,
"final_url": "",
"reason": null
}
},
{
"spider": "在线之家",
"file": "在线之家.txt",
"success": false,
"failed_stage": "category",
"error": "分类视频列表为空",
"traceback": null,
"timings_ms": {
"module_load": 12.947,
"init": 0.001,
"home": 0.001,
"category": 9513.486,
"detail": 0.0,
"player": 0.0,
"url_check": 0.0,
"total": 15788.054
},
"counts": {
"classes": 6,
"category_videos": 0,
"detail_videos": 0,
"episodes": 0
},
"samples": {
"tid": "2",
"vod_id": null,
"flag": null,
"play_id": null
},
"player": {
"parse": null,
"url": "",
"valid": false,
"reachable": null,
"status_code": null,
"final_url": "",
"reason": null
}
},
{
"spider": "多多",
"file": "多多.txt",
"success": true,
"failed_stage": null,
"error": null,
"traceback": null,
"timings_ms": {
"module_load": 12.383,
"init": 0.001,
"home": 0.001,
"category": 8905.127,
"detail": 360.288,
"player": 0.006,
"url_check": 1124.95,
"total": 10403.322
},
"counts": {
"classes": 6,
"category_videos": 72,
"detail_videos": 1,
"episodes": 2
},
"samples": {
"tid": "1",
"vod_id": "9495",
"flag": "百度#多多",
"play_id": "https://pan.baidu.com/s/1i2ttj0-hyFITBvybf3A1xg?pwd=yyds"
},
"player": {
"parse": 0,
"url": "https://pan.baidu.com/s/1i2ttj0-hyFITBvybf3A1xg?pwd=yyds",
"valid": true,
"reachable": true,
"status_code": 200,
"final_url": "https://pan.baidu.com/share/init?surl=i2ttj0-hyFITBvybf3A1xg&pwd=yyds",
"reason": null
}
},
{
"spider": "如意资源",
"file": "如意资源.txt",
"success": true,
"failed_stage": null,
"error": null,
"traceback": null,
"timings_ms": {
"module_load": 8.377,
"init": 0.001,
"home": 0.011,
"category": 9772.633,
"detail": 7144.381,
"player": 0.007,
"url_check": 1824.416,
"total": 23764.458
},
"counts": {
"classes": 6,
"category_videos": 20,
"detail_videos": 1,
"episodes": 2
},
"samples": {
"tid": "1",
"vod_id": "78244",
"flag": "ruyi",
"play_id": "https://svip.ryiplay18.com/share/38faae069a1371784081ea9ad9b279d0"
},
"player": {
"parse": 1,
"url": "https://svip.ryiplay18.com/share/38faae069a1371784081ea9ad9b279d0",
"valid": true,
"reachable": true,
"status_code": 200,
"final_url": "https://svip.ryiplay18.com/share/38faae069a1371784081ea9ad9b279d0",
"reason": null
}
},
{
"spider": "寻川4K",
"file": "寻川4K.txt",
"success": true,
"failed_stage": null,
"error": null,
"traceback": null,
"timings_ms": {
"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,
"category_videos": 20,
"detail_videos": 1,
"episodes": 1
},
"samples": {
"tid": "1",
"vod_id": "594092",
"flag": "BFm(请勿相信任何广告)-高峰卡",
"play_id": "https://v10.baofeng10.com/video/qunti/cf33e2162cab/index.m3u8@@@bfzym3u8"
},
"player": {
"parse": 0,
"url": "http://122.51.23.16:7788/qgg/Cache/BF/6ab5e4130dcb22f0d295d1cd1c546f48.m3u8",
"valid": true,
"reachable": true,
"status_code": 200,
"final_url": "http://122.51.23.16:7788/qgg/Cache/BF/6ab5e4130dcb22f0d295d1cd1c546f48.m3u8",
"reason": null
}
},
{
"spider": "布布影视",
"file": "布布影视.txt",
"success": true,
"failed_stage": null,
"error": null,
"traceback": null,
"timings_ms": {
"module_load": 6.984,
"init": 0.001,
"home": 0.001,
"category": 729.55,
"detail": 717.594,
"player": 12968.593,
"url_check": 545.937,
"total": 14969.399
},
"counts": {
"classes": 4,
"category_videos": 24,
"detail_videos": 1,
"episodes": 2
},
"samples": {
"tid": "1",
"vod_id": "86421",
"flag": "JD蓝光(1)",
"play_id": "JD4K@1@JD-3823d951135350f7454bb0f521eaa5a70"
},
"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=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=X2kxOUNj5DN/EDIknHK1wpW72Pc%3D&Expires=1780016867&x-amz-FSIZE=58373&x-amz-UFID=624471240788981016",
"reason": null
}
},
{
"spider": "微观短剧",
"file": "微观短剧.txt",
"success": true,
"failed_stage": null,
"error": null,
"traceback": null,
"timings_ms": {
"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,
"category_videos": 30,
"detail_videos": 1,
"episodes": 2
},
"samples": {
"tid": "都市",
"vod_id": "110000044555935694",
"flag": "1080P",
"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=1780016555&sign=2d3f96cfc27aa12d3379e4b996a1cea4",
"valid": true,
"reachable": true,
"status_code": 200,
"final_url": "https://tv-video.cdn.drama.9ddm.com/22/A0/22A0BFFF46651CC23355B115F6307653.mp4?timestamp=1780016555&sign=2d3f96cfc27aa12d3379e4b996a1cea4",
"reason": null
}
},
{
"spider": "新韩剧网",
"file": "新韩剧网.txt",
"success": true,
"failed_stage": null,
"error": null,
"traceback": null,
"timings_ms": {
"module_load": 4.242,
"init": 0.001,
"home": 0.0,
"category": 9012.087,
"detail": 360.391,
"player": 5767.927,
"url_check": 1992.893,
"total": 17138.116
},
"counts": {
"classes": 5,
"category_videos": 16,
"detail_videos": 1,
"episodes": 1
},
"samples": {
"tid": "1",
"vod_id": "3613",
"flag": "在线云播",
"play_id": "3613_1_1"
},
"player": {
"parse": 0,
"url": "https://player.yzzyvip-35.com/20260331/3348_333cb763/index.m3u8",
"valid": true,
"reachable": true,
"status_code": 200,
"final_url": "https://player.yzzyvip-35.com/20260331/3348_333cb763/index.m3u8",
"reason": null
}
},
{
"spider": "星星短剧",
"file": "星星短剧.txt",
"success": true,
"failed_stage": null,
"error": null,
"traceback": null,
"timings_ms": {
"module_load": 5.848,
"init": 0.0,
"home": 0.001,
"category": 429.805,
"detail": 887.827,
"player": 0.002,
"url_check": 404.951,
"total": 1728.925
},
"counts": {
"classes": 5,
"category_videos": 10,
"detail_videos": 1,
"episodes": 1
},
"samples": {
"tid": "1287",
"vod_id": "422599939194881@@穿越诡计爱上你@@苏清韵为了给妹妹治病,卖身富豪被卓熙辰所救,答应卓熙辰的契约婚姻。苏清韵受到了爱慕卓熙辰的上官溪玲的疯狂攻击与算计,导致妹妹离世。苏清韵误会记恨卓熙辰因此拿刀伤了他,自己也被判入狱五年。",
"flag": "星星短剧",
"play_id": "https://img.novel.wsljf.xyz/shortPlay-mp4/420424102051841/EvnIm1746774634078/abc6208e-390b-4533-a1a4-b9e5741cc384/540x960/output.m3u8"
},
"player": {
"parse": 0,
"url": "https://img.novel.wsljf.xyz/shortPlay-mp4/420424102051841/EvnIm1746774634078/abc6208e-390b-4533-a1a4-b9e5741cc384/540x960/output.m3u8",
"valid": true,
"reachable": true,
"status_code": 200,
"final_url": "https://img.novel.wsljf.xyz/shortPlay-mp4/420424102051841/EvnIm1746774634078/abc6208e-390b-4533-a1a4-b9e5741cc384/540x960/output.m3u8",
"reason": null
}
},
{
"spider": "木偶",
"file": "木偶.txt",
"success": true,
"failed_stage": null,
"error": null,
"traceback": null,
"timings_ms": {
"module_load": 7.595,
"init": 0.001,
"home": 0.001,
"category": 489.928,
"detail": 206.616,
"player": 0.007,
"url_check": 272.79,
"total": 977.533
},
"counts": {
"classes": 7,
"category_videos": 72,
"detail_videos": 1,
"episodes": 1
},
"samples": {
"tid": "25",
"vod_id": "8010",
"flag": "115#木偶",
"play_id": "https://115cdn.com/s/sws3tre36dh?password=n600"
},
"player": {
"parse": 0,
"url": "https://115cdn.com/s/sws3tre36dh?password=n600",
"valid": true,
"reachable": true,
"status_code": 200,
"final_url": "https://115cdn.com/s/sws3tre36dh?password=n600",
"reason": null
}
},
{
"spider": "樱花动漫",
"file": "樱花动漫.txt",
"success": true,
"failed_stage": null,
"error": null,
"traceback": null,
"timings_ms": {
"module_load": 6.105,
"init": 0.001,
"home": 0.001,
"category": 10535.888,
"detail": 1473.111,
"player": 1469.366,
"url_check": 1896.242,
"total": 15381.225
},
"counts": {
"classes": 4,
"category_videos": 36,
"detail_videos": 1,
"episodes": 2
},
"samples": {
"tid": "guoman",
"vod_id": "12",
"flag": "高清",
"play_id": "/play/12-1-1/"
},
"player": {
"parse": 0,
"url": "https://yzzy.play-cdn2.com/20220408/8953_8c6f0de5/index.m3u8",
"valid": true,
"reachable": true,
"status_code": 200,
"final_url": "https://yzzy.play-cdn2.com/20220408/8953_8c6f0de5/index.m3u8",
"reason": null
}
},
{
"spider": "橘子TV",
"file": "橘子TV.txt",
"success": true,
"failed_stage": null,
"error": null,
"traceback": null,
"timings_ms": {
"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,
"category_videos": 18,
"detail_videos": 1,
"episodes": 1
},
"samples": {
"tid": "50",
"vod_id": "402509",
"flag": "一起看APP",
"play_id": "25556249"
},
"player": {
"parse": 0,
"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.xbavporn.com/m3u87/share/7518179/7713675/20260522/132143/720/index.m3u8?sign=5653c5342de3d26326c327888111d784&t=1780016590",
"reason": null
}
},
{
"spider": "欧歌",
"file": "欧歌.txt",
"success": true,
"failed_stage": null,
"error": null,
"traceback": null,
"timings_ms": {
"module_load": 9.627,
"init": 0.001,
"home": 0.001,
"category": 5949.063,
"detail": 359.514,
"player": 0.007,
"url_check": 1149.35,
"total": 7468.048
},
"counts": {
"classes": 6,
"category_videos": 72,
"detail_videos": 1,
"episodes": 2
},
"samples": {
"tid": "1",
"vod_id": "30245",
"flag": "百度",
"play_id": "https://pan.baidu.com/s/1ocYGtyaOZbl0admuOWZ_AA?pwd=8888"
},
"player": {
"parse": 0,
"url": "https://pan.baidu.com/s/1ocYGtyaOZbl0admuOWZ_AA?pwd=8888",
"valid": true,
"reachable": true,
"status_code": 200,
"final_url": "https://pan.baidu.com/share/init?surl=ocYGtyaOZbl0admuOWZ_AA&pwd=8888",
"reason": null
}
},
{
"spider": "沐辞4K",
"file": "沐辞4K.txt",
"success": true,
"failed_stage": null,
"error": null,
"traceback": null,
"timings_ms": {
"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,
"category_videos": 20,
"detail_videos": 1,
"episodes": 2
},
"samples": {
"tid": "1",
"vod_id": "413638",
"flag": "🔥蓝光4K--②号🔥",
"play_id": "xfy-h9ZFVRM+eowUsJdVTXqIM33qZd7QMy0ckmrZHgoKjDIxW6bJxADCOl5gHriPq9VfmUyAjC3Yv1vXWry1kRhiXaRPcwbDvPmvSTEn90ggCRVv9X+LdByMnn62KO7Yj6o8@@@xfyun"
},
"player": {
"parse": 0,
"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://xfyvideochandi.online/m.php?data=9JNpgjlvwTy_6Y8t7EDm8yT3ktOt-iaPnzx0_R8cr24bpZIFu9uBw4_yXCBY3RGfEzz51EqRZqCkGzzMVCuJTOMyR5DMY2mun_-EsEc6hz8AqkIOUN-DXkHw0zoV9_eu8aZSgX6Pu4IcRuCcFMssaCY8eJYLq3HFjzikmlwWQ51m3205p27_rURwiPiHj_ocdJG4NDIwnzOBjg25Cf5BuFywSWg6f_MkA5kLy0UB_Jg&xfy.m3u8",
"reason": null
}
},
{
"spider": "河马短剧",
"file": "河马短剧.txt",
"success": true,
"failed_stage": null,
"error": null,
"traceback": null,
"timings_ms": {
"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,
"category_videos": 10,
"detail_videos": 1,
"episodes": 1
},
"samples": {
"tid": "462",
"vod_id": "41000204563",
"flag": "河马剧场",
"play_id": "https://dzzt-video.cbread.cn/3c5a0296c6b116a43d064ecda9e6cc5f/6a1a1a70/79/3x6/36x5/365x4/36540200014/613135697_1/613135697.720p.narrowv3.mp4"
},
"player": {
"parse": 0,
"url": "https://dzzt-video.cbread.cn/3c5a0296c6b116a43d064ecda9e6cc5f/6a1a1a70/79/3x6/36x5/365x4/36540200014/613135697_1/613135697.720p.narrowv3.mp4",
"valid": true,
"reachable": true,
"status_code": 200,
"final_url": "https://dzzt-video.cbread.cn/3c5a0296c6b116a43d064ecda9e6cc5f/6a1a1a70/79/3x6/36x5/365x4/36540200014/613135697_1/613135697.720p.narrowv3.mp4",
"reason": null
}
},
{
"spider": "清沅4K",
"file": "清沅4K.txt",
"success": true,
"failed_stage": null,
"error": null,
"traceback": null,
"timings_ms": {
"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,
"category_videos": 20,
"detail_videos": 1,
"episodes": 2
},
"samples": {
"tid": "1",
"vod_id": "40233",
"flag": "blbl",
"play_id": "https://www.bilibili.com/bangumi/play/ep3482154?theme=movie@@@bilibili"
},
"player": {
"parse": 0,
"url": "https://png.ruyijx.com/m3u8/Qq5QavqM1KcyB5.m3u8?6a7Ko6nFnnb7QQP6EQ",
"valid": true,
"reachable": true,
"status_code": 200,
"final_url": "https://png.ruyijx.com/m3u8/Qq5QavqM1KcyB5.m3u8?6a7Ko6nFnnb7QQP6EQ",
"reason": null
}
},
{
"spider": "滴答影视",
"file": "滴答影视.txt",
"success": true,
"failed_stage": null,
"error": null,
"traceback": null,
"timings_ms": {
"module_load": 5.043,
"init": 0.001,
"home": 0.001,
"category": 212.764,
"detail": 189.565,
"player": 0.004,
"url_check": 1091.915,
"total": 1499.88
},
"counts": {
"classes": 5,
"category_videos": 48,
"detail_videos": 1,
"episodes": 2
},
"samples": {
"tid": "1",
"vod_id": "3059",
"flag": "百度",
"play_id": "https://pan.baidu.com/s/1R8i99f7bE7BwItLZRjJreA?pwd=rydw"
},
"player": {
"parse": 0,
"url": "https://pan.baidu.com/s/1R8i99f7bE7BwItLZRjJreA?pwd=rydw",
"valid": true,
"reachable": true,
"status_code": 200,
"final_url": "https://pan.baidu.com/share/init?surl=R8i99f7bE7BwItLZRjJreA&pwd=rydw",
"reason": null
}
},
{
"spider": "潮流APP",
"file": "潮流APP.txt",
"success": true,
"failed_stage": null,
"error": null,
"traceback": null,
"timings_ms": {
"module_load": 11.431,
"init": 0.003,
"home": 360.276,
"category": 334.746,
"detail": 351.6,
"player": 315.381,
"url_check": 83.158,
"total": 1457.423
},
"counts": {
"classes": 10,
"category_videos": 12,
"detail_videos": 1,
"episodes": 2
},
"samples": {
"tid": "10",
"vod_id": "75722",
"flag": "线路二 (点击换线)",
"play_id": "75722@@0@@0"
},
"player": {
"parse": 0,
"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://210.16.164.53:9090/nby/m3u8/getM3u8?name=jx.91by.top&time=1780016563901&url=NBY-e84585334a25c5b49078dfac81549a0b.m3u8",
"reason": null
}
},
{
"spider": "爱奇艺",
"file": "爱奇艺.txt",
"success": true,
"failed_stage": null,
"error": null,
"traceback": null,
"timings_ms": {
"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": 48,
"detail_videos": 1,
"episodes": 1
},
"samples": {
"tid": "pcw:1",
"vod_id": "pcw:1$8749724257339400",
"flag": "爱奇艺",
"play_id": "http://www.iqiyi.com/v_2eyobhckg9w.html"
},
"player": {
"parse": 1,
"url": "http://www.iqiyi.com/v_2eyobhckg9w.html",
"valid": true,
"reachable": true,
"status_code": 200,
"final_url": "https://www.iqiyi.com/v_2eyobhckg9w.html",
"reason": null
}
},
{
"spider": "独播库",
"file": "独播库.txt",
"success": true,
"failed_stage": null,
"error": null,
"traceback": null,
"timings_ms": {
"module_load": 8.955,
"init": 0.001,
"home": 0.001,
"category": 5756.779,
"detail": 303.143,
"player": 360.68,
"url_check": 234.419,
"total": 6664.973
},
"counts": {
"classes": 6,
"category_videos": 48,
"detail_videos": 1,
"episodes": 1
},
"samples": {
"tid": "index",
"vod_id": "143579",
"flag": "独播库",
"play_id": "143579-1-1"
},
"player": {
"parse": 0,
"url": "https://vid.dbokutv.com/20260423/ppotb62-S71lT2yliZApDBSvkYzBsrmD3fpCJ4nBsHdTcyo5xOy6ejRNDXSIqmCIqmCJT5GJKvC3OkRN0q/chunklist.m3u8",
"valid": true,
"reachable": true,
"status_code": 200,
"final_url": "https://vid.dbokutv.com/20260423/ppotb62-S71lT2yliZApDBSvkYzBsrmD3fpCJ4nBsHdTcyo5xOy6ejRNDXSIqmCIqmCJT5GJKvC3OkRN0q/chunklist.m3u8",
"reason": null
}
},
{
"spider": "猫猫4K",
"file": "猫猫4K.txt",
"success": false,
"failed_stage": "player",
"error": "playerContent 未返回播放地址",
"traceback": null,
"timings_ms": {
"module_load": 7.787,
"init": 219.578,
"home": 215.165,
"category": 385.716,
"detail": 114.779,
"player": 316.898,
"url_check": 0.0,
"total": 14348.279
},
"counts": {
"classes": 5,
"category_videos": 20,
"detail_videos": 1,
"episodes": 2
},
"samples": {
"tid": "2",
"vod_id": "60244",
"flag": "火猫⚡蓝光",
"play_id": "NBY-XMYAES77e03f39d2956635c48df0a1e4b4c7dc38db80aeec1df3cbb9a9faff7e6ed30828f47b2efcabd76984954a7d2aa26c01|ed68be5df66bdc4022e7f18715e8a934@@@NBY"
},
"player": {
"parse": 0,
"url": "",
"valid": false,
"reachable": null,
"status_code": null,
"final_url": "",
"reason": null
}
},
{
"spider": "玩偶哥哥",
"file": "玩偶哥哥.txt",
"success": true,
"failed_stage": null,
"error": null,
"traceback": null,
"timings_ms": {
"module_load": 6.74,
"init": 0.001,
"home": 0.001,
"category": 682.276,
"detail": 662.236,
"player": 0.004,
"url_check": 952.429,
"total": 2304.249
},
"counts": {
"classes": 8,
"category_videos": 70,
"detail_videos": 1,
"episodes": 2
},
"samples": {
"tid": "1",
"vod_id": "125580",
"flag": "百度#玩偶哥哥",
"play_id": "https://pan.baidu.com/s/1MjxdQQe7RTpj-fVn10-DQA?pwd=wogg"
},
"player": {
"parse": 0,
"url": "https://pan.baidu.com/s/1MjxdQQe7RTpj-fVn10-DQA?pwd=wogg",
"valid": true,
"reachable": true,
"status_code": 200,
"final_url": "https://pan.baidu.com/share/init?surl=MjxdQQe7RTpj-fVn10-DQA&pwd=wogg",
"reason": null
}
},
{
"spider": "玩偶聚合",
"file": "玩偶聚合.txt",
"success": true,
"failed_stage": null,
"error": null,
"traceback": null,
"timings_ms": {
"module_load": 40.398,
"init": 0.001,
"home": 2.603,
"category": 676.182,
"detail": 736.376,
"player": 0.002,
"url_check": 1084.557,
"total": 2540.942
},
"counts": {
"classes": 10,
"category_videos": 70,
"detail_videos": 1,
"episodes": 2
},
"samples": {
"tid": "site_wanou",
"vod_id": "site:wanou:/voddetail/124546.html",
"flag": "百度#玩偶",
"play_id": "https://pan.baidu.com/s/1CvrInDz-4iEEcZzekTr_Ig?pwd=wogg"
},
"player": {
"parse": 0,
"url": "https://pan.baidu.com/s/1CvrInDz-4iEEcZzekTr_Ig?pwd=wogg",
"valid": true,
"reachable": true,
"status_code": 200,
"final_url": "https://pan.baidu.com/share/init?surl=CvrInDz-4iEEcZzekTr_Ig&pwd=wogg",
"reason": null
}
},
{
"spider": "瓜子",
"file": "瓜子.txt",
"success": true,
"failed_stage": null,
"error": null,
"traceback": null,
"timings_ms": {
"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,
"category_videos": 30,
"detail_videos": 1,
"episodes": 2
},
"samples": {
"tid": "1",
"vod_id": "128782",
"flag": "1080",
"play_id": "vod_d_id=128782&vurl_id=3323715&domain_type=8&resolution=1080&type=play"
},
"player": {
"parse": 0,
"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/b86f1a48afd6778085ecf14f8dcd9417/20260529090300/decry/vd/20260311/MjYwZjE1YTRkO/172631/1998_1080/aac/h264/hls/decrypt/index.m3u8",
"reason": null
}
},
{
"spider": "百度短剧",
"file": "百度短剧.txt",
"success": true,
"failed_stage": null,
"error": null,
"traceback": null,
"timings_ms": {
"module_load": 7.212,
"init": 0.001,
"home": 419.613,
"category": 262.939,
"detail": 565.157,
"player": 240.531,
"url_check": 34.262,
"total": 1530.423
},
"counts": {
"classes": 29,
"category_videos": 9,
"detail_videos": 1,
"episodes": 1
},
"samples": {
"tid": "3",
"vod_id": "10284595040762396431",
"flag": "百度短剧",
"play_id": "4723147730512611191|||10284595040762396431"
},
"player": {
"parse": 0,
"url": "http://vd3.bdstatic.com/mda-rgu31fx13xnschwc/1080p/mv_cae264_backtrack_1080p_normal/1753858859061604699/mda-rgu31fx13xnschwc.mp4?v_from_s=haokan-ui-video-hnb",
"valid": true,
"reachable": true,
"status_code": 200,
"final_url": "http://vd3.bdstatic.com/mda-rgu31fx13xnschwc/1080p/mv_cae264_backtrack_1080p_normal/1753858859061604699/mda-rgu31fx13xnschwc.mp4?v_from_s=haokan-ui-video-hnb",
"reason": null
}
},
{
"spider": "盘Ta",
"file": "盘Ta.txt",
"success": true,
"failed_stage": null,
"error": null,
"traceback": null,
"timings_ms": {
"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,
"category_videos": 30,
"detail_videos": 1,
"episodes": 1
},
"samples": {
"tid": "?tagId=39765285016165",
"vod_id": "264430",
"flag": "移动",
"play_id": "https://yun.139.com/shareweb/%23/w/i/2sUfBKpu5QBqz"
},
"player": {
"parse": 0,
"url": "https://yun.139.com/shareweb/#/w/i/2sUfBKpu5QBqz",
"valid": true,
"reachable": true,
"status_code": 200,
"final_url": "https://yun.139.com/shareweb/#/w/i/2sUfBKpu5QBqz",
"reason": null
}
},
{
"spider": "盘聚",
"file": "盘聚.txt",
"success": true,
"failed_stage": null,
"error": null,
"traceback": null,
"timings_ms": {
"module_load": 5.578,
"init": 0.001,
"home": 0.0,
"category": 8664.841,
"detail": 7952.524,
"player": 8675.007,
"url_check": 1175.208,
"total": 26474.002
},
"counts": {
"classes": 4,
"category_videos": 20,
"detail_videos": 1,
"episodes": 2
},
"samples": {
"tid": "/",
"vod_id": "118943",
"flag": "百度1",
"play_id": "push://https://www.seedhub.cc/link_start/?redirect_to=pan_id_582338&movie_title=❤️❤️❤️【低智商犯罪】【4K 1080P】更新于 ✅ 今天"
},
"player": {
"parse": 0,
"url": "https://pan.baidu.com/s/1peTZUHSqI7G9IV8sDes97g?pwd=ojmk",
"valid": true,
"reachable": true,
"status_code": 200,
"final_url": "https://pan.baidu.com/share/init?surl=peTZUHSqI7G9IV8sDes97g&pwd=ojmk",
"reason": null
}
},
{
"spider": "盘链",
"file": "盘链.txt",
"success": true,
"failed_stage": null,
"error": null,
"traceback": null,
"timings_ms": {
"module_load": 8.607,
"init": 0.018,
"home": 0.001,
"category": 12469.839,
"detail": 334.602,
"player": 0.002,
"url_check": 1373.005,
"total": 14186.469
},
"counts": {
"classes": 5,
"category_videos": 30,
"detail_videos": 1,
"episodes": 2
},
"samples": {
"tid": "0",
"vod_id": "75716",
"flag": "百度",
"play_id": "push://https://pan.baidu.com/s/1rbhXV3rLNKd1wVta_hMYnw?pwd=8888"
},
"player": {
"parse": 0,
"url": "https://pan.baidu.com/s/1rbhXV3rLNKd1wVta_hMYnw?pwd=8888",
"valid": true,
"reachable": true,
"status_code": 200,
"final_url": "https://pan.baidu.com/share/init?surl=rbhXV3rLNKd1wVta_hMYnw&pwd=8888",
"reason": null
}
},
{
"spider": "短剧优选",
"file": "短剧优选.txt",
"success": true,
"failed_stage": null,
"error": null,
"traceback": null,
"timings_ms": {
"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": 77,
"detail_videos": 1,
"episodes": 1
},
"samples": {
"tid": "七猫",
"vod_id": "七猫@24333",
"flag": "七猫短剧",
"play_id": "https://cdn-vod-playlet.wtzw.com/asset/b936eac78f199fd865afbe3c5b707e7f/play_multi_video/6f7310c287644b7c813ab8e2eb7a4a0c/f1223068052dd7f1bc88718af4b2c0e4.m3u8"
},
"player": {
"parse": 0,
"url": "https://cdn-vod-playlet.wtzw.com/asset/b936eac78f199fd865afbe3c5b707e7f/play_multi_video/6f7310c287644b7c813ab8e2eb7a4a0c/f1223068052dd7f1bc88718af4b2c0e4.m3u8",
"valid": true,
"reachable": true,
"status_code": 200,
"final_url": "https://cdn-vod-playlet.wtzw.com/asset/b936eac78f199fd865afbe3c5b707e7f/play_multi_video/6f7310c287644b7c813ab8e2eb7a4a0c/f1223068052dd7f1bc88718af4b2c0e4.m3u8",
"reason": null
}
},
{
"spider": "短剧网",
"file": "短剧网.txt",
"success": true,
"failed_stage": null,
"error": null,
"traceback": null,
"timings_ms": {
"module_load": 3.691,
"init": 0.001,
"home": 0.0,
"category": 351.885,
"detail": 320.474,
"player": 0.005,
"url_check": 917.254,
"total": 1594.383
},
"counts": {
"classes": 2,
"category_videos": 20,
"detail_videos": 1,
"episodes": 2
},
"samples": {
"tid": "1",
"vod_id": "https://sm3.cc/?id=53013",
"flag": "百度",
"play_id": "https://pan.baidu.com/s/1qqHzohAo-ib8SRAVKmQEMg?pwd=6666"
},
"player": {
"parse": 0,
"url": "https://pan.baidu.com/s/1qqHzohAo-ib8SRAVKmQEMg?pwd=6666",
"valid": true,
"reachable": true,
"status_code": 200,
"final_url": "https://pan.baidu.com/share/init?surl=qqHzohAo-ib8SRAVKmQEMg&pwd=6666",
"reason": null
}
},
{
"spider": "糯米",
"file": "糯米.txt",
"success": true,
"failed_stage": null,
"error": null,
"traceback": null,
"timings_ms": {
"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": 5,
"category_videos": 168,
"detail_videos": 1,
"episodes": 2
},
"samples": {
"tid": "dianying",
"vod_id": "/vod/63169.html",
"flag": "FF",
"play_id": "/play/63169-1-1.html"
},
"player": {
"parse": 0,
"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
}
},
{
"spider": "网易云音乐",
"file": "网易云音乐.txt",
"success": false,
"failed_stage": "unexpected",
"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": 12.299,
"init": 0.001,
"home": 412.324,
"category": 350.11,
"detail": 0.005,
"player": 304.558,
"url_check": 0.0,
"total": 1083.745
},
"counts": {
"classes": 62,
"category_videos": 100,
"detail_videos": 1,
"episodes": 1
},
"samples": {
"tid": "/discover/toplist?id=19723756",
"vod_id": "3353437817@我对缘分小心翼翼@林俊杰👉MV",
"flag": "网易云音乐",
"play_id": "3353437817"
},
"player": {
"parse": null,
"url": "",
"valid": false,
"reachable": null,
"status_code": null,
"final_url": "",
"reason": null
}
},
{
"spider": "耐视点播",
"file": "耐视点播.txt",
"success": false,
"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": 15.479,
"init": 0.001,
"home": 0.001,
"category": 9832.361,
"detail": 0.0,
"player": 0.0,
"url_check": 0.0,
"total": 30171.009
},
"counts": {
"classes": 6,
"category_videos": 0,
"detail_videos": 0,
"episodes": 0
},
"samples": {
"tid": "2",
"vod_id": null,
"flag": null,
"play_id": null
},
"player": {
"parse": null,
"url": "",
"valid": false,
"reachable": null,
"status_code": null,
"final_url": "",
"reason": null
}
},
{
"spider": "腾讯视频",
"file": "腾讯视频.txt",
"success": true,
"failed_stage": null,
"error": null,
"traceback": null,
"timings_ms": {
"module_load": 5.617,
"init": 0.001,
"home": 92.518,
"category": 262.952,
"detail": 1093.569,
"player": 0.002,
"url_check": 203.338,
"total": 1658.78
},
"counts": {
"classes": 7,
"category_videos": 12,
"detail_videos": 1,
"episodes": 1
},
"samples": {
"tid": "choice",
"vod_id": "choice$mzc002009g0nh88",
"flag": "腾讯视频",
"play_id": "https://v.qq.com/x/cover/mzc002009g0nh88/w4102d4f4ur.html"
},
"player": {
"parse": 1,
"url": "https://v.qq.com/x/cover/mzc002009g0nh88/w4102d4f4ur.html",
"valid": true,
"reachable": true,
"status_code": 200,
"final_url": "https://v.qq.com/x/cover/mzc002009g0nh88/w4102d4f4ur.html",
"reason": null
}
},
{
"spider": "至臻",
"file": "至臻.txt",
"success": true,
"failed_stage": null,
"error": null,
"traceback": null,
"timings_ms": {
"module_load": 14.119,
"init": 0.001,
"home": 0.001,
"category": 1157.957,
"detail": 10828.529,
"player": 0.008,
"url_check": 145.205,
"total": 12146.369
},
"counts": {
"classes": 7,
"category_videos": 72,
"detail_videos": 1,
"episodes": 1
},
"samples": {
"tid": "1",
"vod_id": "6012",
"flag": "夸克#至臻",
"play_id": "https://pan.quark.cn/s/3e059b2568e6"
},
"player": {
"parse": 0,
"url": "https://pan.quark.cn/s/3e059b2568e6",
"valid": true,
"reachable": true,
"status_code": 200,
"final_url": "https://pan.quark.cn/s/3e059b2568e6",
"reason": null
}
},
{
"spider": "茶杯狐",
"file": "茶杯狐.txt",
"success": true,
"failed_stage": null,
"error": null,
"traceback": null,
"timings_ms": {
"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,
"category_videos": 36,
"detail_videos": 1,
"episodes": 2
},
"samples": {
"tid": "1",
"vod_id": "detail/video/121240",
"flag": "FF有广",
"play_id": "play/121240-1-1"
},
"player": {
"parse": 0,
"url": "https://vip.ffzy-plays.com/20260528/54076_b6d496c4/index.m3u8",
"valid": true,
"reachable": true,
"status_code": 200,
"final_url": "https://vip.ffzy-plays.com/20260528/54076_b6d496c4/index.m3u8",
"reason": null
}
},
{
"spider": "虎斑",
"file": "虎斑.txt",
"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": 8.066,
"init": 0.001,
"home": 0.001,
"category": 15608.842,
"detail": 0.0,
"player": 0.0,
"url_check": 0.0,
"total": 15623.475
},
"counts": {
"classes": 7,
"category_videos": 0,
"detail_videos": 0,
"episodes": 0
},
"samples": {
"tid": "1",
"vod_id": null,
"flag": null,
"play_id": null
},
"player": {
"parse": null,
"url": "",
"valid": false,
"reachable": null,
"status_code": null,
"final_url": "",
"reason": null
}
},
{
"spider": "蜡笔",
"file": "蜡笔.txt",
"success": true,
"failed_stage": null,
"error": null,
"traceback": null,
"timings_ms": {
"module_load": 8.928,
"init": 0.001,
"home": 0.001,
"category": 22736.874,
"detail": 395.335,
"player": 0.005,
"url_check": 1150.53,
"total": 24292.003
},
"counts": {
"classes": 7,
"category_videos": 72,
"detail_videos": 1,
"episodes": 2
},
"samples": {
"tid": "29",
"vod_id": "9231",
"flag": "百度#蜡笔",
"play_id": "https://pan.baidu.com/s/1LZC9v0B6ETfpQWooAqqxJA?pwd=jcx5"
},
"player": {
"parse": 0,
"url": "https://pan.baidu.com/s/1LZC9v0B6ETfpQWooAqqxJA?pwd=jcx5",
"valid": true,
"reachable": true,
"status_code": 200,
"final_url": "https://pan.baidu.com/share/init?surl=LZC9v0B6ETfpQWooAqqxJA&pwd=jcx5",
"reason": null
}
},
{
"spider": "袋鼠影视",
"file": "袋鼠影视.txt",
"success": true,
"failed_stage": null,
"error": null,
"traceback": null,
"timings_ms": {
"module_load": 7.773,
"init": 0.001,
"home": 0.001,
"category": 761.749,
"detail": 9743.517,
"player": 284.334,
"url_check": 1235.326,
"total": 12033.408
},
"counts": {
"classes": 4,
"category_videos": 36,
"detail_videos": 1,
"episodes": 2
},
"samples": {
"tid": "1",
"vod_id": "415027",
"flag": "蓝光专线4",
"play_id": "play/415027-2-0"
},
"player": {
"parse": 0,
"url": "https://play.phimgood.com/20260528/27308_df1587ed/index.m3u8",
"valid": true,
"reachable": true,
"status_code": 200,
"final_url": "https://play.phimgood.com/20260528/27308_df1587ed/index.m3u8",
"reason": null
}
},
{
"spider": "视界",
"file": "视界.txt",
"success": true,
"failed_stage": null,
"error": null,
"traceback": null,
"timings_ms": {
"module_load": 6.353,
"init": 0.0,
"home": 490.323,
"category": 196.814,
"detail": 328.385,
"player": 7413.541,
"url_check": 430.592,
"total": 8866.659
},
"counts": {
"classes": 6,
"category_videos": 30,
"detail_videos": 1,
"episodes": 1
},
"samples": {
"tid": "20",
"vod_id": "134532",
"flag": "备用源(有广勿信)",
"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://vod.feifei-video.com/20260427/42451_1abe906b/index.m3u8",
"valid": true,
"reachable": true,
"status_code": 200,
"final_url": "https://svip.ffzyplay.com/?url=https://vod.feifei-video.com/20260427/42451_1abe906b/index.m3u8",
"reason": null
}
},
{
"spider": "路漫漫",
"file": "路漫漫.txt",
"success": false,
"failed_stage": "category",
"error": "分类视频列表为空",
"traceback": null,
"timings_ms": {
"module_load": 7.409,
"init": 0.001,
"home": 0.0,
"category": 8059.504,
"detail": 0.0,
"player": 0.0,
"url_check": 0.0,
"total": 8245.273
},
"counts": {
"classes": 6,
"category_videos": 0,
"detail_videos": 0,
"episodes": 0
},
"samples": {
"tid": "7",
"vod_id": null,
"flag": null,
"play_id": null
},
"player": {
"parse": null,
"url": "",
"valid": false,
"reachable": null,
"status_code": null,
"final_url": "",
"reason": null
}
},
{
"spider": "酷我听书",
"file": "酷我听书.txt",
"success": true,
"failed_stage": null,
"error": null,
"traceback": null,
"timings_ms": {
"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,
"category_videos": 21,
"detail_videos": 1,
"episodes": 1
},
"samples": {
"tid": "2",
"vod_id": "13492273",
"flag": "酷我听书",
"play_id": "free|94448942"
},
"player": {
"parse": 0,
"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/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
}
},
{
"spider": "酷狗音乐",
"file": "酷狗音乐.txt",
"success": true,
"failed_stage": null,
"error": null,
"traceback": null,
"timings_ms": {
"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,
"category_videos": 15,
"detail_videos": 1,
"episodes": 1
},
"samples": {
"tid": "recommend",
"vod_id": "854978064",
"flag": "酷狗音乐",
"play_id": "854978064"
},
"player": {
"parse": 0,
"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/202605290903/0a1b20f6dc9a33af46136a43906044c1/v3/6a1368ffa32207172f51e979651b3b7c/yp/full/ap1013_us0_mic85f71c379c462618de1399950957c33_pi6101_mx854978064_qumultitrack_s2058156924.mkv?ft=car_203559_10049&fts=b05bb02d44717442054bac7624ed9a29&ext=.mkv",
"reason": null
}
},
{
"spider": "金牌",
"file": "金牌.txt",
"success": true,
"failed_stage": null,
"error": null,
"traceback": null,
"timings_ms": {
"module_load": 15.226,
"init": 0.001,
"home": 1574.235,
"category": 211.591,
"detail": 203.326,
"player": 230.227,
"url_check": 512.757,
"total": 2748.142
},
"counts": {
"classes": 4,
"category_videos": 30,
"detail_videos": 1,
"episodes": 1
},
"samples": {
"tid": "1",
"vod_id": "143230",
"flag": "金牌线路",
"play_id": "143230@1271963"
},
"player": {
"parse": 0,
"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://ppvod01.kqgfbs.com/splitOut/20260318/1267932/V20260318194542050871267932/index.m3u8?t=6a190ff6&whip=171.212.167.174&sign=cf0ace9481c9ce26510959137c19b3684ab05adf",
"reason": null
}
},
{
"spider": "闪电",
"file": "闪电.txt",
"success": true,
"failed_stage": null,
"error": null,
"traceback": null,
"timings_ms": {
"module_load": 9.475,
"init": 0.001,
"home": 0.001,
"category": 17717.611,
"detail": 2971.848,
"player": 0.007,
"url_check": 171.354,
"total": 20870.734
},
"counts": {
"classes": 5,
"category_videos": 72,
"detail_videos": 1,
"episodes": 1
},
"samples": {
"tid": "1",
"vod_id": "185959",
"flag": "夸克#闪电",
"play_id": "https://pan.quark.cn/s/439e884b528b"
},
"player": {
"parse": 0,
"url": "https://pan.quark.cn/s/439e884b528b",
"valid": true,
"reachable": true,
"status_code": 200,
"final_url": "https://pan.quark.cn/s/439e884b528b",
"reason": null
}
},
{
"spider": "飞快TV",
"file": "飞快TV.txt",
"success": true,
"failed_stage": null,
"error": null,
"traceback": null,
"timings_ms": {
"module_load": 6.265,
"init": 0.001,
"home": 0.001,
"category": 980.418,
"detail": 7103.907,
"player": 10117.988,
"url_check": 828.392,
"total": 19037.592
},
"counts": {
"classes": 4,
"category_videos": 40,
"detail_videos": 1,
"episodes": 2
},
"samples": {
"tid": "1",
"vod_id": "241739",
"flag": "茅台资源1",
"play_id": "/vodplay/241739-1-1.html"
},
"player": {
"parse": 0,
"url": "https://vodcnd11.myqqdd.com/20260528/z8E8KbkF/index.m3u8",
"valid": true,
"reachable": true,
"status_code": 200,
"final_url": "https://vodcnd11.myqqdd.com/20260528/z8E8KbkF/index.m3u8",
"reason": null
}
},
{
"spider": "魔方APP",
"file": "魔方APP.txt",
"success": false,
"failed_stage": "home",
"error": "分类列表为空",
"traceback": null,
"timings_ms": {
"module_load": 6.717,
"init": 0.001,
"home": 6890.427,
"category": 0.0,
"detail": 0.0,
"player": 0.0,
"url_check": 0.0,
"total": 6897.282
},
"counts": {
"classes": 0,
"category_videos": 0,
"detail_videos": 0,
"episodes": 0
},
"samples": {
"tid": null,
"vod_id": null,
"flag": null,
"play_id": null
},
"player": {
"parse": null,
"url": "",
"valid": false,
"reachable": null,
"status_code": null,
"final_url": "",
"reason": null
}
},
{
"spider": "麦田影院",
"file": "麦田影院.txt",
"success": true,
"failed_stage": null,
"error": null,
"traceback": null,
"timings_ms": {
"module_load": 5.447,
"init": 0.001,
"home": 0.001,
"category": 3524.137,
"detail": 454.924,
"player": 0.01,
"url_check": 396.476,
"total": 18450.669
},
"counts": {
"classes": 6,
"category_videos": 20,
"detail_videos": 1,
"episodes": 2
},
"samples": {
"tid": "2",
"vod_id": "155698",
"flag": "LZ源",
"play_id": "eyJ1cmwiOiJodHRwczovL3YubHpjZG4yOC5jb20vMjAyNTA5MjMvMjMyNl9hOWJmMjM0YS9pbmRleC5tM3U4IiwicGFyc2VfYXBpIjoiaHR0cHM6Ly9kZWwubXQzMjAuY29tL2x6ZmYucGhwP3VybD0iLCJoZWFkZXJzIjp7fSwidXNlcl9hZ2VudCI6IiJ9"
},
"player": {
"parse": 0,
"url": "https://v.lzcdn28.com/20250923/2326_a9bf234a/index.m3u8",
"valid": true,
"reachable": true,
"status_code": 200,
"final_url": "https://v.lzcdn28.com/20250923/2326_a9bf234a/index.m3u8",
"reason": null
}
},
{
"spider": "黑猫APP",
"file": "黑猫APP.txt",
"success": false,
"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/.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.347,
"init": 0.001,
"home": 197.249,
"category": 0.0,
"detail": 0.0,
"player": 0.0,
"url_check": 0.0,
"total": 206.185
},
"counts": {
"classes": 0,
"category_videos": 0,
"detail_videos": 0,
"episodes": 0
},
"samples": {
"tid": null,
"vod_id": null,
"flag": null,
"play_id": null
},
"player": {
"parse": null,
"url": "",
"valid": false,
"reachable": null,
"status_code": null,
"final_url": "",
"reason": null
}
}
]
}