如何处理Spotify API获取曲目ID随时间变更的问题?
解决方案
1. 改用ISRC码作为映射核心
Spotify同一首录音的不同发行版本(单曲/EP/专辑版)会共享ISRC(国际标准录音代码),这才是录音的唯一标识,不受发行形式影响。换用ISRC作为映射的核心可以从根源解决ID变更问题:
- 初始化阶段:获取每个曲目的ISRC,建立三个字典:
isrc_to_binary:键为ISRC,值为对应的13位二进制字符串binary_to_isrc:键为二进制字符串,值为对应的ISRC(用于写入时反向查找)isrc_to_track_ids:键为ISRC,值为该录音所有可用的曲目ID列表
- 写入文件时:根据二进制字符串找到对应ISRC,再从
isrc_to_track_ids里选一个可用的曲目ID添加到播放列表 - 读取文件时:获取每个曲目的ISRC,直接通过
isrc_to_binary转换为二进制,完全不用管曲目ID是否变化
2. 预构建多ID映射池
如果你不想换核心标识,可以提前为每个二进制对应的录音收集所有关联的曲目ID:
- 初始化时,对每个初始曲目ID:
- 调用
get_track接口,检查linked_from字段(如果存在,这是被替换的原始ID),把它加入该二进制的ID池 - 用
search接口搜索isrc:[目标ISRC],获取同一录音的所有发行版本ID,全部加入ID池
- 调用
- 建立两个全局字典:
binary_to_track_ids:键为二进制字符串,值为对应录音的所有曲目ID列表track_id_to_binary:键为所有收集到的曲目ID,值为对应的二进制字符串
- 读取时,不管返回什么ID,直接查
track_id_to_binary即可;写入时从binary_to_track_ids选一个ID添加
3. 优化错误处理的校准流程
如果坚持使用原始ID映射,可以大幅削减校准的请求量:
- 不要全量校准,只针对出错的ID单独处理:捕获
KeyError时,对该ID调用get_track获取其ISRC,然后在字典中找到对应ISRC的二进制字符串,同时把新ID添加到该二进制的映射条目里 - 批量处理错误:把单次读取中所有出错的ID攒成最多100个的批次,调用
get_tracks批量获取ISRC,再批量更新字典,减少请求次数 - 这种方式只会处理实际出现问题的ID,请求量不会随曲目总数增长而飙升
额外注意事项
- 利用Spotify API的批量接口(比如
get_tracks一次最多100个ID),减少请求次数,避免触发速率限制 - 定期跑脚本更新映射字典:每周/每月检查所有映射的ID有效性,补充新的关联ID,提前规避读取错误
内容的提问来源于stack exchange,提问作者flakpm
相关产品推荐
相关产品推荐

