You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.23 08:09:24