Spotify 网络挂钩?
Spotify Webhooks?
Spotify 平台是否计划为第三方开发者提供任何 webhook 来监听用户库、播放列表或播放器的变化?
如果 webhook 不存在,有哪些已知的解决方法?
Web 中没有 webhooks API 我认为添加该功能还需要一段时间 https://github.com/spotify/web-api/issues/538
Spotify 上的播放列表由 snapshot_id
进行版本控制。当您向 get a playlist 发出 API 请求时,返回的字段之一是 snapshot_id
,它标识播放列表版本。如果您为每个播放列表存储此版本 ID,您可以检查自上次检查以来播放列表是否已远程更改(如果是,snapshot_id
会更改)
请务必记住,您所做的任何更改也会影响 snapshot_id
。所以你需要:
- 获取播放列表
- 您本地保存的
snapshot_id
与当前播放列表的不同吗?
- 如果是这样,可能会做一些改变
- 进行更改后,再次获取播放列表
- 更改后从“获取播放列表”存储
snapshot_id
我认为 snapshot_id
不支持用户的图书馆 - 您可以检查用户图书馆的子集以检测任何 添加 (例如,如果第一个库中的 50 首歌曲没有更改,则没有添加新歌曲,您只需提出一个 API 请求而不是无数首),但如果您只做这个。您还可以检查库中的歌曲数量,这会告诉您何时添加或删除了歌曲,除非在极端情况下添加和删除的歌曲数量相同。但这意味着他们添加了一首歌曲,检查曲库中的前 50 首歌曲就会发现这一点。
您可以轮询当前正在播放和最近播放的歌曲。如果您想跟踪用户收听的每一首歌曲,您可以通过至少每 30 * 50 秒(25 分钟)轮询最近播放一次来实现。 30 是在 Spotify 将歌曲记录为 Listen 之前收听歌曲所需的秒数,50 是它将为您服务的最近播放歌曲的最大数量。
为了知道一首曲目何时播放完毕,我设置了一个等待函数来等待该曲目的持续时间,然后在播放结束后继续
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 after
Spotify 平台是否计划为第三方开发者提供任何 webhook 来监听用户库、播放列表或播放器的变化?
如果 webhook 不存在,有哪些已知的解决方法?
Web 中没有 webhooks API 我认为添加该功能还需要一段时间 https://github.com/spotify/web-api/issues/538
Spotify 上的播放列表由 snapshot_id
进行版本控制。当您向 get a playlist 发出 API 请求时,返回的字段之一是 snapshot_id
,它标识播放列表版本。如果您为每个播放列表存储此版本 ID,您可以检查自上次检查以来播放列表是否已远程更改(如果是,snapshot_id
会更改)
请务必记住,您所做的任何更改也会影响 snapshot_id
。所以你需要:
- 获取播放列表
- 您本地保存的
snapshot_id
与当前播放列表的不同吗? - 如果是这样,可能会做一些改变
- 进行更改后,再次获取播放列表
- 更改后从“获取播放列表”存储
snapshot_id
我认为 snapshot_id
不支持用户的图书馆 - 您可以检查用户图书馆的子集以检测任何 添加 (例如,如果第一个库中的 50 首歌曲没有更改,则没有添加新歌曲,您只需提出一个 API 请求而不是无数首),但如果您只做这个。您还可以检查库中的歌曲数量,这会告诉您何时添加或删除了歌曲,除非在极端情况下添加和删除的歌曲数量相同。但这意味着他们添加了一首歌曲,检查曲库中的前 50 首歌曲就会发现这一点。
您可以轮询当前正在播放和最近播放的歌曲。如果您想跟踪用户收听的每一首歌曲,您可以通过至少每 30 * 50 秒(25 分钟)轮询最近播放一次来实现。 30 是在 Spotify 将歌曲记录为 Listen 之前收听歌曲所需的秒数,50 是它将为您服务的最近播放歌曲的最大数量。
为了知道一首曲目何时播放完毕,我设置了一个等待函数来等待该曲目的持续时间,然后在播放结束后继续
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 after