问题描述
配置 CUSTOM_SOURCE_API_URL 并在 SOURCE_ORDER 中加入 custom 后,手动搜索能够正常返回远端实例的结果和剧集列表,但 POST /api/v2/match 无法匹配这些 custom 候选。
环境
- danmu_api:
1.21.2
- commit:
280b2327ccf06fb5e32a1db7051025359121a2c1
- Docker 部署
- 配置示例:
CUSTOM_SOURCE_API_URL=https://custom.example.com/87654321
SOURCE_ORDER=renren,hanjutv,custom
复现步骤
- 让自定义源中存在一部带有多集详情的剧集,例如《坏妈妈》(2023)。
- 向主实例发送:
POST /api/v2/match
Content-Type: application/json
{"fileName":"坏妈妈.2023.S01E01"}
- 搜索阶段能够返回正确的 2023 年候选,但自动匹配结果为空:
{
"errorCode": 0,
"success": true,
"errorMessage": "",
"isMatched": false,
"matches": []
}
日志中出现:
[matchAnime] Missing request detail snapshot for anime 40982
[matchAnime] Missing request detail snapshot for anime 9299859
原因分析
CustomSource.handleAnimes 已支持接收 detailStore:
async handleAnimes(sourceAnimes, queryTitle, curAnimes, detailStore = null)
但源注册表中的 custom handleAdapter 只转发了前三个参数:
handleAdapter: (instance, searchResult, queryTitle, isolatedAnimes) =>
instance.handleAnimes(searchResult, queryTitle, isolatedAnimes)
因此 addAnime(..., detailStore) 实际收到 null,custom 候选的剧集详情没有写入本次请求的 isolatedDetailStore。后续自动匹配只能看到候选列表,无法获取候选的剧集快照。
建议修复
- handleAdapter: (instance, searchResult, queryTitle, isolatedAnimes) =>
- instance.handleAnimes(searchResult, queryTitle, isolatedAnimes)
+ handleAdapter: (instance, searchResult, queryTitle, isolatedAnimes, isolatedDetailStore) =>
+ instance.handleAnimes(searchResult, queryTitle, isolatedAnimes, isolatedDetailStore)
应用该修改后,同一请求能够返回:
{
"success": true,
"isMatched": true,
"matches": [
{
"animeTitle": "坏妈妈(2023)...from custom",
"episodeTitle": "第01集"
}
]
}
并且继续请求返回的 episodeId 可以正常获取弹幕。
问题描述
配置
CUSTOM_SOURCE_API_URL并在SOURCE_ORDER中加入custom后,手动搜索能够正常返回远端实例的结果和剧集列表,但POST /api/v2/match无法匹配这些 custom 候选。环境
1.21.2280b2327ccf06fb5e32a1db7051025359121a2c1复现步骤
{ "errorCode": 0, "success": true, "errorMessage": "", "isMatched": false, "matches": [] }日志中出现:
原因分析
CustomSource.handleAnimes已支持接收detailStore:但源注册表中的 custom
handleAdapter只转发了前三个参数:因此
addAnime(..., detailStore)实际收到null,custom 候选的剧集详情没有写入本次请求的isolatedDetailStore。后续自动匹配只能看到候选列表,无法获取候选的剧集快照。建议修复
应用该修改后,同一请求能够返回:
{ "success": true, "isMatched": true, "matches": [ { "animeTitle": "坏妈妈(2023)...from custom", "episodeTitle": "第01集" } ] }并且继续请求返回的
episodeId可以正常获取弹幕。