1. 使用 Google Workspace API
本 Codelab 介绍了如何使用 Google Workspace(旧称 G Suite)基于 HTTP 的 RESTful API。为简洁起见,并考虑到 Python 的可用性,我们将使用 Python 来完成此示例,但您也可以选择使用自己喜欢的开发语言。您将学习一些入门主题,例如如何使用开发者控制台创建/管理项目、获取授权凭据以及安装 API 客户端库。处理完这些手续后,您将编写一个应用,以使用 Google 云端硬盘的 API 显示您 Google 云端硬盘中的前 100 个文件和文件夹。
学习内容
- 使用 Google/Cloud Developers Console 创建项目
- 在应用中获取和使用 OAuth2 应用凭据
- 了解如何使用 Google API 客户端库
- 使用 Google 和 Google Workspace API 编写应用
- 使用 Google Drive API 获取文件和文件夹信息
所需条件
- 能够访问互联网和网络浏览器
- Google 账号(Google Workspace 账号可能需要获得管理员批准)
- 熟悉符合 POSIX 标准的系统,例如 Linux 和 Mac OS X
- 能够使用代码编辑器或 shell 命令创建源文件。
- 具备 Python(2 或 3)方面的基本技能,但您可以使用任何受支持的语言
- Google 云端硬盘中的部分文件和/或文件夹
2. 调查问卷
您将如何使用本 Codelab 教程?
您如何评价自己在 Google Workspace 开发者工具和 API 方面的经验?
3. 概览
在此 Codelab 中,您将学习如何:
- 下载 Python 版 Google API 客户端库
- 在 Google/Cloud Developers Console 中创建新项目
- 获取应用所需的凭据
- 使用这些凭据访问 Google Drive API
如果您不想使用 Python,欢迎使用您最喜欢的开发工具(支持的语言的客户端库可在此处找到:)实现本 Codelab,只需将 Python 示例视为(可执行的)伪代码即可。
4. 确认 Python 环境
此 Codelab 要求您使用 Python 语言(不过 Google API 客户端库支持多种语言,因此您可以随意使用自己喜欢的开发工具构建等效内容,只需将 Python 用作伪代码即可)。具体而言,此 Codelab 支持 Python 2 和 3,但我们建议您尽快迁移到 3.x。
Cloud Shell 是一项便利功能,用户可以直接从 Cloud 控制台中使用,无需本地开发环境,因此本教程完全可以在云端通过 Web 浏览器完成。如果您正在使用 GCP 产品和 API 进行开发,或者计划继续使用它们进行开发,那么 Cloud Shell 会特别有用。更具体地说,对于此 Codelab,Cloud Shell 已预安装了这两个版本的 Python。
Cloud Shell 还安装了 IPython,这是一个更高级别的交互式 Python 解释器,我们建议您使用它,尤其是在您属于数据科学或机器学习社区的情况下。如果您是,IPython 是 Jupyter 笔记本以及由 Google 研究 托管的 Colab 的默认解释器。
IPython 会优先选择 Python 3 解释器,但如果 3.x 不可用,则会回退到 Python 2。IPython 可从 Cloud Shell 访问,但也可安装在本地开发环境中。按 ^D (Ctrl-d) 退出,并接受退出请求。启动 ipython 的输出示例如下所示:
$ ipython Python 3.7.3 (default, Mar 4 2020, 23:11:43) Type 'copyright', 'credits' or 'license' for more information IPython 7.13.0 -- An enhanced Interactive Python. Type '?' for help. In [1]:
如果您不喜欢 IPython,也可以使用标准的 Python 交互式解释器(无论是 Cloud Shell 还是本地开发环境)(同样使用 ^D 退出):
$ python Python 2.7.13 (default, Sep 26 2018, 18:42:22) [GCC 6.3.0 20170516] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> $ python3 Python 3.7.3 (default, Mar 10 2020, 02:33:39) [GCC 6.3.0 20170516] on linux Type "help", "copyright", "credits" or "license" for more information. >>>
此 Codelab 还假定您已安装 pip 安装工具(Python 软件包管理器和依赖项解析器)。它与 2.7.9 版或更高版本以及 3.4 版或更高版本捆绑在一起。如果您使用的是旧版 Python,请参阅本指南了解安装说明。根据您的权限,您可能需要拥有 sudo 或超级用户访问权限,但通常情况下并非如此。您还可以明确使用 pip2 或 pip3 来针对特定 Python 版本执行 pip。
此 Codelab 的其余内容假定您使用的是 Python 3。如果 Python 2 的说明与 3.x 之间的差异很大,则会为 Python 2 提供具体说明。
*创建和使用虚拟环境
本部分是可选的,仅当您必须为此 Codelab 使用虚拟环境时(如上方的警告侧边栏中所述),才需要执行本部分中的步骤。如果您的计算机上只有 Python 3,只需发出以下命令即可创建名为 my_env 的 virtualenv(您也可以根据需要选择其他名称):
virtualenv my_env
不过,如果您的计算机上同时安装了 Python 2 和 Python 3,我们建议您安装 Python 3 虚拟环境,您可以使用 -p flag 执行此操作,如下所示:
virtualenv -p python3 my_env
通过“激活”新创建的 virtualenv 进入该环境,如下所示:
source my_env/bin/activate
确认您已进入该环境,方法是查看 shell 提示符是否已添加环境名称,例如
(my_env) $
现在,您应该能够 pip install 任何必需软件包,执行此实施中的代码等。另一个好处是,如果完全搞砸了,请进入 Python 安装中断的情况,然后您可以移除整个环境而不影响系统的其余部分。
5. 安装 Python 版 Google API 客户端库
此 Codelab 需要使用 Python 版 Google API 客户端库,因此安装过程非常简单,或者您可能根本无需执行任何操作。
我们之前建议您考虑使用 Cloud Shell 以方便操作。您可以在云端通过网络浏览器完成整个教程。使用 Cloud Shell 的另一个原因是,许多热门开发工具和必需的库都已预安装。
*安装客户端库
(可选)如果您使用的是 Cloud Shell 或已安装客户端库的本地环境,则可以跳过此步骤。如果您在本地进行开发,并且尚未安装(或不确定是否已安装)这些工具,则只需执行此操作。最简单的方法是使用 pip(或 pip3)进行安装(包括在必要时更新 pip 本身):
pip install -U pip google-api-python-client oauth2client
确认安装
此命令会安装客户端库以及它所依赖的任何软件包。无论您使用的是 Cloud Shell 还是自己的环境,都可以通过导入必需的软件包来验证客户端库是否已安装,并确认没有导入错误(也没有输出):
python3 -c "import googleapiclient, httplib2, oauth2client"
如果您改为使用 Python 2(来自 Cloud Shell),则会收到一条警告,表明其支持已被弃用:
******************************************************************************* Python 2 is deprecated. Upgrade to Python 3 as soon as possible. See https://cloud.google.com/python/docs/python2-sunset To suppress this warning, create an empty ~/.cloudshell/no-python-warning file. The command will automatically proceed in seconds or on any key. *******************************************************************************
成功运行该导入“test”命令(无错误/输出)后,您就可以开始与 Google API 通信了!
摘要
由于这是一个入门级 Codelab,因此我们假定您是 Google 和 Google Workspace API 的新手。如果您已有创建项目和创建用户授权“OAuth 客户端 ID”的经验,如果是,请创建或重复使用现有项目,创建或重复使用现有 OAuth 客户端 ID,然后跳过接下来的两个模块,直接前往“显示云端硬盘文件和文件夹应用”或直接跳至“高级开发者控制台使用”,以在较少指导的情况下查看这些步骤。
6. 在 Cloud 控制台中指定项目
使用 Google API 的应用需要项目。这些应用在 Google Cloud Developers Console(简称“开发者控制台”)中进行管理。在此 Codelab 中,我们只会使用 Google Drive API,因此我们提供了一个魔法链接(见下文中的第 1 步),该链接可执行以下操作:
- 将您带到开发者控制台
- 引导您创建新项目(或选择现有项目),并
- 自动启用 Drive API
我们开始吧!
- 前往 console.developers.google.com/start/api?id=drive,然后登录您的 Google 账号。
- 如果您还没有任何项目,系统会显示以下界面,以便您接受 Google API 服务条款:
接受条款后,系统会创建一个名为“我的项目”的新项目,并自动启用 Drive API。3. 如果您已创建项目(可能是您之前的 Codelab 项目),则会看到以下界面:
点击创建项目下拉菜单,选择现有项目或创建新项目。
选择项目(新项目或现有项目)后,系统会自动为您启用 Drive API。4. 看到以下确认消息即表示 Drive API 已启用:
5. 点击前往凭据,进入下一步。
7. *授权 API 请求(用户授权)
如果您已创建用户账号授权凭据并熟悉相关流程,则可以跳过此部分。它与技术不同的服务账号授权不同,因此请继续阅读下文。
授权简介(以及部分身份验证)
为了向 API 发出请求,您的应用需要具有适当的授权。身份验证是一个类似的词,它描述了登录凭据,即您在使用登录名和密码登录 Google 账号时进行身份验证。一旦通过身份验证,下一步就是授权您(或者更确切地说是您的代码)访问数据,例如 Cloud Storage 上的 Blob 文件或 Google 云端硬盘上的用户个人文件。
Google API 支持多种类型的授权,但对于 Google Workspace API 用户来说,最常见的是用户授权,因为此 Codelab 中的示例应用会访问属于最终用户的数据。这些最终用户必须授予您的应用访问其数据的权限。这意味着您的代码必须获取用户账号 OAuth2 凭据。
如需获取用户授权的 OAuth2 凭据,请返回 API 管理器,然后选择左侧导航栏上的“凭据”标签页:
访问该页面后,您会在以下三个部分看到您的所有凭据:
第一个用于 API 密钥,第二个是 OAuth 2.0 客户端 ID,最后一个是 OAuth2 服务账号:我们使用的是第二个。
创建凭据
在“凭据”页面上,点击顶部的 + 创建凭据按钮,系统随即会显示一个对话框,您可以在其中选择“OAuth 客户端 ID”:
在下一个界面中,您可以执行两项操作:配置应用的授权“权限请求页面”和选择应用类型:
如果您尚未设置权限请求页面,您会在控制台中看到警告,并且需要立即设置。(如果已设置权限请求页面,请跳过以下步骤。)
OAuth 权限请求页面
点击“配置权限请求页面”,然后选择“外部”应用(如果您是 Google Workspace [以前称为“Google Workspace”] 客户,则选择“内部”):
请注意,在本练习中,选择哪个并不重要,因为您无法发布 Codelab 示例。大多数人会选择“外部”,然后进入一个更复杂的界面,但您实际上只需要填写顶部的“应用名称”字段:
目前,您只需要一个应用名称,因此请选择一个能反映您正在进行的 Codelab 的名称,然后点击保存。
创建 OAuth 客户端 ID(用户账号授权)
现在,返回到“凭据”标签页以创建 OAuth2 客户端 ID。您可以在此处看到可以创建的各种 OAuth 客户端 ID:
我们正在开发一个命令行工具,属于其他,因此请选择该选项,然后点击创建按钮。选择反映您要创建的应用的客户端 ID 名称,或者直接采用默认名称,该名称通常为“其他客户端 N”。
保存您的凭据
- 系统会显示一个包含新凭据的对话框;点击确定即可关闭该对话框
- 返回“凭据”页面,向下滚动到“OAuth2 客户端 ID”部分,然后点击新创建的客户端 ID 最右侧的下载图标
。
- 系统会打开一个对话框,用于保存名为
client_secret-LONG-HASH-STRING.apps.googleusercontent.com.json的文件,该文件很可能会保存到您的下载内容文件夹中。我们建议将其缩短为更简单的名称,例如client_secret.json(这是示例应用使用的名称),然后将其保存到您将在本 Codelab 中创建示例应用的目录/文件夹中。
摘要
现在,您已获得凭据,可以从应用访问 Drive API 了。请注意,OAuth 客户端 ID 的用途是让用户必须向您的应用授予访问 Google 云端硬盘中其数据的权限。
NOTE:有关手动(即不使用上述“向导”)创建项目、启用 API 和获取凭据的更多详细信息,请在本 Codelab 结束后进一步学习。
8. 显示云端硬盘文件和文件夹应用
无论是在本地开发环境中还是在 Cloud Shell 中,在 client_id.json 凭据文件所在的同一目录中,创建一个名为 drive_list.py 的新 Python 文件,并添加以下代码行:
from __future__ import print_function
from googleapiclient import discovery
from httplib2 import Http
from oauth2client import file, client, tools
SCOPES = 'https://www.googleapis.com/auth/drive.readonly.metadata'
store = file.Storage('storage.json')
creds = store.get()
if not creds or creds.invalid:
flow = client.flow_from_clientsecrets('client_id.json', SCOPES)
creds = tools.run_flow(flow, store)
DRIVE = discovery.build('drive', 'v3', http=creds.authorize(Http()))
files = DRIVE.files().list().execute().get('files', [])
for f in files:
print(f['name'], f['mimeType'])
应用结构
此应用包含三个主要部分:
- 用于引入库功能的 Python 导入
- 获取应用凭据
- 获取用户 Google 云端硬盘中的文件和文件夹名称及 MIME 类型并显示
NOTE:本 Codelab 结束后,您可以深入了解代码并查看逐行说明,以便进一步学习。
运行应用
将此文件命名为 drive_list.py 之类的名称。首次执行脚本时,该脚本没有访问用户(您)在云端硬盘中的文件的授权。输出如下所示,执行已暂停:
$ python3 ./drive_list.py /usr/local/lib/python3.6/site-packages/oauth2client/_helpers.py:255: UserWarning: Cannot access storage.json: No such file or directory warnings.warn(_MISSING_FILE_MESSAGE.format(filename)) Your browser has been opened to visit: https://accounts.google.com/o/oauth2/auth?client_id=LONG-STRING.apps.googleusercontent.com&redirect_uri=http%3A%2F%2Flocalhost%3A8080%2F&scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fdrive.readonly.metadata&access_type=offline&response_type=code If your browser is on a different machine then exit and re-run this application with the command-line parameter --noauth_local_webserver
通过本地开发环境
当浏览器窗口打开并向您显示 OAuth2 权限对话框时,命令行脚本会暂停:

