Spotify平台是否计划为第三方开发人员提供任何网络钩子,以监听用户库、播放列表或播放器中的变化?
如果网络钩子不存在,什么是已知的解决办法?
发布于 2018-07-28 08:40:39
Web中没有webhooks,我认为添加https://github.com/spotify/web-api/issues/538功能还需要很长一段时间。
Spotify上的播放列表由snapshot_id进行版本化。当您向得到一个播放列表发出API请求时,返回的字段之一是snapshot_id,它标识播放列表版本。如果为每个播放列表存储此版本ID,则可以检查播放列表自上次检查以来是否发生了远程更改(如果是的话,则snapshot_id将更改)。
重要的是要记住,您所做的任何更改也将影响snapshot_id。所以你需要:
snapshot_id与当前播放列表的不同吗?snapshot_id我认为用户库不支持snapshot_id --您可以检查用户库的一个子集,以检测任何添加的内容(例如,如果库中的前50首歌曲没有更改,那么就没有添加任何新的歌曲,您只需要发出一个API请求,而不是多个),但是如果只这样做,您将错过库的其他部分的删除。您还可以在库中检查歌曲的数量,这将告诉您何时添加或删除了歌曲,除非在添加和删除相同数量的歌曲的边缘情况下除外。但这意味着他们增加了一首歌,并且在库中检查前50首歌曲就可以捕捉到这一点。
您可以对当前正在播放的歌曲和最近播放的歌曲进行投票。如果要跟踪用户所听的每首歌曲,可以通过最近至少每隔30 *50秒(25分钟)播放一次轮询来实现这一点。30是听一首歌所需的秒数,然后Spotify将它记录为聆听,50是最近播放的歌曲的最大数量,它将为您服务。
发布于 2021-12-12 13:39:41
要知道某一曲目何时结束播放,我设置了一个等待函数,以等待该曲目的持续时间,然后在“等待”之后继续。
const delay = ms => new Promise(resolve => setTimeout(resolve, ms))
//start playing a track
let device_status = await spotifyApi.getMyCurrentPlaybackState().then(result =>{
return result.body;
})
let time_left = device_status.item.duration_ms - device_status.progress_ms;
await delay(time_left)
//whatever needs to be done afterhttps://stackoverflow.com/questions/51528806
复制相似问题