通过按钮发送命令播放曲目

时间:2018-10-24 12:18:30

标签: javascript jquery api spotify

我目前正在一个学校项目中,当我在网站上按下按钮时,我想让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/

2 个答案:

答案 0 :(得分:1)

我认为.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);

答案 1 :(得分:1)

tl; dr:此答案底部的有效代码段!


您使用$.ajax()的方式与Spotify端点的工作方式不对应。您的代码段正在生成一个GET请求。不过,文档指出您要使用的端点需要PUT。如您在代码段中所见,此问题已通过使用type: 'PUT'进行了修复。为了传递URL,使用了url键。


使用data是正确的选择,尽管有一些不足之处。如果您像张贴那样使用它,则数据将作为formdata传输。这不是Spotify端点所期望的。您实际上需要在请求有效负载内传输数据。这可以通过使用dataType: "json"contentType: "application/json"来实现。将JSON.stringify()用于数据还可以解决与此问题有关的一些问题。


在请求有效负载中,您使用了context_uri字段。这就是Spotify描述context_uri字段的方式。

  

可选。 Spotify要播放的上下文的URI。有效的上下文是专辑,艺术家,播放列表。

因此,曲目不是上下文。因此,如果您想播放曲目,那么这不是您想要的领域。您的情况是需要uris。这就是Spotify描述uris字段的方式。

  

可选。要播放的Spotify曲目URI的JSON数组。

当只播放一首曲目时,仍然需要一个数组,如您在摘要中所见。


在这里您可以找到有效的代码段,我已在其中修复了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
  })
});