在此处,应用会通过 SCOPES 变量请求用户授予代码所需的权限。在这种情况下,该权限是指能够查看用户 Google 云端硬盘中的文件元数据。是的,在您的代码中,这些权限范围以 URI 的形式显示,但在 OAuth2 流程对话框窗口中,它们会转换为您的语言区域设置所指定的语言。用户必须明确授权所请求的权限,否则代码的“运行流程”部分会抛出异常,并且脚本不会继续执行。
NOTE:有些用户有多个浏览器,授权请求可能会在非首选浏览器中弹出。如果是这种情况,只需从您不想使用的浏览器窗口中复制整个网址,然后将其粘贴到您确实想使用的浏览器的地址栏中即可。
从 Cloud Shell
如果您当时没有注意到这一点,并在 Cloud Shell 中运行了该程序,那么系统不会弹出任何浏览器窗口,导致您卡住。意识到底部的那条诊断消息是发给您的…就是这条:
If your browser is on a different machine then exit and re-run this application with the command-line parameter --noauth_local_webserver
以这种方式运行后,您将看到以下输出:
$ python3 drive_list.py --noauth_local_webserver /usr/local/lib/python3.7/site-packages/oauth2client/_helpers.py:255: UserWarning: Cannot access storage.json: No such file or directory warnings.warn(_MISSING_FILE_MESSAGE.format(filename)) Go to the following link in your browser: https://accounts.google.com/o/oauth2/auth?client_id=xxx.apps.googleusercontent.com&redirect_uri=urn%3Aietf%3Awg%3Aoauth%3A2.0%3Aoob&scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fdrive.readonly.metadata&access_type=offline&response_type=code Enter verification code:
按照说明操作,前往包含该网址的另一个浏览器标签页,您将获得与上述本地开发环境几乎相同的体验。主要区别在于最后,您会看到一个额外的屏幕,其中包含要在 Cloud Shell 中输入的验证码:

