使用 UrlFetchApp 发送参数

Doo*_*oom 3 spreadsheet google-sheets google-apps-script google-sheets-api

我试图发出 GET 请求,但根据 API 的文档,它需要额外的参数才能让我访问数据。我搜索了如何params使用发送UrlFetch,并找到了主要讨论在非请求中发送参数的文档POSTGET

我已经发送了Authentication 请求Headers,但我想发送额外的参数UrlFetch

那么有没有一种简单的方法可以做到这一点呢?

下面是我正在做的事情和我想要做的事情的示例。

我的代码:

   const someService = authorize();
  
   let response = UrlFetchApp.fetch('https://www.webSite.com/api/teams.json', {
    headers: {
      // Sending access token in the request
      Authorization: 'Bearer ' + someService.getAccessToken()
    }
  });
Run Code Online (Sandbox Code Playgroud)

我想做的事

   const someService = authorize();
  
   let response = UrlFetchApp.fetch('https://www.webSite.com/api/teams.json', {
    headers: {
      Authorization: 'Bearer ' + someService.getAccessToken()
    },
    parameters:{
         'teamId': 1234
     }
      });
// URL should be like that: https://www.webSite.com/api/teams.json?access_token=1234abc&teamId=1234
Run Code Online (Sandbox Code Playgroud)

Die*_*ego 9

遗憾的是,UrlFetchApp 类没有内置方法来自动从对象生成 URL 搜索参数。但 Google 在其OAuth2 库中提供了一个您可以复制的:

function sendRequest() {
  const someService = authorize();
  let baseUrl = 'https://www.webSite.com/api/teams.json';
  let params = {
    'access_token': someService.getAccessToken(),
    'teamId': 1234
  };
  let response = UrlFetchApp.fetch(buildUrl_(baseUrl, params));
}

/**
 * Builds a complete URL from a base URL and a map of URL parameters.
 * @param {string} url The base URL.
 * @param {Object.<string, string>} params The URL parameters and values.
 * @return {string} The complete URL.
 * @private
 */
function buildUrl_(url, params) {
  var paramString = Object.keys(params).map(function(key) {
    return encodeURIComponent(key) + '=' + encodeURIComponent(params[key]);
  }).join('&');
  return url + (url.indexOf('?') >= 0 ? '&' : '?') + paramString;
}
Run Code Online (Sandbox Code Playgroud)