fix(identity): bgm 按标题搜索的结果先与资源名称核对,唯一高分才采用(H1)
搜索结果按名称 / 中文名 / 别名做相似度核对,搜索结果没别名时为前几个条目拉详情再核对; 拿不准就不走 bgm 投影。投影出的 TMDB 结果再与资源自己的年份 / 续作序号 / 名称核对, 名称对不上且 bgm 条目只是相似的降为歧义。 Co-Authored-By: Claude Opus 5.5 <[email protected]> Claude-Session: https://claude.ai/code/session_01Cxwgnn2pbzQ7rXv3rq7fei
This commit is contained in:
1 parent
0085e45ca7
commit
4132324935
3 files changed
+180
-13
No files matched your search
@@ -110,10 +110,31 @@ describe.skipIf(!pg)("ID-3 识别升级链:详情页 ID", () => {
|
||||
name_cn: "葬送的芙莉莲 第二季",
|
||||
date: "2026-01-16",
|
||||
});
|
||||
if (u.host === "api.bgm.tv" && u.pathname === "/v0/search/subjects")
|
||||
// 条目详情带 infobox 别名(搜索结果没有别名,罗马音标题靠详情里的别名核对)
|
||||
if (u.host === "api.bgm.tv" && u.pathname === "/v0/subjects/400602")
|
||||
return json({
|
||||
id: 400602,
|
||||
name: "葬送のフリーレン",
|
||||
name_cn: "葬送的芙莉莲",
|
||||
date: "2023-09-29",
|
||||
infobox: [{ key: "别名", value: [{ v: "Sousou no Frieren" }, { v: "Frieren: Beyond Journey's End" }] }],
|
||||
});
|
||||
if (u.host === "api.bgm.tv" && u.pathname === "/v0/subjects/400777")
|
||||
return json({ id: 400777, name: "迷宮のフリーレン", name_cn: "迷宫芙莉莲", date: "2023-09-29" });
|
||||
if (u.host === "api.bgm.tv" && u.pathname === "/v0/search/subjects") {
|
||||
const kw = (JSON.parse(String(init?.body ?? "{}")) as { keyword?: string }).keyword ?? "";
|
||||
// 「Labyrinth Frieren」:bgm 模糊搜索的第一条是名字不同的条目,不能采用
|
||||
if (kw.startsWith("Labyrinth"))
|
||||
return json({
|
||||
data: [
|
||||
{ id: 400602, name: "葬送のフリーレン", name_cn: "葬送的芙莉莲", date: "2023-09-29" },
|
||||
{ id: 400777, name: "迷宮のフリーレン", name_cn: "迷宫芙莉莲", date: "2023-09-29" },
|
||||
],
|
||||
});
|
||||
return json({
|
||||
data: [{ id: 400602, name: "葬送のフリーレン", name_cn: "葬送的芙莉莲", date: "2023-09-29" }],
|
||||
});
|
||||
}
|
||||
return new Response("", { status: 404 });
|
||||
},
|
||||
});
|
||||
@@ -379,6 +400,17 @@ describe.skipIf(!pg)("ID-3 识别升级链:详情页 ID", () => {
|
||||
expect(res3.outcome).toBe("auto");
|
||||
expect(await tmdbIdOf(res3.mediaEntityId!)).toBe("990031");
|
||||
expect(metaRequests).toContain("POST api.bgm.tv/v0/search/subjects");
|
||||
expect((await row(r3.id)).resolution_evidence).toMatchObject({
|
||||
escalation: { via: "bangumi", bangumi: { id: "400602", search: true, score: 1 } },
|
||||
});
|
||||
// H1:搜索结果第一条与资源名称对不上(也没有别名能对上)→ 不走 bgm 投影,不自动绑定
|
||||
const r5 = await release(pub.id, "rel_A5", "[SubsPlease] Labyrinth Frieren - 03 (1080p)");
|
||||
const res5 = await resolveRelease(h.rt, { sourceReleaseId: r5.id, trigger: "manual" });
|
||||
expect(res5.outcome).not.toBe("auto");
|
||||
expect((await row(r5.id)).media_entity_id).toBeNull();
|
||||
const ev5 = (await row(r5.id)).resolution_evidence as { escalation?: { via: string | null; bangumi?: unknown } };
|
||||
expect(ev5.escalation?.via ?? null).toBeNull();
|
||||
expect(ev5.escalation?.bangumi).toBeUndefined();
|
||||
// PT 站的资源不按标题搜 bgm
|
||||
const m = metaRequests.length;
|
||||
const r4 = await release(hhan, "91099", "Sousou no Frieren S01E03 1080p WEB-DL");
|
||||
|
||||
Reference in new issue
Block a user