【问题标题】:Apps Script - Google Sheets -- API Call -- trouble with token header syntaxApps 脚本 - Google Sheets - API 调用 - 令牌标头语法问题
【发布时间】:2020-10-04 16:31:48
【问题描述】:

不知道如何编写此标题的不记名令牌部分..

...

// --------------------------------------------------------------------------------------------------
//
// iTunes Music Discovery Application in Google Sheets
//
// --------------------------------------------------------------------------------------------------

// custom menu
function onOpen() {
  var ui = SpreadsheetApp.getUi();
  ui.createMenu('iTunes API Call')
      .addItem('Get Artist Data','displayArtistData')
      .addToUi();
}

// function to call iTunes API
function calliTunesAPI(artist) {
  
  // Call the iTunes API
  var response = UrlFetchApp.fetch("https://api.music.apple.com/v1/catalog/us/music-videos/{" + artist + "}");


  --header 'Content-Type:application/json' \
  --header 'Authorization: Bearer eyJhbGciOiJFUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6IjVWNjY3SEZaNjMifQ.eyJpc3MiOiJTOTU0QVE5Q1Q3IieOwO'


 
  // Parse the JSON reply
  var json = response.getContentText();
  return JSON.parse(json);
  
}


function displayArtistData() {
  
  // pick up the search term from the Google Sheet
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getActiveSheet();
  
  var artist = sheet.getRange(11,3).getValue();
  
  var tracks = calliTunesAPI(artist);
  
  var results = tracks["results"];
  
  var output = []
  
  results.forEach(function(elem,i) {
    var image = '=image("' + elem["artworkUrl60"] + '",4,60,60)';
    var hyperlink = '=hyperlink("' + elem["previewUrl"] + '","Listen to preview")';
    output.push([elem["artistName"],elem["collectionName"],elem["trackName"],image,hyperlink]);
    sheet.setRowHeight(i+15,65);
  });
  
  // sort by album
  var sortedOutput = output.sort( function(a,b) {
    
    var albumA = (a[1]) ? a[1] : 'Not known';  // in case album name undefined 
    var albumB = (b[1]) ? b[1] : 'Not known';  // in case album name undefined
    
    if (albumA < albumB) { return -1; } else if (albumA > albumB) {
      return 1;
    }
    // names are equal
    return 0;
  });
  
  // adds an index number to the array
  sortedOutput.forEach(function(elem,i) {
    elem.unshift(i + 1);
  });
  
  var len = sortedOutput.length;
  
  // clear any previous content
  sheet.getRange(15,1,500,6).clearContent();
  
  // paste in the values
  sheet.getRange(15,1,len,6).setValues(sortedOutput);
  
  // formatting
  sheet.getRange(15,1,500,6).setVerticalAlignment("middle");
  sheet.getRange(15,5,500,1).setHorizontalAlignment("center");
  sheet.getRange(15,2,len,3).setWrap(true);
  
}

...

这部分代码不起作用:

--header 'Content-Type:application/json'
--header '授权:承载 eyJhbGciOiJFUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6IjVWNjY3SEZaNjMifQ.eyJpc3MiOiJTOTU0QVE5Q1Q3IieOwO

不确定如何正确语法。我确定这是 101,但不确定答案。

【问题讨论】:

标签: javascript json google-apps-script bearer-token urlfetch


【解决方案1】:

您可能想查看UrlFetchApp 文档here

UrlFetchApp 所做的是获取资源并通过 Internet 与其他主机通信。由于您要检索一些数据,因此在发出请求时,您基本上必须包括 bearerheaders

考虑到所有这些,您可以将函数重写为:

function calliTunesAPI(artist) {
   var url = "https://api.music.apple.com/v1/catalog/us/music-videos/{" + artist + "}";
   var params = {
      "headers": {
         "Content-Type": "application/json",
         "Authorization": "Bearer eyJhbGciOiJFUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6IjVWNjY3SEZaNjMifQ.eyJpc3MiOiJTOTU0QVE5Q1Q3IieOwO"
      }
      "method": "GET"
   }
   var response = UrlFetchApp(url, params);
   var json = response.getContentText();
   return JSON.parse(json);
}

参考

【讨论】:

    【解决方案2】:

    以此为例,您应该能够更新您的代码。祝你好运!

    var url = "https://www.example.com"
    var headers = {
      "Authorization": "Bearer ijfewfkjsfkjh4543",
      "Content-Type": "Application/json"
    };
    
    var options = {
      "method" : "get",
      "headers" : headers 
    };
    
    var response = UrlFetchApp.fetch(url, options);
    

    编辑:应该这样做,但我看到 API 已关闭。您可以删除 var 艺术家。但我需要一个数字;)

    function calliTunesAPI(artist) { 
      var artist = 178834;
      var url = "api.music.apple.com/v1/catalog/us/music-videos"+artist; 
      var headers = { "Authorization": "Bearer eyJhbGciOiJFUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6IjVWNjY3SEZaNjMifQ.eyJpc3MiOiJTOTU0QVE5Q1Q3IieOwO", 
                      "Content-Type": "Application/json" 
                    }; 
      var options = { 
        "method": "get", 
        "headers": headers,
        "muteHttpExceptions": true
      }; 
      var response = UrlFetchApp.fetch(url, options).getContentText(); 
      var json = JSON.parse(response);
      console.log(json);
      
    }
    

    【讨论】:

    • 我试过了:--- function calliTunesAPI(artist) { var url = "api.music.apple.com/v1/catalog/us/music-videos{" + artist + "}"; var headers = {“授权”:“承载 eyJhbGciOiJFUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6IjVWNjY3SEZaNjMifQ.eyJpc3MiOiJTOTU0QVE5Q1Q3IieOwO”,“内容类型”:“应用程序/json”}; var options = { "method" : "get", "headers" : headers }; var response = UrlFetchApp.fetch(url, options); var json = response.getContentText();返回 JSON.parse(json); } --- 错误:var response = UrlFetchApp.fetch(url, options);
    • 抱歉,粘贴是一场噩梦。不知道如何格式化它看起来更好。也很高兴 DM 在一旁。
    • 您认为有些人认为不对,请参阅我的编辑。 api暂时关闭
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多