外部 API

Google Apps 脚本可以与网络上的各种 API 进行交互。本指南介绍了如何在脚本中使用不同类型的 API。

连接到公共 API

您可以使用 UrlFetch 服务直接发出 API 请求。

以下示例使用 GitHub API 搜索提及“Apps 脚本”且星数不低于 100 的代码库。此 API 请求不需要授权或 API 密钥。

var query = '"Apps Script" stars:">=100"';
var url = 'https://api.github.com/search/repositories'
  + '?sort=stars'
  + '&q=' + encodeURIComponent(query);

var response = UrlFetchApp.fetch(url, {'muteHttpExceptions': true});
Logger.log(response);

使用 OAuth 向服务发出请求

代表用户执行操作的 API 通常需要授权,通常使用 OAuth 协议。Apps 脚本不提供对该协议的内置支持,但您可以使用一些开源库来执行 OAuth 流程,并在请求中发送凭据:

使用服务账号进行身份验证

如需从 Apps 脚本调用 API,您可能会出于以下任何原因选择使用服务账号身份验证:

  • 使用 Google Cloud API 获得更出色的性能
  • 自动化和长时间运行的任务
  • 安全性更高(最小权限)
  • 集中式访问权限管理

如需在 Apps 脚本中使用服务账号,请参阅使用服务账号以 Apps 脚本项目的身份进行身份验证

连接到 Google Cloud 服务

您可以使用 ScriptApp.getIdentityToken() 方法获取有效用户的 OpenID Connect 身份令牌(一种 JSON Web 令牌或 JWT)。您可以使用此令牌向配置为接受此令牌的 Google Cloud 服务(例如 Cloud Run)进行身份验证。

如需了解详情,请参阅连接到 Google Cloud 服务

使用 JSON

处理 JSON 对象与处理 XML 类似,只不过解析或编码 JSON 对象要容易得多。

如果所请求的 API 针对请求返回原始 JSON 响应,则可以使用 HTTPResponse.getContentText() 方法访问 JSON 字符串响应。检索到此字符串后,只需对该字符串调用 JSON.parse() 即可获取原生对象表示形式。

// Make request to API and get response before this point.
var json = response.getContentText();
var data = JSON.parse(json);
Logger.log(data.title);

同样,如需生成 JavaScript 对象的字符串表示形式以发出请求,请使用 JSON.stringify()

var data = {
  'entry': {
    'group': {
      'title': 'Dog Skateboarding',
      'description': 'My dog gets some serious air'
    },
    'keywords': 'dog, skateboard'
  }
}
var payload = JSON.stringify(data);
// Make request to API with payload after this point.

解析XML

如果外部 API 针对请求返回原始 XML 响应,您可以使用方法 HTTPResponse.getContentText() 访问 XML 响应。

// Make request to API and get response before this point.
var xml = response.getContentText();
var doc = XmlService.parse(xml);

向 API 发出 XML 请求时,请使用 XmlService 方法构建要发送的 XML。

var root = XmlService.createElement('entry')
    .setAttribute('keywords', 'dog, skateboard');
var group = XmlService.createElement('group')
    .setAttribute('title', 'Dog Skateboarding');
    .setAttribute('description', 'My dog gets some serious air');
root.addContent(group);
var document = XmlService.createDocument(root);
var payload = XmlService.getPrettyFormat().format(document);
// Make request to API with payload after this point.