You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.13 18:14:30