Merge branch 'det2'

Co-Authored-By: Claude Fable 5.1 <[email protected]>

# Conflicts:
#	packages/adapters/src/sites/definitions/audiences.json
#	scripts/mp-sync/movieclaw-overrides/audiences.json
This commit is contained in:
root committed 2026-09-30 20:50:04 +08:00
commit 389c49dd12
17 files changed
+1301 -69

No files matched your search

+3 -1
View File
@@ -677,7 +677,9 @@ def gen_indexer(out_dir: Optional[str] = None) -> Path:
runs.append((sid, d, {"source": "definition", "id": site_id,
"file": str(f.relative_to(UMT_ROOT)), "sha256": _sha256(f.read_bytes())},
pg, {}, "x", "torrents"))
for site_id, pg in (("audiences", "tk-audiences-login.html.txt"), ("chdbits", "tk-chdbits-login.html.txt")):
# rl-*:真实站点页面脱敏后的样本(DET-2 观众列表页),只配对应站点的定义
for site_id, pg in (("audiences", "tk-audiences-login.html.txt"), ("chdbits", "tk-chdbits-login.html.txt"),
("audiences", "rl-audiences-list.html.txt")):
f, d = defs[site_id]
runs.append((f"{site_id}@{pg.removesuffix(".html.txt")}", d, {"source": "definition", "id": site_id,
"file": str(f.relative_to(UMT_ROOT)),
@@ -1,5 +1,5 @@
{
"$comment": "W1-3b 手写观众定义(按 MP indexer schema;仅对 testkit mock 验证)。深合并到 MovieClaw v0.27.0 转换结果之上,本文件的值优先,MovieClaw 值只补空。 umt.detail.fields=null:保留 W1-3b rowhead 详情模型(已对 mock 验证),不采用 MovieClaw 默认逐字段选择器。",
"$comment": "W1-3b 手写观众定义(按 MP indexer schema;仅对 testkit mock 验证)。深合并到 MovieClaw v0.27.0 转换结果之上,本文件的值优先,MovieClaw 值只补空。 umt.detail.fields=null:保留 W1-3b rowhead 详情模型(已对 mock 验证),不采用 MovieClaw 默认逐字段选择器。 DET-2(2026-09-30 真实账号核对列表页 1 次 + 详情页 2 次):列表副标题取 span.torrent-subtitle-text(span.torrent-subtitle-line 里先是标签);详情 h1 促销是 font.free / font.halfdown 等 + 「剩余时间」span[title](umt.detail.promo);做种 / 下载 / 完成数在基本信息行右侧 #seeders / #leechers / a[title=完成](没有「同伴」行);种子 Hash 在 #copyTorrentHashLink[data-hash];上传者在 span.torrent-uploader-wrap(匿名为「匿名」);简介开头的站点声明 #ad_torrentdetail 去掉;文件清单不在页面上(点击「N个文件」后由 common.js 的 toggleFileList AJAX 加载,端点未核对),暂不另发请求。",
"id": "audiences",
"name": "观众",
"domain": "https://audiences.me/",
@@ -141,7 +141,7 @@
]
},
"description": {
"selector": "span.torrent-subtitle-line"
"selector": "span.torrent-subtitle-text"
},
"labels": {
"selector": "span.tags"
@@ -159,7 +159,7 @@
}
},
"umt": {
"version": "audiences@0.2.1-unverified",
"version": "audiences@0.3.1",
"kind": "nexusphp",
"displayName": "观众",
"timezone": "+08:00",
@@ -198,7 +198,54 @@
"description": "#kdescr",
"headerScope": "h1#top",
"notFoundMarkers": ["没有该ID的种子", "No torrent with ID"],
"fields": null
"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"
}
}
}
}