Linux命令行播放Spotify歌曲遇403错误(高级用户)
问题根源
你用的client_credentials授权模式是给服务器端应用设计的,这种模式下拿到的token不关联任何个人用户账号——哪怕你是高级用户,这个token也没有你的账号权限,自然无法调用/me/player/play这种需要用户上下文的播放接口。
修复方案
必须改用**Authorization Code Flow(带PKCE)**来获取token,这种模式会让token关联你的个人高级账号,从而获得播放权限。
1. Bash脚本修正版
先在Spotify开发者后台把应用的重定向URI设为http://localhost:8888/callback,再使用下面的脚本:
#!/bin/bash TRACK_ID="0hCB0YR03f65y1YKr59OSs" # Zeppelin CLIENT_ID="你的客户端ID" REDIRECT_URI="http://localhost:8888/callback" # 生成PKCE验证参数 CODE_VERIFIER=$(openssl rand -hex 32) CODE_CHALLENGE=$(echo -n "$CODE_VERIFIER" | sha256sum | cut -d' ' -f1 | xxd -r -p | base64 | tr '+/' '-_' | tr -d '=') # 输出授权链接,需用户在浏览器中打开完成授权 echo "请在浏览器打开以下链接完成授权:" echo "https://accounts.spotify.com/authorize?client_id=$CLIENT_ID&response_type=code&redirect_uri=$REDIRECT_URI&code_challenge_method=S256&code_challenge=$CODE_CHALLENGE&scope=user-modify-playback-state%20user-read-playback-state" # 等待用户输入回调URL中的code参数 read -p "请输入回调地址中的code值:" AUTH_CODE # 获取关联用户的token TOKEN_RESPONSE=$(curl -X POST "https://accounts.spotify.com/api/token" \ -H "Content-Type: application/x-www-form-urlencoded" \ -d "grant_type=authorization_code&client_id=$CLIENT_ID&code=$AUTH_CODE&redirect_uri=$REDIRECT_URI&code_verifier=$CODE_VERIFIER") ACCESS_TOKEN=$(echo "$TOKEN_RESPONSE" | jq -r '.access_token') # 调用播放接口 curl -s -X "PUT" "https://api.spotify.com/v1/me/player/play" \ --data "{\"uris\": [\"spotify:track:$TRACK_ID\"]}" \ -H "Accept: application/json" \ -H "Content-Type: application/json" \ -H "Authorization: Bearer ${ACCESS_TOKEN}"
2. Spotipy的修正写法
同样要改用Authorization Code Flow,而非Client Credentials:
import spotipy from spotipy.oauth2 import SpotifyOAuth sp = spotipy.Spotify(auth_manager=SpotifyOAuth( client_id="你的客户端ID", client_secret="你的客户端密钥", redirect_uri="http://localhost:8888/callback", scope="user-modify-playback-state user-read-playback-state" )) # 开始播放指定曲目 sp.start_playback(uris=["spotify:track:0hCB0YR03f65y1YKr59OSs"])
注意事项
- 授权时必须勾选
user-modify-playback-state和user-read-playback-state权限,否则仍会出现权限不足的问题 - 确保设备已安装
openssl、jq(Bash脚本依赖)和Spotipy库(Python脚本依赖) - 播放前要保证有一个活跃的Spotify播放器(比如桌面客户端、网页端或手机端处于在线状态)
内容的提问来源于stack exchange,提问作者jjk
相关产品推荐
相关产品推荐

