Spotify API持续弹出"Passed URL contains no parameter"错误求助
Spotify Tekore 授权报错与代码修复方案
问题总结
使用Python 3.9 + Tekore 4.5.0对接Spotify API时,授权后粘贴重定向URI触发错误,授权信息未保存,且播放操作无法执行。已在Spotify开发者控制台添加多个重定向URI白名单,问题仍存在。
代码中的核心问题
- 逻辑顺序错误:首次运行时
tekore.cfg文件尚未生成,直接调用tk.config_from_file会抛出文件不存在的异常。 - 未定义变量:代码中直接使用
album变量,但未提前获取或定义,触发NameError。 - 重定向URI使用错误:授权后需要粘贴完整的跳转后的URI(包含code参数),而非仅原重定向地址。
- 令牌混用:初始创建的
spotify实例使用客户端令牌,无用户播放权限;获取用户令牌后未重新绑定到spotify实例,导致播放操作失败。 - 作用域过度请求:
tk.scope.every包含大量不必要权限,部分权限需Spotify审核,易引发授权异常。
修正后的代码
import tekore as tk # 填入你的Spotify开发者信息 client_id = '你的Client ID' client_secret = '你的Client Secret' redirect_uri = 'https://youtube.com' # 确保已在开发者控制台添加此URI # 仅请求必要的权限,比如播放控制 required_scopes = tk.scope.playback_modify + tk.scope.playback_read + tk.scope.user_read_private try: # 尝试从配置文件读取刷新令牌,实现自动刷新 conf = tk.config_from_file('tekore.cfg', return_refresh=True) user_token = tk.refresh_user_token(client_id, client_secret, conf[3]) except FileNotFoundError: # 首次运行,引导用户授权 user_token = tk.prompt_for_user_token( client_id, client_secret, redirect_uri, scope=required_scopes ) # 保存授权信息到配置文件 conf = (client_id, client_secret, redirect_uri, user_token.refresh_token) tk.config_to_file('tekore.cfg', conf) # 使用用户令牌初始化Spotify实例 spotify = tk.Spotify(user_token) # 示例:获取用户最近播放的专辑(替换为你的业务逻辑) try: recent = spotify.current_user_recently_played(limit=1) if recent.items: album = recent.items[0].track.album print(f"当前专辑:{album.name}") for track in album.tracks.items: print(track.track_number, track.name) except tk.HTTPError as e: print(f"API请求错误:{e}") # 播放指定曲目(确保设备已登录Spotify且处于活跃状态) try: spotify.playback_start_tracks(['2Gt7fjNlx901pPRkvBiNBZ']) print("播放已启动") except tk.HTTPError as e: print(f"播放失败:{e}")
关键修复点说明
- 授权流程优化:先尝试读取配置文件,不存在再引导授权,避免首次运行报错。
- 权限最小化:仅请求播放相关的必要权限,降低授权失败概率。
- 令牌正确绑定:用用户令牌初始化
spotify实例,确保拥有用户级操作权限。 - 错误捕获:添加
try-except块处理API请求异常,便于排查问题。 - 播放参数修正:
playback_start_tracks接受曲目ID列表,无需携带?si=xxx参数。
额外注意事项
- 授权时需复制浏览器地址栏中完整的跳转URL(包含
code参数)粘贴到终端,而非仅原重定向URI。 - 确保Spotify开发者控制台中,重定向URI与代码中完全一致(包括协议、域名,无多余空格)。
- 播放操作需要目标设备已登录对应Spotify账户,且处于在线/活跃状态。
内容的提问来源于stack exchange,提问作者Keamon
相关产品推荐
相关产品推荐

