如何使用 Spotify Web API 制作音频播放器?
How do I make an audio player with the Spotify Web API?
我试图从一个播放按钮开始制作一个音频播放器。在我的 HTMl 代码中,我制作了一个按钮:
<a href="#" id="play" alt="animate" class="btnstyle">Play</a>
然后我用这段代码让它播放了一首歌,但似乎不起作用。
document.getElementById('play').addEventListener('click', function() {
$.ajax({
url: 'https://api.spotify.com/v1/me/player/play',
type: 'PUT',
headers: {
'Authorization': 'Bearer ' + access_token
},
dataType: "json",
contentType: "application/json",
data: JSON.stringify({
"uris": ["spotify:track:"] + apiData.item.id,
"position_ms": apiData.progress_ms
})
});
});
apiData.item.id指当前播放曲目的id
apiData.progress_ms指的是当前播放曲目的进度,以毫秒为单位。
当我 运行 我的代码并点击播放按钮时,没有任何反应。我不知道我做错了什么。
但我尝试通过首先制作一个名为 'pause' 的 id 按钮来制作暂停按钮。然后我做了以下事情:
document.getElementById('pause').addEventListener('click', function() {
$.ajax({
url: 'https://api.spotify.com/v1/me/player/pause',
type: 'PUT',
headers: {
'Authorization': 'Bearer ' + access_token
},
dataType: "json",
contentType: "application/json",
data: JSON.stringify({
"uris": ["spotify:track:"] + apiData.item.id,
"position_ms": apiData.progress_ms
})
});
});
这确实有效!但我不明白为什么播放按钮不起作用而暂停按钮起作用。
这是我用于两个按钮的文档:
https://developer.spotify.com/documentation/web-api/reference/player/start-a-users-playback/
https://developer.spotify.com/documentation/web-api/reference/player/pause-a-users-playback/
对于播放按钮,我在控制台日志中收到此错误:
error 400
有人可以帮我吗?
tl;dr:此答案底部的工作片段!
uris
字段采用包含 Spotify uris 的数组。此 "uris": ["spotify:track:"] + apiData.item.id
不解析为数组,而是解析为不是端点等待的字符串。因此,使用 [`spotify:track:${id}`]
将起作用。
This 片段显示了两者之间的区别。
console.log(["spotify:track:"] + id);
// Output with id = 1234: "spotify:track:1234" -> String
console.log([`spotify:track:${id}`]);
// Output with id = 1234: ["spotify:track:1234"] -> Array of strings
停止按钮起作用的原因是 Spotify 的 pause
端点不使用您传入的任何数据。pause
端点只有一个名为 [=18= 的可选查询参数].因此,您传递的数据将被忽略。因此可以简化 Ajax 暂停调用,如以下代码片段所示。
这里有两个工作片段,假设使用的访问令牌具有 user-modify-playback-state
范围授权。
播放
$.ajax({
url: 'https://api.spotify.com/v1/me/player/play',
type: 'PUT',
headers: {
'Authorization': 'Bearer ' + access_token
},
dataType: "json",
contentType: "application/json",
data: JSON.stringify({
"uris": [`spotify:track:${apiData.item.id}`],
"position_ms": apiData.progress_ms
})
});
暂停
$.ajax({
url: 'https://api.spotify.com/v1/me/player/pause',
type: 'PUT',
headers: {
'Authorization': 'Bearer ' + access_token
}
});
我试图从一个播放按钮开始制作一个音频播放器。在我的 HTMl 代码中,我制作了一个按钮:
<a href="#" id="play" alt="animate" class="btnstyle">Play</a>
然后我用这段代码让它播放了一首歌,但似乎不起作用。
document.getElementById('play').addEventListener('click', function() {
$.ajax({
url: 'https://api.spotify.com/v1/me/player/play',
type: 'PUT',
headers: {
'Authorization': 'Bearer ' + access_token
},
dataType: "json",
contentType: "application/json",
data: JSON.stringify({
"uris": ["spotify:track:"] + apiData.item.id,
"position_ms": apiData.progress_ms
})
});
});
apiData.item.id指当前播放曲目的id apiData.progress_ms指的是当前播放曲目的进度,以毫秒为单位。
当我 运行 我的代码并点击播放按钮时,没有任何反应。我不知道我做错了什么。
但我尝试通过首先制作一个名为 'pause' 的 id 按钮来制作暂停按钮。然后我做了以下事情:
document.getElementById('pause').addEventListener('click', function() {
$.ajax({
url: 'https://api.spotify.com/v1/me/player/pause',
type: 'PUT',
headers: {
'Authorization': 'Bearer ' + access_token
},
dataType: "json",
contentType: "application/json",
data: JSON.stringify({
"uris": ["spotify:track:"] + apiData.item.id,
"position_ms": apiData.progress_ms
})
});
});
这确实有效!但我不明白为什么播放按钮不起作用而暂停按钮起作用。 这是我用于两个按钮的文档: https://developer.spotify.com/documentation/web-api/reference/player/start-a-users-playback/ https://developer.spotify.com/documentation/web-api/reference/player/pause-a-users-playback/
对于播放按钮,我在控制台日志中收到此错误: error 400
有人可以帮我吗?
tl;dr:此答案底部的工作片段!
uris
字段采用包含 Spotify uris 的数组。此 "uris": ["spotify:track:"] + apiData.item.id
不解析为数组,而是解析为不是端点等待的字符串。因此,使用 [`spotify:track:${id}`]
将起作用。
This 片段显示了两者之间的区别。
console.log(["spotify:track:"] + id);
// Output with id = 1234: "spotify:track:1234" -> String
console.log([`spotify:track:${id}`]);
// Output with id = 1234: ["spotify:track:1234"] -> Array of strings
停止按钮起作用的原因是 Spotify 的 pause
端点不使用您传入的任何数据。pause
端点只有一个名为 [=18= 的可选查询参数].因此,您传递的数据将被忽略。因此可以简化 Ajax 暂停调用,如以下代码片段所示。
这里有两个工作片段,假设使用的访问令牌具有 user-modify-playback-state
范围授权。
播放
$.ajax({
url: 'https://api.spotify.com/v1/me/player/play',
type: 'PUT',
headers: {
'Authorization': 'Bearer ' + access_token
},
dataType: "json",
contentType: "application/json",
data: JSON.stringify({
"uris": [`spotify:track:${apiData.item.id}`],
"position_ms": apiData.progress_ms
})
});
暂停
$.ajax({
url: 'https://api.spotify.com/v1/me/player/pause',
type: 'PUT',
headers: {
'Authorization': 'Bearer ' + access_token
}
});