通过按钮发送命令播放曲目
Sending command to play track through button
我目前正在做一个学校项目,我想让 Spotify 在网站上按下按钮时在特定位置播放特定歌曲,我创建了一个按钮,当按下按钮时播放以下事件按下:
document.getElementById('play-song').addEventListener('click', function() {
$.ajax({
POST: 'https://api.spotify.com/v1/me/player/play',
headers: {
'Authorization': 'Bearer ' + access_token
},
data: {
'context_uri' : 'spotify:track:2iCcqggir1VUNIHfKDYKX9',
'position_ms' : 5000
}
})
}, false);
但是每当我按下按钮时,什么也没有发生,控制台没有错误,我的 Spotify 也没有播放这首歌。我是不是做错了什么?
此代码的文档可在此处找到:https://developer.spotify.com/documentation/web-api/reference/player/start-a-users-playback/
我认为 .then() 对你有用
document.getElementById('play-song').addEventListener('click', function() {
$.ajax({
POST: 'https://api.spotify.com/v1/me/player/play',
headers: {
'Authorization': 'Bearer ' + access_token
},
data: {
'context_uri' : 'spotify:track:2iCcqggir1VUNIHfKDYKX9',
'position_ms' : 5000
}}).then(function(data) {
if (data) {
// do other stuff
} else {
// do other stuff
}});
}, false);
tl;dr:此答案底部的工作片段!
您使用 $.ajax()
的方式与 Spotify 端点的工作方式不一致。您的代码段正在生成 GET
请求。尽管文档声明您要使用的端点需要 PUT
。正如您在代码片段中看到的那样,这是通过使用 type: 'PUT'
修复的。为了传递 URL,使用 url
键。
使用data
是正确的选择,尽管有些东西遗漏了。如果您像发布一样使用它,则数据将作为表单数据传输。这不是 Spotify 端点所期望的。您实际上需要在请求负载中传输数据。这是通过使用 dataType: "json"
& contentType: "application/json"
实现的。对数据使用 JSON.stringify()
也解决了与此问题相关的一些问题。
在请求负载中,您使用了 context_uri
字段。这就是 Spotify 描述 context_uri
字段的方式。
Optional. Spotify URI of the context to play. Valid contexts are albums, artists, playlists.
因此,轨道不是上下文。因此,如果您想播放曲目,这不是您想要的领域。在您的情况下,需要 uris
。这就是 Spotify 描述 uris
字段的方式。
Optional. A JSON array of the Spotify track URIs to play.
当只播放一首曲目时,仍然需要一个数组,如您在代码片段中所见。
在这里您可以找到我修复您的 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:2iCcqggir1VUNIHfKDYKX9"],
"position_ms": 5000
})
});
我目前正在做一个学校项目,我想让 Spotify 在网站上按下按钮时在特定位置播放特定歌曲,我创建了一个按钮,当按下按钮时播放以下事件按下:
document.getElementById('play-song').addEventListener('click', function() {
$.ajax({
POST: 'https://api.spotify.com/v1/me/player/play',
headers: {
'Authorization': 'Bearer ' + access_token
},
data: {
'context_uri' : 'spotify:track:2iCcqggir1VUNIHfKDYKX9',
'position_ms' : 5000
}
})
}, false);
但是每当我按下按钮时,什么也没有发生,控制台没有错误,我的 Spotify 也没有播放这首歌。我是不是做错了什么?
此代码的文档可在此处找到:https://developer.spotify.com/documentation/web-api/reference/player/start-a-users-playback/
我认为 .then() 对你有用
document.getElementById('play-song').addEventListener('click', function() {
$.ajax({
POST: 'https://api.spotify.com/v1/me/player/play',
headers: {
'Authorization': 'Bearer ' + access_token
},
data: {
'context_uri' : 'spotify:track:2iCcqggir1VUNIHfKDYKX9',
'position_ms' : 5000
}}).then(function(data) {
if (data) {
// do other stuff
} else {
// do other stuff
}});
}, false);
tl;dr:此答案底部的工作片段!
您使用 $.ajax()
的方式与 Spotify 端点的工作方式不一致。您的代码段正在生成 GET
请求。尽管文档声明您要使用的端点需要 PUT
。正如您在代码片段中看到的那样,这是通过使用 type: 'PUT'
修复的。为了传递 URL,使用 url
键。
使用data
是正确的选择,尽管有些东西遗漏了。如果您像发布一样使用它,则数据将作为表单数据传输。这不是 Spotify 端点所期望的。您实际上需要在请求负载中传输数据。这是通过使用 dataType: "json"
& contentType: "application/json"
实现的。对数据使用 JSON.stringify()
也解决了与此问题相关的一些问题。
在请求负载中,您使用了 context_uri
字段。这就是 Spotify 描述 context_uri
字段的方式。
Optional. Spotify URI of the context to play. Valid contexts are albums, artists, playlists.
因此,轨道不是上下文。因此,如果您想播放曲目,这不是您想要的领域。在您的情况下,需要 uris
。这就是 Spotify 描述 uris
字段的方式。
Optional. A JSON array of the Spotify track URIs to play.
当只播放一首曲目时,仍然需要一个数组,如您在代码片段中所见。
在这里您可以找到我修复您的 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:2iCcqggir1VUNIHfKDYKX9"],
"position_ms": 5000
})
});