如何基于Spotify API实现满100首后自动新建序列播放列表的自动化流程
自动化全流程实现方案
核心逻辑拆解
完全匹配你提出的命名规则、100首单列表容量上限、自动创建新列表的要求,以及举的244首曲目的实际场景,全流程不需要人工干预,分为3个固定步骤:
- 第一步:前置数据准备
- 拉取所有待归类的源曲目,严格按照曲目首次添加到外部播放列表的
added_at时间戳升序排序,保证曲目顺序完全符合要求 - 拉取当前账号下所有已存在的播放列表,自动过滤出命名匹配
Playlist #数字规则的列表,解析每个列表的当前实际曲目总数
- 拉取所有待归类的源曲目,严格按照曲目首次添加到外部播放列表的
- 第二步:定位当前填充的起始位置
- 把所有匹配规则的播放列表按编号从小到大排序,依次计算每个列表的剩余可填充容量(100 - 当前曲目数)
- 找到第一个剩余容量>0的列表作为当前填充目标,优先填满这个列表的剩余空间,不直接跳去创建新列表
- 如果所有已有的同规则列表都已经达到100首的容量上限,就自动生成编号最大的下一个序列列表作为填充目标
注意:你目前编写的代码仅实现了“生成下一个序列播放列表名称”的单步逻辑,缺失了优先填充未达容量上限的已有列表的核心判断——如果直接基于这部分代码跑,会跳过还有30个空位的Playlist #4,直接从Playlist #5开始填,和实际需求不符。另外原代码里
'Playlist #2'缺失左引号,运行时会触发语法报错。
可以把序列识别逻辑优化成兼容所有命名匹配场景的健壮版本,避免识别错列表编号:import re def parse_playlist_seq(playlist_name: str) -> int | None: # 严格匹配Playlist #加数字的命名规则,过滤其他无关列表 match = re.match(r"^Playlist #(\d+)$", playlist_name.strip()) return int(match.group(1)) if match else None # 示例:你提到的现有列表场景 existing_playlists = [ {"name": "Playlist #1", "track_count": 100}, {"name": "Playlist #2", "track_count": 100}, {"name": "Playlist #3", "track_count": 100}, {"name": "Playlist #4", "track_count": 70} ] # 定位填充起点 sorted_existed = sorted( [pl for pl in existing_playlists if parse_playlist_seq(pl["name"]) is not None], key=lambda x: parse_playlist_seq(x["name"]) ) current_target = None current_capacity = 0 for pl in sorted_existed: remain = 100 - pl["track_count"] if remain > 0: current_target = pl["name"] current_capacity = remain break # 所有已有列表都满了就新建下一个序列列表 if current_target is None: max_seq = max(parse_playlist_seq(pl["name"]) for pl in sorted_existed) current_target = f"Playlist #{max_seq + 1}" current_capacity = 100 - 第三步:循环批量填充曲目
- 把之前排好序的待归类曲目按当前填充目标的容量切分块,每一块直接调用添加曲目的接口写入对应播放列表
- 每填满一个播放列表(曲目数到100),自动生成下一个序列编号的新列表,把后续待添加的曲目切分新的块继续填充,直到所有待归类曲目全部处理完成
对应你提到的244首待处理曲目的场景,流程会自动运行成:
- 填充Playlist #4:剩余30个位置,放入排序后的前30首曲目,填满
- 自动创建Playlist #5:放入接下来的100首曲目,填满
- 自动创建Playlist #6:放入接下来的100首曲目,填满
- 自动创建Playlist #7:放入剩余的14首曲目,完成全流程
实操注意事项
- 调用接口添加曲目时,单次请求最多支持传入100个曲目URI,刚好和每个播放列表的最大容量匹配,不需要额外做细粒度拆分
- 拉取源曲目和已有播放列表时要处理分页逻辑,避免只拉取第一页数据导致的顺序错乱、曲目遗漏
- 每完成一个播放列表的填充,重新拉取列表的实际曲目数做校验,避免因为接口异常导致的重复添加、曲目缺失
内容的提问来源于stack exchange,提问作者thereceptionist
相关产品推荐
相关产品推荐

