fix(adapters): 观众详情页按真实页面适配(DET-2)

- 促销:详情 h1 是 font.free / font.halfdown 等 + 剩余时间 span[title],新增 umt.detail.promo 覆盖列表促销字段(以前一律判成无促销并覆盖列表的免费)
- 标题去掉 h1 里的「剩余时间:」;发布时间不再取标题区的促销到期时间
- 做种 / 下载 / 完成数、种子 Hash:umt.detail.fields.seeders / leechers / snatched / infoHash
- 副标题去掉评分徽标;标签只取最内层;上传者取 span.torrent-uploader-wrap,标签精确匹配(避开「发布者带宽」)
- 简介:去掉站点声明(page.descriptionStrip)与 MediaInfo 控件(codetop / show / hide),源码换行不再算一行
- 截图排除豆瓣海报与站点横幅
- 列表副标题改取 span.torrent-subtitle-text(以前前面粘着标签文字)
- 脱敏真实样本:详情 2 页进 differential/detail.test.ts,列表 1 页进 MP 差分

Co-Authored-By: Claude Opus 5.5 <[email protected]>
This commit is contained in:
rootandClaude Opus 5.5 committed 2026-09-30 20:49:29 +08:00
1 parent 322ecb2f8c
commit 92830c3ef3
17 files changed
+1301 -69

No files matched your search

@@ -140,7 +140,7 @@
}
},
"description": {
"selector": "span.torrent-subtitle-line"
"selector": "span.torrent-subtitle-text"
},
"category": {
"selector": "a[href*=\"?cat=\"]",
@@ -168,7 +168,7 @@
}
},
"umt": {
"version": "audiences@0.2.0-unverified",
"version": "audiences@0.3.0",
"kind": "nexusphp",
"displayName": "观众",
"timezone": "+08:00",
@@ -225,7 +225,55 @@
},
"description": "#kdescr",
"headerScope": "h1#top",
"notFoundMarkers": ["没有该ID的种子", "No torrent with ID"]
"notFoundMarkers": ["没有该ID的种子", "No torrent with ID"],
"fields": {
"seeders": "#seeders",
"leechers": "#leechers",
"snatched": "a[title='完成'][href*='viewsnatches.php']",
"infoHash": "#copyTorrentHashLink::attr(data-hash)"
},
"promo": {
"downloadvolumefactor": {
"case": {
"font.free": 0,
"font.twoupfree": 0,
"font.halfdown": 0.5,
"font.twouphalfdown": 0.5,
"font.thirtypercent": 0.3,
"img.pro_free": 0,
"img.pro_free2up": 0,
"img.pro_50pctdown": 0.5,
"img.pro_50pctdown2up": 0.5,
"img.pro_30pctdown": 0.3,
"*": 1
}
},
"uploadvolumefactor": {
"case": {
"font.twoup": 2,
"font.twoupfree": 2,
"font.twouphalfdown": 2,
"img.pro_50pctdown2up": 2,
"img.pro_free2up": 2,
"img.pro_2up": 2,
"*": 1
}
},
"freedate": {
"selector": "img[class^=\"pro_\"], span[title]",
"attribute": "title",
"filters": [
{
"name": "re_search",
"args": ["\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}", 0]
}
]
}
},
"page": {
"uploader": "span.torrent-uploader-wrap",
"descriptionStrip": "#ad_torrentdetail"
}
}
}
}
@@ -139,8 +139,13 @@ const UmtNexusSchema = z.strictObject({
imdb: z.string().optional(),
douban: z.string().optional(),
fileList: z.string().optional(),
seeders: z.string().optional(),
leechers: z.string().optional(),
snatched: z.string().optional(),
infoHash: z.string().optional(),
})
.optional(),
promo: z.record(z.string(), SpiderFieldSelectorSchema).optional(),
page: z
.strictObject({
labelSelectors: z.array(z.string()).optional(),
@@ -150,6 +155,7 @@ const UmtNexusSchema = z.strictObject({
uploader: z.string().optional(),
files: z.string().optional(),
fileListPath: z.string().optional(),
descriptionStrip: z.string().optional(),
})
.optional(),
})