google-apps-script - 通过 Google Apps 脚本的 Spotify API 授权

标签 google-apps-script google-sheets spotify

我正在使用以下代码通过 Google Apps 脚本向 Spotify API 发出请求:

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 网站的临时授权 token 可以正常工作,但此 token 每小时刷新一次,因此显然没有用。

我正在尝试使用我在 Spotify 上设置的我自己的授权 token 和 ID,但我正在努力完成这项工作。据我了解,我可能需要在开始时添加一个额外的步骤来启动授权过程,但我已经尝试了所有建议的方法,但仍然收到服务器错误。

最佳答案

从文档来看,“Client Credentials Flow”似乎使用了基本授权。

为了使用它,首先,您需要检索“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())
  • 在 curl 示例中,grant_type 需要作为表单发送。

结果:

文档说响应如下。

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

备注:

  • 这是一个简单的示例脚本。因此,请根据您的情况对此进行修改。
  • 我根据文档中的示例 curl 准备了这个示例脚本。

引用:

编辑:

作为您的下一个问题,您希望从返回值中检索访问 token 。如果我的理解是正确的,这个修改怎么样?请修改我的脚本如下。

来自:

Logger.log(res.getContentText())

收件人:

var obj = JSON.parse(res.getContentText());
Logger.log(obj.access_token)
  • 当值从 API 返回时,它以字符串形式返回。因此需要使用 JSON.parse() 将其解析为对象.

关于google-apps-script - 通过 Google Apps 脚本的 Spotify API 授权,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54856992/

相关文章:

javascript - 如何在 Google 应用程序脚本中将数组显示到 HTML 侧边栏

javascript - 如何从 Google Apps 脚本发出 Gmail API 批量请求?

javascript - 删除一段文字

google-sheets - 如何轻松地将谷歌工作表单元格引用复制或获取为字符串?

google-sheets - 如何根据另一个工作表更新 Google 工作表中的数据?

ios - 对象没有方法 'Status' iOS SDK和解析云代码

google-apps-script - 如何在 Google 脚本中从 Gmail 线程获取确切的邮件标签?

filter - Google 电子表格,过滤器不允许使用通配符?如何使用通配符计算多个列?

android - 适用于 Android 的 Spotify API/ADK

android - 播放单轨Spotify SDK