无桌面树莓派2W运行Spotipy遭遇SpotifyOauthError问题求助
问题原因及解决方法
原因分析
- 重定向URI不匹配:Spotify OAuth要求开发者后台配置的重定向URI必须和脚本中使用的完全一致。电脑上运行脚本时默认使用
http://localhost:8888/callback,但如果你的Spotify应用后台未添加该URI,或树莓派脚本未显式指定,就会触发"Invalid redirect URI"错误。 - 授权上下文不一致:电脑上生成的授权码与当前OAuth实例参数绑定,若树莓派上的
SpotifyOAuth实例参数(尤其是redirect_uri)和电脑不一致,使用同一授权码会被判定为无效授权(invalid_grant)。 - 缓存文件问题:电脑运行后生成的
.cache-<用户名>缓存文件,若直接拷贝到树莓派,可能存在路径权限问题,或缓存内的重定向URI信息与树莓派环境不匹配,导致token验证失败。
解决方法
1. 统一重定向URI配置
- 登录Spotify开发者控制台,找到你的应用,在Redirect URIs列表中添加
http://localhost:8888/callback并保存。 - 在脚本中显式指定
redirect_uri参数,确保电脑和树莓派脚本配置一致:spotify_user = os.environ.get("SPOTIPY_CLIENT_USERNAME") spotify_scope = "playlist-modify-private,user-read-currently-playing,user-modify-playback-state,user-read-playback-state" oauth = SpotifyOAuth( username=spotify_user, scope=spotify_scope, open_browser=False, redirect_uri="http://localhost:8888/callback" # 显式指定统一重定向URI ) user_token = oauth.get_access_token(as_dict=False) spotify = spotipy.Spotify(auth=user_token)
2. 正确传递授权URI
- 在电脑上运行脚本,当控制台提示输入授权URI时,复制完整的回调URI(格式类似
http://localhost:8888/callback?code=xxxxxx)。 - 在树莓派上运行脚本,出现输入授权URI的提示时,粘贴刚才复制的完整URI,确保
code参数无遗漏或错误。
3. 处理缓存文件(可选,实现免重复授权)
- 将电脑脚本运行目录生成的
.cache-<你的用户名>文件拷贝到树莓派脚本运行目录,确保树莓派运行用户拥有该文件的读取权限。 - 或手动在树莓派创建该缓存文件,复制电脑缓存中的
access_token、refresh_token、expires_at等字段内容,保持JSON格式正确。
4. 核对环境变量
- 确认树莓派上的
SPOTIPY_CLIENT_ID、SPOTIPY_CLIENT_SECRET、SPOTIPY_CLIENT_USERNAME环境变量和电脑上完全一致,无拼写错误或遗漏。
内容的提问来源于stack exchange,提问作者Kaloschke
相关产品推荐
相关产品推荐

