树莓派4无桌面环境下Spotipy API无法验证Spotify凭据
解决无桌面Raspbian树莓派上Spotipy授权失败(code must be supplied)的问题
问题根源
无桌面环境下,Spotify OAuth网页授权流程无法自动完成(无浏览器打开),且未手动传入授权code,导致报错。Windows上因安装了Spotify应用,采用了应用内授权的方式,无需网页跳转,所以正常运行。
解决步骤
1. 确认Redirect URI配置一致性
- 确保Spotify开发者后台中,你的应用已添加与环境变量
SPOTIPY_REDIRECT_URI完全一致的URI(建议使用http://localhost:8888/callback,这是Spotipy的默认推荐值) - 在树莓派终端验证环境变量是否正确加载:
echo $SPOTIPY_CLIENT_ID echo $SPOTIPY_CLIENT_SECRET echo $SPOTIPY_REDIRECT_URI
2. 修改授权代码,支持手动输入授权code
修改你的授权函数,添加手动获取授权code的逻辑,让脚本引导你完成授权流程:
import spotipy from spotipy.oauth2 import SpotifyOAuth def authorize(): scope = 'playlist-modify-public' username = 'xxxxxxxxxxxxxxxxxxxxxxxxxx' sp_oauth = SpotifyOAuth(scope=scope, username=username, open_browser=False) # 优先使用缓存的token(避免重复授权) token_info = sp_oauth.get_cached_token() if not token_info: # 生成授权URL auth_url = sp_oauth.get_authorize_url() print(f"请在任意有浏览器的设备(如你的Windows电脑)中打开以下URL并完成登录授权:") print(auth_url) # 提示输入授权后回调URL中的code参数 response_code = input("\n请复制授权后URL中'code='后面的字符串并输入:") # 通过code获取token token_info = sp_oauth.get_access_token(response_code) return sp_oauth spotifyObject = spotipy.Spotify(auth_manager=authorize())
3. 执行授权流程
- 在树莓派终端运行修改后的脚本
- 复制输出的授权URL,在Windows电脑的浏览器中打开,登录你的Spotify账号并授权
- 授权成功后,浏览器会跳转到你设置的Redirect URI(即使localhost无法访问也没关系),复制URL中
code=后面的所有字符(注意不要包含后续的&state=等参数) - 将复制的code粘贴到树莓派终端的输入框中,回车确认
关键说明
- 第一次授权后,Spotipy会在本地生成缓存文件(
.cache-<username>),后续运行脚本会自动读取缓存的token,无需重复授权 - 若后续出现token过期问题,脚本会自动触发刷新流程,无需手动干预
内容的提问来源于stack exchange,提问作者anandprabhu95
相关产品推荐
相关产品推荐

