Repository navigation
Release v3.3.35
✨ 新增功能
无。本版是一次针对性的刮削修复。
🐛 Bug Fixes
用英文名命名的国漫 / 日番 / 韩剧被刮成一部毫不相干的作品,年份还变成空
现象是这样的:Fights.Break.Sphere.S05E208.2017.2160p.TX.WEB-DL.H.265.DDP2.0-HHWEB(国漫《斗破苍穹》)被刮成一部美剧,产出的目录挂在「欧美剧」下面,年份那一格是空的。
很容易把它读成「年份没解析出来」——本地正则其实一直是对的,标题 Fights Break Sphere、年份 2017、S05E208 全部解析正确。坏的是 TMDb 匹配的排序阶段,而空年份只是它的一个副作用,偏偏是最显眼的那个,排查方向会被它带偏一整轮。
拿真实响应复现(/search/tv?language=zh-CN&query=Fights Break Sphere,共 6 条):
| 排序后 | 条目 | 总集数 | 首播日期 | 地区 |
|---|---|---|---|---|
| 1 | Fights Break Sphere: Origin (2022) | 0 | 空 | US |
| 2 | Fights Break Sphere SP3 … | 0 | 空 | US |
| 3 | Fights Break Sphere SP2 … | 0 | 空 | US |
| 4 | 斗破苍穹(正确答案,279 集) | 279 | 2017-01-07 | CN |
搜索结果按 zh-CN 本地化,正确答案的两个可比字段(name / original_name)都是「斗破苍穹」,拿一个英文文件名去比,标题这一维在构造上就无法参与比较——它拿到的不是「不匹配」,而是「这一维根本没打分」,只能靠年份和热度去和一堆「名字里恰好含某个英文单词」的条目竞争,而后者稳拿包含命中的加分。于是它排到第 4,而每次搜索只检验前 3 名,它连被检验的机会都没有。
三道本该拦住这件事的防线同时失效:
- 集数反证(就是修
Perfect World S01E282那次加的那道)对着一个number_of_episodes为 0 的条目走了「拿不到总集数就不判断」的分支——它只在证据确凿时否决,这里连触发条件都不成立; - 采纳门槛被冠军靠「标题包含」通过了;
- 采纳之后,那条脏条目的首播日期是空的,于是解析对了的
2017被一个空串覆盖掉。
而 TMDb 上本来就摆着一条能一击命中的证据:正确答案的 en-US 规范名逐字就是 Fights Break Sphere。代码里也一直有拉取它的逻辑,但它只长在采纳门槛上、只对已经进了前 3 名的候选生效——正确答案挤不进前三时,这条最强的信号一次都不会被求值。
修复:排序阶段就为「标题分注定为 0」的候选补拉一次英文规范名。判据收得很紧——只有当解析出的标题里有纯拉丁的一个、且候选的 name 与 original_name 全部是中日韩文时才补;候选自己带着拉丁标题就不补(那时拉丁对拉丁的比较已经做过了,0 是一个真实结论而不是结构性缺失)。补拉后,正确答案的英文规范名与解析标题逐字相等,直接进「全等」档,一举翻盘。
这个毛病影响的不止这一部剧:凡是「TMDb 上只有中日韩文名、而发布组按英文或罗马音命名」的作品都在射程内——国漫、日本动画、韩剧是重灾区。
候选没有播出日期时,会用空串覆盖掉已经解析对的年份
上面那条的第三层,单独拎出来说是因为它独立成立:任何一个缺 first_air_date / release_date 的 TMDb 条目被采纳时,都会把文件名里解析对了的年份抹成空。
把年份改写成 TMDb 的首播年本身是有意的(这样媒体库不会因为某季的种子写了别的年份而把同一部剧分裂成两个条目),要排除的只是「用空值覆盖」这一种情况——空值不是一个更权威的答案,只是没有答案。
⚙️ Improvements
- 重命名日志现在会在查 TMDb 之前先记一次本地解析结果(标题 / 原始标题 / 英文标题 / 年份 / 季 / 集)。此前唯一打印识别结果的那行在富化之后,而 TMDb 采纳候选时会连标题带年份一起改写——于是「本地正则解析错了」和「TMDb 匹配错了」在日志上长得一模一样。上面那次误判正是因此被读成了「年份解析失败」。
- 季里找不到对应集号时补了一行 WARN。原先这种情况是完全静默的:集标题、剧情、播出日期、剧照全部留空,单集 NFO 只剩一个骨架,而日志里一个字都没有,表现为「刮削成功但这一集什么信息都没有」。最常见的成因是编号口径不一致(发布组按绝对集号命名、而 TMDb 这一季按季内相对号编制)。这行日志会把该季的集号区间和总集数一起报出来,只报告、不猜测换算。
- 补拉英文规范名的请求数是有上界的:只给上面那种结构的候选补,且整次搜索最多 5 次;排序与采纳门槛共用同一份按条目 id 记忆的结果,因此正常命中的路径一次额外请求都不会多发。
📦 Breaking Changes
无。
📝 Notes
- 本版没有新增数据库迁移脚本,升级只需拉新镜像重启,不需要执行任何 SQL 或手工操作。
- 只有后端镜像有改动,前端一个字节都没动。
- 已经被刮错的文件不会自动更正。 修复只对此后的刮削生效,存量的错误目录(典型症状:国漫 / 日番被放进「欧美剧」,或者目录名带着一个空年份)需要重新刮削一次才会更名。可以先按这两个特征在媒体库里找一遍。
- 升级后可能会在日志里看到一类新的 WARN:
TMDb 第 N 季里没有第 M 集,分集信息留空。它不是本版引入的新故障,而是原先就一直静默发生的情况现在被说出来了。看到它说明那一集的分集信息确实是空的,多数是绝对集号与 TMDb 季内编号对不上,属于已知边界。 - 本版没有新增或改动任何可调配置项。
Full Changelog: v3.3.34...v3.3.35