快速入门介绍了如何设置和运行调用
Google Workspace API。
Google Workspace 快速入门使用 API 客户端库来处理一些
身份验证和授权流程的详细信息。我们建议
您需要为自己的应用使用客户端库本快速入门使用
适用于测试的简化身份验证方法
环境对于生产环境,我们建议您了解
身份验证和授权
早于
选择访问凭据
适合您应用的广告格式
创建一个向
Google Apps Script API。
目标
前提条件
- 拥有启用了 Google 云端硬盘的 Google 账号。
设置环境
如需完成本快速入门,请设置您的环境。
启用 API
在使用 Google API 之前,您需要先在 Google Cloud 项目中启用这些 API。
您可以在单个 Google Cloud 项目中启用一个或多个 API。
如果您使用新的 Google Cloud 项目来完成本快速入门,请配置
OAuth 权限请求页面,并将您自己添加为测试用户。如果您已经
已完成此步骤,请跳到下一部分。
-
在 Google Cloud 控制台中,点击“菜单”图标 menu
> API 和服务
> OAuth 同意屏幕。
转到 OAuth 同意屏幕
- 对于用户类型,选择内部,然后点击创建。
- 填写应用注册表单,然后点击保存并继续。
现在,您可以跳过添加范围,然后点击保存并继续。
以后,如果您要创建一款应用供用户使用
Google Workspace 组织,您必须将用户类型更改为外部,然后执行以下操作:
添加您的应用所需的授权范围。
- 查看应用注册摘要。如需进行更改,请点击修改。如果应用
点击 Back to Dashboard(返回信息中心)。
为桌面应用授权凭据
如需对最终用户进行身份验证并访问应用中的用户数据,您需要执行以下操作:
创建一个或多个 OAuth 2.0 客户端 ID。客户端 ID 用于标识
连接到 Google OAuth 服务器。如果您的应用在多个平台上运行
您必须为每个平台创建一个单独的客户端 ID。
-
在 Google Cloud 控制台中,依次点击“菜单”图标 menu > API 和服务 > 凭据。
进入“凭据”页面
- 依次点击创建凭据 > OAuth 客户端 ID。
- 依次点击应用类型 > 桌面应用。
- 在名称字段中,输入凭据的名称。此名称仅在 Google Cloud 控制台中显示。
- 点击创建。系统会显示“OAuth 客户端创建”屏幕,其中显示了您的新客户端 ID 和客户端密钥。
- 点击 OK。新创建的凭据会显示在 OAuth 2.0 客户端 ID 下。
- 将下载的 JSON 文件保存为
credentials.json
,并将
复制到您的工作目录中。
准备工作区
创建工作目录:
mkdir quickstart
切换到工作目录:
cd quickstart
初始化新模块:
go mod init quickstart
获取 Google Apps Script API Go 客户端库和 OAuth2.0 软件包:
go get google.golang.org/api/script/v1
go get golang.org/x/oauth2/google
设置示例
在您的工作目录中,创建一个名为 quickstart.go
的文件。
在该文件中,粘贴以下代码:
package main
import (
"context"
"encoding/json"
"fmt"
"log"
"net/http"
"os"
"golang.org/x/oauth2"
"golang.org/x/oauth2/google"
"google.golang.org/api/option"
"google.golang.org/api/script/v1"
)
// Retrieve a token, saves the token, then returns the generated client.
func getClient(config *oauth2.Config) *http.Client {
// The file token.json stores the user's access and refresh tokens, and is
// created automatically when the authorization flow completes for the first
// time.
tokFile := "token.json"
tok, err := tokenFromFile(tokFile)
if err != nil {
tok = getTokenFromWeb(config)
saveToken(tokFile, tok)
}
return config.Client(context.Background(), tok)
}
// Request a token from the web, then returns the retrieved token.
func getTokenFromWeb(config *oauth2.Config) *oauth2.Token {
authURL := config.AuthCodeURL("state-token", oauth2.AccessTypeOffline)
fmt.Printf("Go to the following link in your browser then type the "+
"authorization code: \n%v\n", authURL)
var authCode string
if _, err := fmt.Scan(&authCode); err != nil {
log.Fatalf("Unable to read authorization code: %v", err)
}
tok, err := config.Exchange(context.TODO(), authCode)
if err != nil {
log.Fatalf("Unable to retrieve token from web: %v", err)
}
return tok
}
// Retrieves a token from a local file.
func tokenFromFile(file string) (*oauth2.Token, error) {
f, err := os.Open(file)
if err != nil {
return nil, err
}
defer f.Close()
tok := &oauth2.Token{}
err = json.NewDecoder(f).Decode(tok)
return tok, err
}
// Saves a token to a file path.
func saveToken(path string, token *oauth2.Token) {
fmt.Printf("Saving credential file to: %s\n", path)
f, err := os.OpenFile(path, os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0600)
if err != nil {
log.Fatalf("Unable to cache oauth token: %v", err)
}
defer f.Close()
json.NewEncoder(f).Encode(token)
}
func main() {
ctx := context.Background()
b, err := os.ReadFile("credentials.json")
if err != nil {
log.Fatalf("Unable to read client secret file: %v", err)
}
// If modifying these scopes, delete your previously saved token.json.
config, err := google.ConfigFromJSON(b, "https://www.googleapis.com/auth/script.projects")
if err != nil {
log.Fatalf("Unable to parse client secret file to config: %v", err)
}
client := getClient(config)
srv, err := script.NewService(ctx, option.WithHTTPClient(client))
if err != nil {
log.Fatalf("Unable to retrieve Script client: %v", err)
}
req := script.CreateProjectRequest{Title: "My Script"}
createRes, err := srv.Projects.Create(&req).Do()
if err != nil {
// The API encountered a problem.
log.Fatalf("The API returned an error: %v", err)
}
content := &script.Content{
ScriptId: createRes.ScriptId,
Files: []*script.File{{
Name: "hello",
Type: "SERVER_JS",
Source: "function helloWorld() {\n console.log('Hello, world!');}",
}, {
Name: "appsscript",
Type: "JSON",
Source: "{\"timeZone\":\"America/New_York\",\"exceptionLogging\":" +
"\"CLOUD\"}",
}},
}
updateContentRes, err := srv.Projects.UpdateContent(createRes.ScriptId,
content).Do()
if err != nil {
// The API encountered a problem.
log.Fatalf("The API returned an error: %v", err)
}
log.Printf("https://script.google.com/d/%v/edit", updateContentRes.ScriptId)
}
运行示例
在您的工作目录中,构建并运行该示例:
go run quickstart.go
-
首次运行该示例时,它会提示您授予访问权限:
<ph type="x-smartling-placeholder">
</ph>
-
如果您尚未登录 Google 账号,请在系统提示时登录。如果
如果您登录了多个账号,请选择一个用于授权的账号。
- 点击接受。
您的 Go 应用运行并调用 Google Apps Script API。
授权信息存储在文件系统中,因此下次运行该示例时
则系统不会提示您授权。
后续步骤