Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google apps script 通过谷歌应用程序脚本进行Spotify API授权_Google Apps Script_Google Sheets_Spotify - Fatal编程技术网

Google apps script 通过谷歌应用程序脚本进行Spotify API授权

Google apps script 通过谷歌应用程序脚本进行Spotify API授权,google-apps-script,google-sheets,spotify,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 resul

我使用以下代码通过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;
}
函数搜索(){
var ss=SpreadsheetApp.getActiveSpreadsheet();
var sheet=ss.getActiveSheet();
var artist=sheet.getRange(1,1).getValue();
artist=encodeURIComponent(artist.trim());
var结果=searchSpotify(艺术家);
Logger.log(结果);
}
函数searchSpotify(艺术家){
//搜索spotify并返回艺术家ID
var response=UrlFetchApp.fetch(“https://api.spotify.com/v1/search?q=“+artist+”&type=artist&limit=1”,
{方法:“获取”,
标题:{
“contentType”:“application/json”,
“授权”:持票人BQBnpSUdaEweirImw23yh2DH8OGhTwh5a_VnY_fgb2BPML0KvFvYd04CaEdUhQN9N4ZUXMIVfJ1MjFe1_j0Gl0UoHDhcoC_DKLLUZYOK8BO6I2_WFXSBGZP3K5EUJULANMTWCDZQNL-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);
回归艺术家;
}
函数getRelatedArtists(uri){
//使用返回的ID搜索相关艺术家
var response=UrlFetchApp.fetch(“https://api.spotify.com/v1/artists/“+uri+”/相关艺术家”,
{方法:“获取”,
标题:{
“contentType”:“application/json”,
“授权”:持票人BQBnpSUdaEweirImw23yh2DH8OGhTwh5a_VnY_fgb2BPML0KvFvYd04CaEdUhQN9N4ZUXMIVfJ1MjFe1_j0Gl0UoHDhcoC_DKLLUZYOK8BO6I2_WFXSBGZP3K5EUJULANMTWCDZQNL-SNU0Co
},
});
json=response.getContentText();
var data=JSON.parse(JSON);
var=[];
for(变量i=0,len=data.artists.length;i
使用Spotify网站上的临时授权令牌可以正常工作,但该令牌每小时刷新一次,因此显然是无用的


我正在尝试使用我在Spotify上设置的我自己的授权令牌和ID,但我正在努力使其正常工作。据我所知,我可能需要在开始时添加一个额外步骤来启动授权流程,但我尝试了所有建议的方法,但不断收到服务器错误。

从文档中,似乎“客户端凭据流”使用了基本授权

要使用此功能,首先需要检索“客户id”和“客户机密”。

示例脚本:
  • 从curl示例中,
    grant\u type
    需要作为表单发送
结果: 文件说,答复如下

{
   "access_token": "NgCXRKc...MzYjw",
   "token_type": "bearer",
   "expires_in": 3600,
}
注:
  • 这是一个简单的示例脚本。所以请根据你的情况修改这个
  • 我根据文档中的示例curl编写了这个示例脚本
参考:
编辑: 作为下一个问题,您需要从返回的值中检索访问令牌。如果我的理解是正确的,这次修改怎么样?请修改我的脚本如下

{
   "access_token": "NgCXRKc...MzYjw",
   "token_type": "bearer",
   "expires_in": 3600,
}
发件人: 致:
  • 当该值从API返回时,它将作为字符串返回。因此,需要使用将其解析为对象

我认为提供API规范文档将有助于用户思考您的问题。抱歉,完整文档相当长,因此我将其链接到这里。它描述了几个授权流程选项:我还应该补充一点,我正在尝试使用底部的客户端凭据流程。感谢您的回复。您已经拥有客户端id和客户端机密。您希望使用“客户端凭据流”检索访问令牌。您想知道“客户端凭据流”的谷歌应用程序脚本。我的理解正确吗?没错。无论何时尝试连接,我都会收到一个错误,说明grant_类型参数无效。啊!我没有正确使用Utilities.base64编码。只有一件事,可能非常简单,但它返回以下对象…{“access\u token”:“我暂时隐藏了它”,“token\u type”:“Bearer”,“expires\u in”:3600,“scope”:“}。我正在努力将访问令牌的内容添加到一个变量中,不知道这是否是因为对象键在引号中。变量返回为未定义。@herman感谢您的回复。从您的回复中,我们发现脚本运行良好。但我为我不完整的回答道歉。我添加了一个修改点。你能确认一下吗?@herman我的回答告诉你结果了吗?你能告诉我这件事吗?这对我的学习也很有用。如果这样做有效,其他与你有相同问题的人也可以将你的问题作为可以解决的问题。如果你对我的回答还有疑问,我道歉。那时候,我可以问一下你目前的情况吗?我想学习解决你的问题。是的,你的解决方案在这里非常有效。再次感谢您。@herman欢迎您。谢谢你让我知道。如果您的问题已解决,请按“接受”按钮。与您有相同问题的其他人也可以将您的问题作为可以解决的问题。如果你找不到按钮,尽管告诉我。
Logger.log(res.getContentText())
var obj = JSON.parse(res.getContentText());
Logger.log(obj.access_token)