Spotipy current_user_playlists()仅返回公开播放列表,无法获取全部列表
问题解决:无法获取Spotify用户创建及关注的全部播放列表
问题现象
调用sp.current_user_playlists()仅能获取公开个人资料的播放列表,移除公开列表后无任何返回;需要获取用户创建的所有播放列表(含私有、协作)以及关注的播放列表。
代码现状
获取播放列表的函数:
def getPlaylists(): session[TOKEN_INFO], authorized = get_token() session.modified = True if not authorized: return redirect('/') sp = spotipy.Spotify(auth=session.get('token_info').get('access_token')) return sp.current_user_playlists()
授权配置代码:
def create_oauth(): return SpotifyOAuth( client_id=client_id, client_secret=client_secret, redirect_uri=url_for('redirectPage', _external=True), scope='playlist-read-private' )
解决步骤
1. 补充授权权限范围
当前仅使用playlist-read-private权限,无法获取协作播放列表和关注的播放列表,需要更新scope:
def create_oauth(): return SpotifyOAuth( client_id=client_id, client_secret=client_secret, redirect_uri=url_for('redirectPage', _external=True), scope='playlist-read-private playlist-read-collaborative user-follow-read' )
playlist-read-collaborative:获取用户参与的协作播放列表user-follow-read:获取用户关注的播放列表
2. 分别获取用户自有播放列表和关注的播放列表
current_user_playlists()仅返回用户自己创建的播放列表(含私有、协作,需对应权限),关注的播放列表需要调用current_user_followed_playlists()单独获取,同时处理API分页返回:
def getPlaylists(): session[TOKEN_INFO], authorized = get_token() session.modified = True if not authorized: return redirect('/') sp = spotipy.Spotify(auth=session.get('token_info').get('access_token')) # 获取用户自有播放列表(含私有、协作) own_playlists = [] results = sp.current_user_playlists() while results: own_playlists.extend(results['items']) results = sp.next(results) if results['next'] else None # 获取用户关注的播放列表 followed_playlists = [] results = sp.current_user_followed_playlists(limit=50) while results: followed_playlists.extend(results['items']) results = sp.next(results) if results['next'] else None # 合并所有播放列表 all_playlists = own_playlists + followed_playlists return all_playlists
3. 注意事项
- 更新权限后,需要让用户重新授权,否则旧的token不会包含新增的权限
- 处理分页是因为Spotify API默认每页返回最多50条数据,需循环获取直到没有下一页
内容的提问来源于stack exchange,提问作者tommy
相关产品推荐
相关产品推荐

