如何获取Spotify平台特定年份发布的全部曲目?
获取Spotify指定年份全量曲目的可行方案
核心思路:通过分页迭代+多维度覆盖突破限制
Spotify API没有直接获取某年份所有曲目的接口,且单请求最多返回50条结果,但可以通过以下方式批量累积数据:
基于搜索接口的分页遍历
用搜索接口的year:YYYY或release_date:YYYY过滤条件,配合offset参数实现分页查询,循环调用直到返回结果为空,就能累积该年份的曲目。
示例Spotipy代码:import spotipy from spotipy.oauth2 import SpotifyClientCredentials import time sp = spotipy.Spotify(auth_manager=SpotifyClientCredentials( client_id="你的Client ID", client_secret="你的Client Secret" )) target_year = 2018 all_tracks = [] offset = 0 while True: res = sp.search(q=f"year:{target_year}", type="track", limit=50, offset=offset) tracks = res['tracks']['items'] if not tracks: break all_tracks.extend(tracks) offset += 50 time.sleep(0.5) # 加延迟避免触发速率限制 # 按track.id去重 unique_tracks = list({track['id']: track for track in all_tracks}.values()) print(f"共获取{len(unique_tracks)}首{target_year}年的唯一曲目")结合专辑维度补充数据
部分曲目可能因搜索排序靠后难以通过分页触达,可先遍历指定年份的专辑,再提取每张专辑的所有曲目:- 分页获取指定年份的专辑(
type="album") - 对每个专辑ID调用
album_tracks接口提取曲目 - 同样通过
track.id去重,与搜索接口的结果合并
- 分页获取指定年份的专辑(
处理API速率限制
若遇到429错误(请求超限),需实现指数退避:读取响应头的Retry-After值,等待对应时长后重试,避免被临时封禁。
关键注意点
- 必须通过
track.id去重,同一曲目可能出现在多张合辑、专辑中 - 使用Client Credentials授权流即可,无需用户登录授权
- Spotify曲库动态更新,无法保证100%覆盖所有历史曲目,但两种方式结合可覆盖绝大多数内容
内容的提问来源于stack exchange,提问作者topgreg
相关产品推荐
相关产品推荐

