You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

使用Flask+Spotipy调用Spotify Web API时,/v1/playlists/{id}请求正常但/v1/playlists/{id}/tracks返回403 Forbidden错误

Flask+Spotipy调用Spotify Web API时,/v1/playlists/{id}请求正常但/v1/playlists/{id}/tracks返回403 Forbidden错误

嗨,我之前也踩过类似的坑,给你梳理几个最可能的原因和解决办法,应该能帮你搞定这个问题!

一、最核心的问题:授权Token没拿到读取播放列表曲目的权限

虽然你列了需要的scopes,但很大概率是授权环节出了岔子

  • 先检查scope的传递格式:Spotipy要求scope必须是空格分隔的字符串,如果你之前用了列表(比如scope = ["playlist-read-private", ...]),一定要转换成字符串格式,比如scope = "playlist-read-private playlist-read-collaborative user-library-read playlist-modify-private"
  • 其次,旧的授权会话可能缺权限:如果第一次授权时你没勾选全所有权限,后续的token也不会自动补上。解决办法很直接:
    1. 清除浏览器里Spotify的登录缓存(比如在隐私设置里删掉对应网站的存储数据)
    2. 在初始化SpotifyOAuth时加上show_dialog=True参数,强制每次授权都弹出权限列表,确保你能看到并勾选所有需要的权限
    3. 重启Flask服务,重新走一遍登录授权流程

二、检查Spotipy版本是否过旧

旧版本的Spotipy可能对playlist_items方法的API调用逻辑有bug,比如没有正确传递权限信息或者端点路径处理出错。你可以执行下面的命令更新到最新版:

pip install --upgrade spotipy

三、验证Token实际包含的权限

有时候你以为请求了某个scope,但实际返回的token里并没有。可以在代码里加一段逻辑,打印出当前token的权限详情:

sp = spotipy.Spotify(auth=token_info['access_token'])
# 获取当前用户信息,里面包含已授权的scope列表
user_info = sp.current_user()
print("当前Token拥有的权限:", user_info['scope'])

如果输出里没有playlist-read-private或者playlist-read-collaborative,那肯定是授权环节没拿到权限,回到第一步重新处理授权就好。

四、确认播放列表的状态是否真的符合预期

虽然你说播放列表是公开的,但有时候Spotify的状态同步会有延迟。可以手动在Spotify客户端里检查:

  • 打开目标播放列表,确认“公开”开关是打开的
  • 检查播放列表页面的“所有者”信息,确保和当前登录用户一致

最后,手动API调用排雷

如果上面的方法都没用,你可以直接用curl测试API端点,带上你的access_token,看看返回的具体错误提示:

curl -H "Authorization: Bearer YOUR_ACCESS_TOKEN" https://api.spotify.com/v1/playlists/PLAYLIST_ID/tracks

Spotify的403错误有时候会返回更具体的原因(比如insufficient_scope),这能帮你快速锁定问题。

我当时遇到这个问题就是因为第一次授权时漏勾了playlist-read-private权限,重新授权后就正常获取到曲目了,希望这些方法能帮你解决问题!

火山引擎 最新活动