Spotify授权报错invalid_client:Python转存喜欢歌曲至播放列表故障求助
问题背景
原本运行正常的Python程序,功能是将Spotify账号中所有喜欢的歌曲转移到指定播放列表,现在触发invalid_client授权错误,尝试新建Spotify应用后问题仍未解决。
程序代码
import spotipy from spotipy.oauth2 import SpotifyOAuth from app import app def transfer_tracks(destination_playlist_uri): sp = spotipy.Spotify(auth_manager=SpotifyOAuth(client_id='id', client_secret='secret', redirect_uri='redirect_uri', scope='user-library-read playlist-modify-public')) # Retrieve the total count of liked tracks saved_tracks = sp.current_user_saved_tracks(limit=1) total_tracks = saved_tracks['total'] # Set the batch size for pagination batch_size = 20 offset = 0 while offset < total_tracks: results = sp.current_user_saved_tracks(limit=batch_size, offset=offset) track_uris = [item['track']['uri'] for item in results['items']] # Add the track URIs to the destination playlist destination_playlist_id = destination_playlist_uri.split('/')[-1] sp.playlist_add_items(destination_playlist_id, track_uris) offset += batch_size print("All tracks transferred to the destination playlist!") # Set the URIs for the destination playlist destination_playlist_uri = 'https://open.spotify.com/playlist/playlist-id' # Call the transfer_tracks function transfer_tracks(destination_playlist_uri) # Run the Flask server if __name__ == '__main__': app.run(port=8080)
错误信息
raise HTTPError(http_error_msg, response=self) requests.exceptions.HTTPError: 400 Client Error: Bad Request for url: https://accounts.spotify.com/api/token 在处理上述异常期间,又触发了另一个异常: raise SpotifyOauthError( spotipy.oauth2.SpotifyOauthError: error: invalid_client, error_description: Invalid client
排查与解决步骤
核对Client ID和Client Secret:
确保代码中client_id和client_secret替换为Spotify Dashboard对应应用的真实值,无多余空格、引号或字符遗漏,复制时需完整选取。匹配Redirect URI:
代码中的redirect_uri必须与Spotify Dashboard应用设置里的「Redirect URIs」完全一致,包括协议(http/https)、域名、端口和路径,比如本地开发常用http://localhost:8080/callback,需在Dashboard中精确添加。确认应用状态与权限:
在Spotify Dashboard中,将应用状态设置为「已发布」(测试应用也需此操作),同时检查权限范围是否包含user-library-read和playlist-modify-public,若操作私有播放列表需额外添加playlist-modify-private。清理授权缓存:
删除Spotipy生成的本地缓存文件(通常为项目目录下的.cache文件),清除旧的无效授权数据后重新运行程序,触发新的授权流程。改用环境变量管理敏感信息:
避免硬编码敏感信息,通过环境变量传递参数,示例代码:import os sp = spotipy.Spotify(auth_manager=SpotifyOAuth( client_id=os.getenv('SPOTIFY_CLIENT_ID'), client_secret=os.getenv('SPOTIFY_CLIENT_SECRET'), redirect_uri=os.getenv('SPOTIFY_REDIRECT_URI'), scope='user-library-read playlist-modify-public' ))在系统或项目环境中设置对应变量,减少复制错误概率。
验证授权流程:
运行程序后,确认能正常跳转至Spotify授权页面,登录后回调至设置的Redirect URI,本地开发需确保Flask服务在指定端口正常运行。
内容的提问来源于stack exchange,提问作者Timur

