Авторизация API Spotify через Google Apps Script - PullRequest
0 голосов
/ 25 февраля 2019

Я использую следующий код для отправки запросов в API Spotify через скрипт Служб Google:

function search() {

  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getActiveSheet();
  var artist = sheet.getRange(1,1).getValue();
  artist = encodeURIComponent(artist.trim());
  var result = searchSpotify(artist);
  Logger.log(result);
}

function searchSpotify(artist) {
  //searches spotify and returns artist ID
  var response = UrlFetchApp.fetch("https://api.spotify.com/v1/search?q=" + artist + "&type=artist&limit=1", 
  { method: "GET",
    headers:{
      "contentType": "application/json",
      'Authorization': "Bearer BQBnpSUdaEweirImw23yh2DH8OGhTwh5a_VnY_fgb2BPML0KvFvYd04CaEdUhQN9N4ZUXMIVfJ1MjFe1_j0Gl0UoHDhcoC_dklluZyOkq8Bo6i2_wfxSbGzP3k5EUjUKuULAnmTwCdkdZQnl-SNU0Co"
            },
  });
  json = response.getContentText();
  var data = JSON.parse(json);
  var uri = data.artists.items[0].uri.slice(15);
  var getArtists = getRelatedArtists(uri);
  Logger.log(getArtists);
  return getArtists;
}

function getRelatedArtists(uri) {
  //searches related artists with the returned ID
  var response = UrlFetchApp.fetch("https://api.spotify.com/v1/artists/" + uri + "/related-artists", 
  { method: "GET",
    headers:{
      "contentType": "application/json",
      'Authorization': "Bearer BQBnpSUdaEweirImw23yh2DH8OGhTwh5a_VnY_fgb2BPML0KvFvYd04CaEdUhQN9N4ZUXMIVfJ1MjFe1_j0Gl0UoHDhcoC_dklluZyOkq8Bo6i2_wfxSbGzP3k5EUjUKuULAnmTwCdkdZQnl-SNU0Co"
            },
  });
  json = response.getContentText();
  var data = JSON.parse(json);
  var listArtists = [];
  for(var i = 0, len = data.artists.length; i < len; i++){
    listArtists.push(data.artists[i].name);
                 }
  return listArtists;
}

Это прекрасно работает с использованием временного токена авторизации с веб-сайта Spotify, но этот токен обновляется каждый час и т. Д.очевидно бесполезно.

Я пытаюсь использовать свой собственный токен авторизации и идентификатор, который я настроил на Spotify, однако я изо всех сил стараюсь сделать это.Насколько я понимаю, мне может понадобиться добавить дополнительный шаг в начале, чтобы начать процесс авторизации, но я попробовал все предложенные методы, но продолжаю получать ошибки сервера.

1 Ответ

0 голосов
/ 25 февраля 2019

Из документа кажется, что «Поток учетных данных клиента» использует базовую авторизацию.

Для того, чтобы использовать это, сначала вам необходимо получить «client_id» и «client_secret».

Пример сценария:

var clientId = "### client id ###"; // Please set here.
var clientSecret = "### client secret ###"; // Please set here.

var url = "https://accounts.spotify.com/api/token";
var params = {
  method: "post",
  headers: {"Authorization" : "Basic " + Utilities.base64Encode(clientId + ":" + clientSecret)},
  payload: {grant_type: "client_credentials"},
};
var res = UrlFetchApp.fetch(url, params);
Logger.log(res.getContentText())
  • Из образца скручивания, grant_type требуется для отправки в виде формы.

Результат:

В документе говорится, что ответ выглядит следующим образом.

{
   "access_token": "NgCXRKc...MzYjw",
   "token_type": "bearer",
   "expires_in": 3600,
}

Примечание:

  • Это простой пример сценария.Поэтому, пожалуйста, измените это для вашей ситуации.
  • Я подготовил этот образец сценария по образцу завитка в документе.

Ссылка:

Редактировать:

В качестве следующей проблемы вы хотите получить токен доступа из возвращенного значения.Если мое понимание верно, как насчет этой модификации?Пожалуйста, измените мой скрипт следующим образом.

С:

Logger.log(res.getContentText())

Кому:

var obj = JSON.parse(res.getContentText());
Logger.log(obj.access_token)
  • Когда значение возвращается из API, оно возвращается какстрока.Поэтому необходимо проанализировать его как объект, используя JSON.parse().
...