如何用Spotipy获取超过50条Spotify最近播放曲目?
问题
我用Spotipy和Spotify API做了个仪表盘,用来展示主播放列表和最近播放歌曲的相关指标。大部分接口都有50条结果的限制,提取播放列表内容时我用next循环拿到了后续结果,但获取最近播放曲目时这方法不管用——明明有next URL,但返回的内容是空的。我不确定是真的拿不到超过50条数据,还是操作错了,求帮忙。
当前代码:
recently_played = sp_login.current_user_recently_played() def get_recent_tracks(sp_login, n_tracks): results = sp_login.current_user_recently_played() tracks = get_tracks_id(results['items']) dates = get_date_played(results['items']) while results['next'] and len(tracks) < n_tracks: results = sp_login.next(results) tracks.extend(get_tracks_id(results['items'])) dates.extend(get_date_played(results['items'])) return tracks, dates def get_tracks_id(tracks): track_ids = [] for item in tracks: track_ids.append(item['track']['id']) return track_ids def get_date_played(tracks): dates_played = [] for item in tracks: dates_played.append(item['played_at']) return dates_played all_tracks, dates_played = get_recent_tracks(sp_login, 300)
单独执行以下代码:
results = sp_login.current_user_recently_played() sp_login.next(results)
得到输出:
{'items': [],
'next': None,
'cursors': None,
'limit': 50,
'href': 'https://api.spotify.com/v1/me/player/recently-played?before=1659536402173&limit=50'}
解决方案
这不是你的代码问题,是Spotify API本身的限制:current_user_recently_played接口最多只能返回用户最近的50条播放记录,Spotify官方只保留这么多的近期播放数据供API调用。
你调用sp_login.next(results)返回空items,就是因为没有更多可获取的数据了。如果需要超过50条的历史播放记录,Spotify没有提供对应的公开API接口,只能通过用户自己的账户数据导出功能(在Spotify账户设置里)来获取完整的播放历史。
内容的提问来源于stack exchange,提问作者Hugo Torres
相关产品推荐
相关产品推荐