将此代码剪切并粘贴到终端窗口中。
摘要
用户点击“允许”后,或者将验证码粘贴到提示中后,应用将(继续)运行,因此您应该会看到包含云端硬盘文件/文件夹及其 MIME 类型的输出。以下是我们的一个测试账号中的示例:
$ python3 ./drive_list.py Travel expenses application/vnd.google-apps.spreadsheet Gmail Add-ons codelab application/vnd.google-apps.script Google Workspace Developer Intro application/vnd.google-apps.presentation Baseball Sheets application/vnd.google-apps.folder My Resume application/vnd.google-apps.document . . .
请注意,在后续执行中,系统不再提示您进行授权(因为授权已由身份验证库缓存),而是直接输出结果。第一次在终端中看到自己的文档,是不是很激动?我们也是这么认为的!
9. 总结
现在,您可以详细了解云端硬盘 API 的更多功能,或探索其他 Google Workspace(Gmail、Google 文档、Google 表格、Google 幻灯片、Google 日历)和其他 Google API(Google 地图、Google Analytics、YouTube 等)。恭喜您坚持到最后!
本 Codelab 中使用的代码也可在 GitHub 代码库中找到,网址为 github.com/googlecodelabs/gsuite-apis-intro。(我们力求使本 Codelab 与该代码库保持同步。)准备好继续探索了吗?下面提供了各种资源,可帮助您更深入地了解本 Codelab 涵盖的内容,或者如果您想拓展思维,探索通过程序化方式访问 Google 技术。
如前所述,如果您不是常规 Python 开发者,我们建议您使用自己喜欢的开发语言重新完成此 Codelab 示例。如需获取支持的语言的客户端库,请点击此处。
其他研究
现在,您已经积累了一些 Drive API 使用经验,下面是一些推荐的练习,可帮助您进一步提升技能:
- ZIP 文件:编写一个应用,将多个 ZIP 归档文件备份到云端硬盘,并在备份过程中实时解压缩这些文件,使每个 ZIP 文件名都成为相应文件所要放入的文件夹的名称。额外学分:支持其他 ZIP 文件中的递归 ZIP 归档,以及嵌入在其他文件夹中的云端硬盘文件夹。如果您放弃,请参阅此 Node.js 示例应用。
- 相册:编写相册生成工具的初始代码,该工具可将多张图片上传到 Google 云端硬盘,并按时间戳和地理位置信息将这些图片整理到不同的文件夹中。额外加分项:找到一个开源图片处理库,并将每个文件夹中的所有照片拼接起来,以呈现您可能经历过的事件(旅行、晚餐等)。
- 探索 GCP:编写一个将 Google Workspace 和 Google Cloud Platform (GCP) 连接在一起的应用。编写一个工具,用于将 Google 云端硬盘中的图片文件备份到 Google Cloud Storage (GCS),这是另一种“云端文件存储”解决方案。信不信由你,由于 GCS 具有高级客户端库,因此使用起来比 Google 云端硬盘更简单。
- 分析和记录:通过将每张备份的图片传递给 Google Cloud Vision API 并获取该 API 在这些图片中看到的前 3、5 或 10 个“标签”,将您的解决方案扩展到第 3 步。对于每张图片,在 Google 表格中写入一行,其中包含 Cloud Vision 的分析结果以及图片在 GCS 上的备份位置。如果您放弃了,请参阅此 Python Codelab。
10. 其他资源
文档
- Google Drive API 文档(REST API 和 Android 原生 SDK/API)
- 其他 Google Workspace API 文档
- 其他 Google API 文档
- Google API 客户端库
- OAuth2 文档
相关视频和一般视频
- 创建新的 Google API 项目(博文和视频)
- Python 授权样板代码审核(视频)
- 在 Google 云端硬盘中列出文件(视频、博文)
- Google Drive API 视频库
- Launchpad Online 视频系列(...的前身)
- Google Workspace Dev Show 视频系列
资讯和最新动态
其他 Codelab
入门级
- [Apps 脚本] Google Apps 脚本简介
中级
- [Apps 脚本] CLASP Apps 脚本命令行工具
- [Apps 脚本] Gmail 加载项
- [Apps 脚本] Google 文档插件和 GCP Natural Language API
- [Apps 脚本] Hangouts Chat 机器人框架
- [REST API] 自定义报告工具 (Sheets API)
- [REST API] Github 许可 BigQuery 分析器的自定义幻灯片生成器(Google Slides + BigQuery API)
高级
- [REST API] 云端图片处理工作流(Drive、Cloud Storage、Cloud Vision、Sheets API)
参考应用
- Markdown 到 Google 幻灯片转换器(幻灯片 REST API)
11. *应用详细说明
此可选部分可在会话结束后用于自学,以弥补可能出现的任何知识缺口或进行进一步研究。
用于引入库功能的 Python 导入
from __future__ import print_function
from googleapiclient import discovery
from httplib2 import Http
from oauth2client import file, client, tools
- 第一个
import语句可让此代码在 Python 2 上运行,如果您仅使用 Python 3,则可以完全舍弃该语句。 - 一项 Python 样式指南是分隔标准库和第三方模块导入,这就是空行的用途。
- 接下来的三个导入语句从 Google API 客户端库中引入了必要的类和函数,这些都是我们编写此应用所必需的。简而言之,它们的作用如下:
googleapiclient侧重于连接到 Google APIhttplib2提供了一个供应用使用的 HTTP 客户端oauth2client可帮助我们管理 OAuth2 凭据
授权和获取应用凭据
SCOPES = 'https://www.googleapis.com/auth/drive.readonly.metadata'
store = file.Storage('storage.json')
creds = store.get()
if not creds or creds.invalid:
flow = client.flow_from_clientsecrets('client_id.json', SCOPES)
creds = tools.run_flow(flow, store)
DRIVE = discovery.build('drive', 'v3', http=creds.authorize(Http()))
- 应用
SCOPES是指应用会向运行它的用户请求的权限。为了确保用户数据安全,应用必须获得权限才能运行 - 最佳实践是使用应用正常运行所需的最严格的权限。为什么?
- 当应用在您安装或运行它时请求大量权限时,您是否会感到烦恼?您知道吗,现在,您需要向用户请求所有这些权限。使用限制性更强的范围可让用户更放心地安装您的应用,因为您请求的访问权限更少。
- 大多数范围看起来都像长网址,云端硬盘元数据范围也不例外。
SCOPES = 'https://www.googleapis.com/auth/drive.readonly.metadata'
- 应用需要令牌才能与 Google 服务器通信。从 Google 返回的有效令牌将保存在令牌存储文件
storage.json中。如果您不保存这些令牌,则每次运行应用时都必须重新授权。
store = file.Storage('storage.json')
- 此应用首先检查我们是否已在存储空间中拥有有效凭据(请参阅
if语句条件)。
creds = store.get()
if not creds or creds.invalid:
- 如果您没有凭据或凭据已过期,则必须从您下载的
client_id.json文件中的 OAuth 客户端 ID 和密钥通过oauth2client.client.flow_from_clientsecrets()构建新的授权流程。
if not creds or creds.invalid:
flow = client.flow_from_clientsecrets('client_id.json', SCOPES)
- 应用拥有流程后,需要执行该流程,才能向用户显示上述 [通过
oauth2client.tools.run_flow()] 说明和图示的 OAuth2 权限界面。
creds = tools.run_flow(flow, store)
- 点击允许后,用户即表示同意您的应用访问其 Google 云端硬盘文件元数据,并且 Google 服务器会返回用于访问该 API 的令牌。它们以
creds形式返回,并缓存在storage.json文件中。 - 此时,您的应用已拥有有效的凭据,可以进行 API 调用。调用
googleapiclient.discovery.build()会为所使用的 API 创建一个服务端点。 - 如需使用
build(),请传入 API 名称 ('drive') 和所需的版本(目前为'v3')。 - 最后一个形参是用于加密 API 调用的 HTTP 客户端。
DRIVE = discovery.build('drive', 'v3', http=creds.authorize(Http()))
提取并显示前 100 个云端硬盘文件/文件夹和 MIME 类型)
files = DRIVE.files().list().execute().get('files', [])
for f in files:
print(f['name'], f['mimeType'])
- 下一行代码会调用 Drive API 中
files()集合的list()方法来构建请求,该请求会立即通过execute()进行调用。系统会返回一个 Pythondict,我们从中请求'files'键,以获取用户 Google 云端硬盘中的 100 个文件和文件夹名称(如果文件较少,则获取较少的文件名)。 - 为什么是 100?这是
DRIVE.files().list()的默认值。如果您想更改此数量,例如只显示 10 个文件或 1000 个文件,请在请求中添加pageSize参数:DRIVE.files().list(pageSize=10)。如需了解更多选项,请参阅文档。 - 脚本的最后一部分会遍历每个文件,并显示其名称和文件 MIME 类型。
您现在已编写了第一个使用 Google REST API 的应用,恭喜!除了导入和授权代码之外,此脚本实际上只有几行代码(如上所示)。大多数 Google API 的运作方式类似,您只需为您要使用的每个 API 创建服务端点。
在应用中使用多个 Google API
当然可以!您可以在同一应用中使用多个 API。以下是一个 Python 代码段,适用于重用同一 HTTP 客户端并创建服务端点以访问 3 个 Google API(是的,也使用 3 个不同的 SCOPES)的应用:
SCOPES = (
'https://www.googleapis.com/auth/drive',
'https://www.googleapis.com/auth/spreadsheets.readonly',
'https://www.googleapis.com/auth/presentations',
)
. . .
HTTP = creds.authorize(Http())
DRIVE = discovery.build('drive', 'v3', http=HTTP)
SHEETS = discovery.build('sheets', 'v4', http=HTTP)
SLIDES = discovery.build('slides', 'v1', http=HTTP)
我们假设此代码可以成为某个应用的一部分,该应用基于电子表格数据 (Sheets API) 生成多个演示文稿 (Slides API),并使用复制的 (Drive API) 演示文稿模板来生成每个演示文稿。虽然目前还没有此类应用,但您应该能够使用 Google Workspace 团队创建的两个现有示例作为构建块来构建类似的应用:
- 替换幻灯片中的文字和图片(博文和视频)- 使用 Drive API 复制幻灯片模板演示文稿,然后使用 Slides API 更改文字和图片占位符
- 根据电子表格数据生成幻灯片(博文和视频)- 从电子表格 (Sheets API) 读取数据,并根据该数据创建幻灯片 (Slides API)
您的挑战:构建该应用!
12. *高级开发者控制台使用
在此可选部分中,我们将介绍如何在开发者控制台中创建项目、启用 API 和获取凭据,所有操作都无需像 Codelab 中那样使用向导。此方法适合有一定经验的用户,他们可以手动操作,或者希望学习如何手动操作。
在 Cloud 控制台中指定项目
无论何时使用 Google API 编写应用,您都需要拥有一个项目。您可以重复使用现有项目,也可以创建新项目。此操作在 Cloud 控制台中完成。部分 Codelab 提供了一个魔法链接(即类似设置向导),可让您快速开始,跳过许多必需的步骤。但并非所有项目都如此,因此以下内容旨在提供有关如何创建项目的一般说明。
只要您已使用 Google 凭据登录,并且在 Cloud 控制台顶部看到项目下拉菜单,就可以在 Cloud 控制台中的大多数屏幕上创建项目。请注意,此处的大多数屏幕截图均来自 API 管理器(也称为开发者控制台),您只需点击左侧导航栏中的“API 管理器”,或直接在浏览器中输入 console.developers.google.com 即可轻松访问该管理器。
- 如果您还没有任何项目,系统可能会将您转到...
- 信息中心页面:
- 库页面:
- 或完全空白的页面:
如果您遇到第 3 种情况,只需刷新浏览器即可前往媒体库页面。
- 无论您是在信息中心页面还是库页面上,都可以点击页面顶部的项目选择器:
- 接下来,您会看到选择器对话框。点击右侧的“+”以创建新项目:
- 点击“+”后,系统会显示新项目页面。所有个人用户账号默认可创建 12 个项目。在创建第一个项目之前,您必须接受 Google API 服务条款:
完成此操作后,在创建未来的项目时,系统不会再显示电子邮件邀请和《服务条款》问题:
5. 如果您之前创建过至少一个项目,那么登录后,系统会将您带到您上次处理的项目的控制面板。然后,像选择 Select a project > + 一样,创建一个新项目。6. 创建新项目后,您将返回信息中心页面:
您已成功创建项目,现在可以选择要用于项目的 API,继续下一步操作。
启用 Google API
您必须先启用 Google API,然后才能开始使用它们。以下示例展示了如何启用 Cloud Vision API。在本 Codelab 中,您可能会使用一个或多个 API,并且应按照类似的步骤在启用它们之后再使用。
从 Cloud Shell
您可以使用 Cloud Shell 通过以下命令启用该 API:
gcloud services enable vision.googleapis.com
通过 Cloud 控制台
您还可以在 API 管理器中启用 Vision API。在 Cloud 控制台中,前往 API 管理器,然后选择“库”。
在搜索栏中,开始输入“vision”,然后选择显示的 Vision API。您在输入时,系统可能会显示类似如下内容:
选择 Cloud Vision API 以显示您在下方看到的对话框,然后点击“启用”按钮:
费用
虽然许多 Google API 可以免费使用,但使用 GCP(产品和 API)并非免费。启用 Vision API(如上所述)时,系统可能会要求您提供有效的结算账号。用户应先参考 Vision API 的定价信息,然后再启用该功能。请注意,某些 Google Cloud Platform (GCP) 产品提供“始终免费”层级,只有当您超出此层级的使用量时,才会产生费用。在本 Codelab 中,每次调用 Vision API 都会计入该免费层级,只要您保持在总限额(每月)内,就不会产生任何费用。
部分 Google API,即 Google Workspace 的使用费用包含在每月订阅中,因此使用 Gmail、Google 云端硬盘、Google 日历、Google 文档、Google 表格和 Google 幻灯片 API 时不会直接产生费用。不同 Google 产品的结算方式各不相同,因此请务必参阅相应 API 的文档以了解相关信息。
摘要
在此 Codelab 中,您只需启用 Google Drive API,因此请按照上述说明搜索“Drive”。启用后,继续执行后续步骤。
授权 API 请求(用户授权)
授权简介(以及部分身份验证)
为了向 API 发出请求,您的应用需要具有适当的授权。身份验证是一个类似的词,它描述了登录凭据,即您在使用登录名和密码登录 Google 账号时进行身份验证。一旦通过身份验证,下一步就是授权您(或者更确切地说是您的代码)访问数据,例如 Cloud Storage 上的 Blob 文件或 Google 云端硬盘上的用户个人文件。
Google API 支持多种类型的授权,但对于 Google Workspace API 用户来说,最常见的是用户授权,因为此 Codelab 中的示例应用会访问属于最终用户的数据。这些最终用户必须授予您的应用访问其数据的权限。这意味着您的代码必须获取用户账号 OAuth2 凭据。
如需获取用户授权的 OAuth2 凭据,请返回 API 管理器,然后选择左侧导航栏上的“凭据”标签页:
访问该页面后,您会在以下三个部分看到您的所有凭据:
第一个用于 API 密钥,第二个是 OAuth 2.0 客户端 ID,最后一个是 OAuth2 服务账号:我们使用的是第二个。
创建凭据
在“凭据”页面上,点击顶部的 + 创建凭据按钮,系统随即会显示一个对话框,您可以在其中选择“OAuth 客户端 ID”:
在下一个界面中,您可以执行两项操作:配置应用的授权“权限请求页面”和选择应用类型:
如果您尚未设置权限请求页面,您会在控制台中看到警告,并且需要立即设置。(如果已设置权限请求页面,请跳过以下步骤。)
OAuth 权限请求页面
点击“配置权限请求页面”,然后选择“外部”应用(如果您是 Google Workspace 客户,则选择“内部”):
请注意,在本练习中,选择哪个并不重要,因为您无法发布 Codelab 示例。大多数人会选择“外部”,然后进入一个更复杂的界面,但您实际上只需要填写顶部的“应用名称”字段:
目前,您只需要一个应用名称,因此请选择一个能反映您正在进行的 Codelab 的名称,然后点击保存。
创建 OAuth 客户端 ID(用户账号授权)
现在,返回到“凭据”标签页以创建 OAuth2 客户端 ID。您可以在此处看到可以创建的各种 OAuth 客户端 ID:
我们正在开发一个命令行工具,属于其他,因此请选择该选项,然后点击创建按钮。选择反映您要创建的应用的客户端 ID 名称,或者直接采用默认名称,该名称通常为“其他客户端 N”。
保存您的凭据
- 系统会显示一个包含新凭据的对话框;点击确定即可关闭该对话框
- 返回“凭据”页面,向下滚动到“OAuth2 客户端 ID”部分,然后点击新创建的客户端 ID 最右侧的下载图标
。
- 系统会打开一个对话框,用于保存名为
client_secret-LONG-HASH-STRING.apps.googleusercontent.com.json的文件,该文件很可能会保存到您的下载内容文件夹中。我们建议将其缩短为更简单的名称,例如client_secret.json(这是示例应用使用的名称),然后将其保存到您将在本 Codelab 中创建示例应用的目录/文件夹中。