使用Spotipy调用playlist_add_items()向公开播放列表添加曲目时遭遇403 Forbidden错误求助
Spotipy调用playlist_add_items()向公开播放列表添加曲目时遭遇403 Forbidden错误求助
提问内容
我现在尝试用Spotify API(通过Spotipy)向我的一个播放列表添加曲目,但一直收到403 Forbidden错误,以下是我的代码和报错信息:
代码
import spotipy from spotipy.oauth2 import SpotifyOAuth scope = ["playlist-modify-public"] sp = spotipy.Spotify(auth_manager=SpotifyOAuth(scope=scope)) add = sp.playlist_add_items('6jZqnsWMfeSkfsApwDs8zW', ['spotify:track:5FbcIkgUDNt6mZdDVFwVyE'], position=1)
错误信息
HTTP Error for POST to https://api.spotify.com/v1/playlists/6jZqnsWMfeSkfsApwDs8zW/tracks with Params: {'position': 1} returned 403 due to Forbidden Traceback (most recent call last): File "/home/Pedr0-PC/spotipy-thing/.venv/lib/python3.13/site-packages/spotipy/client.py", line 271, in _internal_call response.raise_for_status() ~~~~~~~~~~~~~~~~~~~~~~~~~^^ File "/home/Pedr0-PC/spotipy-thing/.venv/lib/python3.13/site-packages/requests/models.py", line 1026, in raise_for_status raise HTTPError(http_error_msg, response=self) requests.exceptions.HTTPError: 403 Client Error: Forbidden for url: https://api.spotify.com/v1/playlists/6jZqnsWMfeSkfsApwDs8zW/tracks?position=1 During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/home/Pedr0-PC/spotipy-thing/test.py", line 28, in <module> add = sp.playlist_add_items('6jZqnsWMfeSkfsApwDs8zW', ['spotify:track:5FbcIkgUDNt6mZdDVFwVyE'], position=1) File "/home/Pedr0-PC/spotipy-thing/.venv/lib/python3.13/site-packages/spotipy/client.py", line 1173, in playlist_add_items return self._post( ~~~~~~~~~~^ f"playlists/{plid}/tracks", ^^^^^^^^^^^^^^^^^^^^^^^^^^^ payload=ftracks, ^^^^^^^^^^^^^^^^ position=position, ^^^^^^^^^^^^^^^^^^ ) ^ File "/home/Pedr0-PC/spotipy-thing/.venv/lib/python3.13/site-packages/spotipy/client.py", line 326, in _post return self._internal_call("POST", url, payload, kwargs) ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/Pedr0-PC/spotipy-thing/.venv/lib/python3.13/site-packages/spotipy/client.py", line 291, in _internal_call raise SpotifyException( ...<5 lines>... ) spotipy.exceptions.SpotifyException: http status: 403, code: -1 - https://api.spotify.com/v1/playlists/6jZqnsWMfeSkfsApwDs8zW/tracks?position=1: Forbidden, reason: None
补充:这个播放列表确实是公开的
我的解答
嘿,我之前踩过几乎一模一样的坑!虽然你明确说播放列表是公开的,但403 Forbidden在这里的原因往往不止表面上的权限标识,咱们一步步拆解排查:
1. 优先排查:旧缓存的Token权限不匹配
你代码里指定了playlist-modify-public scope,但如果是第一次授权时没正确获取到这个权限,或者本地缓存的Token还是旧的(没有包含该权限),就会触发403。解决方法超简单:
- 删掉项目目录或用户根目录下的
.cache文件(Spotipy默认存在这里) - 重新运行代码,完成新一轮的OAuth授权流程
- 可以加一行代码验证当前Token的权限:
确保输出里包含token_info = sp.auth_manager.get_cached_token() print("当前Token权限:", token_info['scope'])playlist-modify-public
2. 确认播放列表的归属权
别慌,先确认这个播放列表6jZqnsWMfeSkfsApwDs8zW真的属于你当前授权的Spotify账号!哪怕是公开播放列表,如果你不是所有者(对方也没开协作权限),你根本没有修改权限。可以用这两行代码快速验证:
# 获取当前登录账号ID current_user_id = sp.current_user()['id'] # 获取播放列表的所有者ID playlist_owner_id = sp.playlist('6jZqnsWMfeSkfsApwDs8zW')['owner']['id'] print(f"当前账号ID:{current_user_id},播放列表所有者ID:{playlist_owner_id}")
如果两个ID不一致,要么找播放列表所有者开协作,要么换你自己的播放列表测试。
3. 检查Spotify开发者后台的应用配置
这也是容易忽略的点:
- 登录Spotify开发者后台,找到你创建的应用
- 检查「用户权限」列表里有没有勾选
playlist-modify-public——哪怕代码里写了,后台没加的话,授权时根本拿不到这个权限 - 检查「重定向URI」里有没有添加
http://localhost:8888/callback(Spotipy的默认重定向地址),URI不匹配也会导致权限校验失败
4. 小细节:Scope的格式问题
你代码里把Scope写成了列表["playlist-modify-public"],虽然Spotipy理论上支持列表,但有时候会出现解析异常。试试改成字符串格式:
scope = "playlist-modify-public"
或者干脆把私有播放列表的权限也加上(多备无患):
scope = "playlist-modify-public playlist-modify-private"
如果以上方法都试过还是不行,你可以把sp.playlist('6jZqnsWMfeSkfsApwDs8zW')的返回结果贴出来,咱们再深挖!
备注:内容来源于stack exchange,提问作者pedr0
相关产品推荐
相关产品推荐

