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 脚本 的 OAuth1: 与 OAuth 1.0 和 1.0a 兼容。
- 适用于 Apps 脚本 的 OAuth2: 与 OAuth2 兼容。
使用服务账号进行身份验证
如需从 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() 将其解析为 JavaScript 对象。
// 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 字符串,请使用 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 响应,请使用
XML 响应方法
HTTPResponse.getContentText()。
// 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.