如何通过Spotify Web API获取已登录用户的收听时长?
获取Spotify已登录用户收听时长的可行方案
我之前也碰到过这个棘手的问题——Spotify官方文档确实没提供直接获取收听时长的接口,但通过组合现有API完全能实现,那些已经做出来的网站也是用类似思路:
- 别再盯着
top items了:就像你发现的,top tracks/artists只返回用户的热门内容,既没有播放次数,还最多只能拿50条数据,根本没法用来计算准确的收听时长。 - 核心思路:用播放历史API:关键是调用
GET /v1/me/player/recently-played接口,这个接口能拿到用户的最近播放记录,是计算时长的基础。
具体操作步骤如下:
申请必备的授权权限
你的应用必须获得user-read-recently-played这个OAuth scope的授权,这是访问用户播放历史的前提,在授权流程里一定要加上这个权限。分页拉取完整的播放历史
这个接口默认返回20条记录,通过limit=50参数可以一次获取最多50条。要拿到更早的记录,就用after参数(传入上一轮请求里最早的那条记录的played_at毫秒时间戳)来分页请求,直到接口返回空数据,这样就能获取到所有可用的播放历史。计算单条记录的实际收听时长
每条播放记录里包含曲目的总时长(track.duration_ms)和播放时间(played_at)。判断实际收听时长的逻辑:- 对比当前记录和下一条记录的
played_at时间差:如果这个差值小于曲目总时长,说明用户中途切歌了,实际收听时长就取这个时间差。 - 如果是最后一条记录,或者时间差大于等于曲目总时长,就默认用户完整听完了这首歌,用
track.duration_ms作为收听时长。
- 对比当前记录和下一条记录的
累加得到总收听时长
把所有单条记录的实际收听时长加起来,就是用户的总收听时长了。
另外要提醒的是,Spotify的API对播放历史的保留时间有限制(一般是最近几个月),如果要获取更长期的历史,可能需要引导用户去账号设置里的「下载你的数据」功能手动导出扩展播放历史,再做离线解析,但这属于额外的离线处理范畴了。
内容的提问来源于stack exchange,提问作者xeroter823
相关产品推荐
相关产品推荐

