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:
rootandClaude Opus 5.5 committed 2026-10-03 23:30:57 +08:00
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");