Spotify API访问私有播放列表触发404异常,捕获无效求助
解决Spotipy访问私有播放列表触发404异常的思路
1. 确认异常捕获的代码逻辑
你说捕获SpotifyException和HTTPError无效,大概率是捕获范围没覆盖到playlist_tracks的调用,或者写法有误。正确的捕获方式要把API调用包裹在try-except块里,且优先捕获SpotifyException(Spotipy会把底层HTTPError包装成自身异常抛出):
from spotipy.exceptions import SpotifyException try: # 替换成你的playlist_tracks调用代码 tracks = session.playlist_tracks(playlist_id_or_link) except SpotifyException as e: if e.http_status == 404: print("无法访问该播放列表:可能是私有列表权限不足、ID错误或列表已被删除") else: print(f"API请求出错:{e}") except Exception as e: # 兜底捕获其他未预料的异常 print(f"程序出错:{e}")
2. 检查私有播放列表的授权权限
访问私有播放列表必须在授权时添加对应scope:
playlist-read-private:读取自己的私有播放列表playlist-read-collaborative:读取协作播放列表
如果创建Spotipy会话时没加这些scope,Spotify API可能返回404(权限错误有时会伪装成404)。修改授权代码:
import spotipy from spotipy.oauth2 import SpotifyOAuth # 包含所需权限的scope scope = "playlist-read-private playlist-read-collaborative" session = spotipy.Spotify(auth_manager=SpotifyOAuth( scope=scope, client_id="你的客户端ID", client_secret="你的客户端密钥", redirect_uri="你的回调地址" ))
3. 确认播放列表ID提取正确
playlist_tracks方法需要的是播放列表ID,而非完整的Spotify链接。直接传整个链接会导致Spotipy无法正确解析,触发404。可以用以下函数提取ID:
def extract_playlist_id(playlist_link): # 处理网页链接格式:https://open.spotify.com/playlist/xxxx?si=xxxx if "open.spotify.com/playlist/" in playlist_link: return playlist_link.split("/playlist/")[1].split("?")[0] # 处理URI格式:spotify:playlist:xxxx elif "spotify:playlist:" in playlist_link: return playlist_link.split(":")[-1] else: raise ValueError("请输入有效的Spotify播放列表链接或URI") # 使用示例 playlist_link = "你粘贴的私有播放列表链接" playlist_id = extract_playlist_id(playlist_link) tracks = session.playlist_tracks(playlist_id)
4. 调试验证
- 打印提取后的
playlist_id,确认和播放列表实际ID一致(Spotify客户端右键播放列表→分享→复制链接,查看中间的ID部分) - 用curl或Postman直接调用
GET /v1/playlists/{playlist_id}/tracks端点,使用程序中的token,查看返回的具体错误信息,精准定位问题
内容的提问来源于stack exchange,提问作者Tom Mansbridge
相关产品推荐
相关产品推荐

