Отправка команды на воспроизведение трека через кнопку - PullRequest
0 голосов
/ 24 октября 2018

В настоящее время я работаю над школьным проектом, в котором я хочу позволить 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 голосов
/ 24 октября 2018

tl; dr: рабочий фрагмент внизу этого ответа!


То, как вы используете $.ajax(), не соответствует принципу работы конечной точки Spotify.Ваш фрагмент генерирует запрос GET.Документы, однако, утверждают, что PUT необходим для конечной точки, которую вы хотите использовать.Как видно из фрагмента, это исправлено с помощью type: 'PUT'.Для передачи URL используется ключ url.


Использование data было правильным выбором, хотя некоторые вещи отсутствуют.Если вы используете его, как вы опубликовали данные передаются в виде данных.Это не то, чего ожидает конечная точка Spotify.Вам на самом деле нужно передать данные в пределах полезной нагрузки запроса.Это достигается с помощью dataType: "json" & contentType: "application/json".Использование JSON.stringify() для данных также решает некоторые проблемы, связанные с этой проблемой.


В полезной нагрузке запроса вы использовали поле context_uri.Вот как Spotify описывает поле context_uri.

Необязательно.Spotify URI контекста для воспроизведения.Действительными контекстами являются альбомы, исполнители, плейлисты.

Поэтому дорожка не является контекстом.Так что если вы хотите воспроизвести трек, это не та область, с которой вы хотите идти.В вашем случае uris необходимо.Так Spotify описывает поле uris.

Необязательно.Массив JSON URI дорожек Spotify для воспроизведения.

Когда необходимо воспроизвести только одну дорожку, все еще требуется массив, как вы можете видеть во фрагменте.


Здесь вы можете найти рабочий фрагмент, где я исправил ваш вызов 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
  })
});
0 голосов
/ 24 октября 2018

Я думаю .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);
...