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

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
  })
});