1. 使用 Google Workspace API
此 Codelab 将介绍如何使用 Google Workspace(以前称为 G Suite)基于 HTTP 的 RESTful API。为简洁起见,此示例将使用 Python 编写,但您也可以选择使用自己喜欢的开发语言。您将了解一些入门主题,例如如何使用开发者控制台创建/管理项目、获取授权凭据以及安装 API 客户端库。完成表单设置后,您将编写一个应用,用于显示前 100 个文件和将文件夹复制到 Google 云端硬盘中。
学习内容
- 使用 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?
<ph type="x-smartling-placeholder">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 和 Python 3,但我们建议您尽快迁移到 3.x。
Cloud Shell 方便用户直接从 Cloud 控制台使用,不需要本地开发环境,因此可以使用网络浏览器完全在云端完成本教程。如果您正在开发或计划使用 GCP 产品进行开发或继续开发,Cloud Shell 会特别有用。API。更具体地说,对于此 Codelab,Cloud Shell 已预安装了这两个版本的 Python。
Cloud Shell 还安装了 IPython。IPython 是一款更高级的交互式 Python 解释器,我们推荐使用,尤其是您数据科学或机器学习社区的成员。如果您使用过,则 IPython 是 Jupyter 笔记本以及由 Google Research 托管的 Jupyter 笔记本 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 和3,我们建议您安装 Python 3 virtualenv,您可以使用 -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 是入门级 Codelab,我们假设您是初次使用 Google 和 Google Workspace API。如果您已经具备创建项目和创建用户授权“OAuth 客户端 ID”的经验。如果是这样,请创建或重复使用现有项目、创建或重复使用现有的 OAuth 客户端 ID,并跳过接下来的两个单元,直接前往“显示您的云端硬盘文件和文件夹应用”也可以直接跳到“高级 devconsole 使用”部分,在指导较少的指导下了解这些步骤。
6. 在 Cloud 控制台中指定项目
使用 Google API 的应用需要一个项目。这些项目在 Google Cloud Developers Console(简称“devconsole”)中管理。在此 Codelab 中,我们只使用 Google Drive API,因此有一个魔法链接(见第 1 步下方):
- 带您进入开发者控制台
- 逐步介绍如何创建新项目(或选择现有项目),以及
- 自动启用 Drive API
那就开始吧!
- 转到 console.developers.google.com/start/api?id=drive 并登录您的 Google 账号。
- 如果您还没有任何项目,则会看到此屏幕,要求您接受 Google API 服务条款:
接受条款后,新建一个名为“My Project”的项目系统会自动启用 Drive API。3. 如果您已经创建了一个项目(可能是之前的 Codelab?),则会看到此屏幕:。当您点击 Create a project 下拉菜单时,请选择一个现有项目或真的创建一个新项目。在您做出选择(新项目或现有项目)后,系统将自动为您启用 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:”
在下一界面中,您可以执行 2 项操作:配置应用的授权“同意屏幕”并选择应用类型:
如果您尚未设置同意屏幕,则会在控制台中看到警告,并且需要立即设置。(如果您已设置同意屏幕,请跳过这些后续步骤)。
OAuth 权限请求页面
点击“配置同意屏幕”在该规则中,您需要选择一个“外部”应用(如果您是 Google Workspace [以前称为“Google Workspace”] 客户,则为“内部”):
请注意,在本练习中,选择哪一种并不重要,因为您无法发布 Codelab 示例。大多数人会选择“外部”您将要进入一个更为复杂的屏幕 但实际上只需要填写“Application name”以下字段:
此时,您只需要一个应用名称,因此请选择一个能够反映您正在进行的 Codelab 操作的名称,然后点击 Save(保存)。
创建 OAuth 客户端 ID(用户账号身份验证)
现在,返回“凭据”标签页以创建 OAuth2 客户端 ID。在这里,您会看到您可以创建的各种 OAuth 客户端 ID:
我们正在开发一个命令行工具,即 Other,请选择该工具,然后点击创建按钮。选择客户端 ID 名称,该名称应反映您正在创建的应用,或直接使用默认名称,通常为“其他客户端 N”。
保存凭据
- 系统会显示一个包含新凭据的对话框;点击确定以关闭
- 返回“凭据”页面,向下滚动到“OAuth2 客户端 ID”部分中,找到并点击新创建的客户端 ID 最右下角的下载图标 。
- 此操作会打开一个对话框,以保存名为
client_secret-
LONG-HASH-STRING
.apps.googleusercontent.com.json
的文件,并很可能将其保存到您的 Downloads 文件夹中。我们建议将名称缩短为更简洁的名称,例如client_secret.json
(这是示例应用使用的),然后将其保存到您将在此 Codelab 中创建示例应用的目录/文件夹中。
摘要
有了凭据,您现在就可以从应用访问 Drive API 了。请注意,OAuth 客户端 ID 的用途是授权您的应用访问其在 Google 云端硬盘中的数据。
注意:有关创建项目、启用 API 以及手动(即不使用“向导”)获取凭据的更多详情。
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 云端硬盘中的 MIMEtype 和显示屏
注意:此 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 流程对话框窗口中指定的语言。用户必须明确授权所请求的权限,否则“运行流程”部分代码将引发异常,并且脚本不再继续运行。
注意:有些用户使用多个浏览器,因此授权请求可能会在非首选浏览器中弹出。如果是这种情况,请从您不想使用的浏览器窗口中复制整个网址,并将其粘贴到您希望使用的浏览器的地址栏中。
通过 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 . . .
请注意,在后续执行中,系统不再提示您进行授权(因为 auth 库已缓存),您可以直接输出。第一次在终端中看到您的文档,是不是很激动?我们是这么认为的!
9. 总结
现在,您可以了解有关 Drive API 的更多功能,或探索其他 Google Workspace(Gmail、Google 文档、表格、幻灯片、日历)和其他 Google API(地图、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 先进的客户端库,使用起来会比云端硬盘更加简单。
- 分析与record:将您的解决方案扩展到第 3 个,方法是分析备份的每张图片,方法是将其传递给 Google Cloud Vision API 并获取最前面的(3、5、10 个)“标签”API 在这些图片中看到的内容。对于每张图片,在 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 在线视频系列(...的前身)
- Google Workspace 开发者秀视频系列
新闻和最新动态
其他 Codelab
入门级
- [Apps 脚本] Google Apps 脚本简介
中级
- [Apps 脚本] CLASP Apps 脚本命令行工具
- [Apps 脚本] Gmail 插件
- [Apps 脚本] 文档插件和GCP Natural Language API
- [Apps 脚本] Hangouts Chat 聊天机器人框架
- [REST API] 自定义报告工具 (Sheets API)
- [REST API] GitHub 许可 BigQuery 分析器的自定义幻灯片生成器(幻灯片 + BigQuery API)
高级
- [REST API] 云图片处理工作流(Drive、Cloud Storage、Cloud Vision、Sheets API)
参考应用
- Markdown 到 Google 幻灯片转换器 (Slides 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 样式的一条准则是将标准库和第三方模块导入分开,这就是空白行的作用。
- 接下来的三个导入会引入必要的类和函数...在编写这款应用时需要用到所有函数。简而言之,它们的用途如下:
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:
- 如果您没有凭据或凭据已过期,则必须 [通过
oauth2client.client.flow_from_clientsecrets()
] 使用您的 OAuth 客户端 ID 和Secret 存储在您下载的client_id.json
文件中]。
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 个云端硬盘文件/文件夹,以及MIMEtypes)
files = DRIVE.files().list().execute().get('files', [])
for f in files:
print(f['name'], f['mimeType'])
- 下一行代码会调用 Drive API 的
files()
集合中的list()
方法,以构建请求,系统会立即使用execute()
调用该请求。返回 Pythondict
,我们从中请求'files'
键以获取 100 文件,用户的 Google 云端硬盘中的文件夹名称(如果文件较少,则可以减少文件夹名称)。 - 为什么是 100?这是
DRIVE.files().list()
中的默认值。如果您想更改此数值(例如,仅 10 个文件或 1000),请在请求中添加pageSize
参数:DRIVE.files().list(pageSize=10)
。如需了解更多选项,请参阅此文档。 - 脚本的最后部分会循环遍历每个文件,并显示它们的名称和MIMEtype 文件。
现在,您已经编写了第一个使用 Google REST API 的应用。恭喜!除了导入和授权代码之外,此脚本实际上只是几行代码(如上文所示)。大多数 Google API 都以类似的方式运行,您只需为要使用的每个 API 创建服务端点。
在应用中使用多个 Google API
当然,您可以在同一个应用中使用多个 API!以下 Python 代码段展示了某个应用,该应用重复使用了同一个 HTTP 客户端,并为三个 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 复制幻灯片模板演示文稿,然后使用幻灯片 API 更改文本和图片占位符
- 根据电子表格数据生成幻灯片(博文和视频)- 从电子表格读取数据 (Sheets API) 并根据这些数据创建幻灯片 (Slides API)
您的挑战:构建该应用!
12. *开发控制台高级用法
在此可选部分中,我们将介绍如何在 devconsole 中创建项目、启用 API 以及获取凭据,所有这些操作都不像本 Codelab 中的上述向导那样使用。这适合于能够熟练掌握手动操作或希望了解如何执行此操作的中级用户。
在 Cloud 控制台中指定项目
每当您使用 Google API 编写应用时,都需要有一个项目。您可以重复使用现有项目,也可以创建一个新项目。该操作是在 Cloud 控制台中进行的。某些 Codelab 会提供一个魔力链接(例如设置向导),让您跳过许多必需的步骤,快速上手。但并非所有示例都支持,因此这些只是关于如何创建项目的一般说明。
只要您使用 Google 凭据登录,并在控制台顶部看到一个项目下拉菜单,您就可以通过 Cloud 控制台中的大多数屏幕创建项目。请注意,此处的大多数屏幕截图都是通过 API 管理器(也称为 Developers Console)获取的(只需点击左侧导航栏中的“API 管理器”或直接将浏览器指向 console.developers.google.com 即可找到)。
- 如果您还没有任何项目,可能会跳转到...
- 信息中心页面:
- 库页面:
- 或完全空白的页面:如果遇到第 3 页,只需刷新浏览器即可转到资源库页面。
- 无论您在信息中心页面还是库页面上,点击页面顶部的项目选择器:
- 接下来,您将获得选择器对话框。点击“+”创建新项目:
- 点击“+”后,系统会显示一个新建项目页面。默认情况下,所有消费者账号都有 12 个项目。创建您的第一个项目之前,您必须接受 Google API 服务条款:
完成上述操作后,以后创建项目时,您就不会再看到与电子邮件征求和服务条款相关的问题了:
5.如果您过去至少创建了一个项目,那么登录后,系统会将您转到您上次处理的项目的信息中心。在这里创建一个新项目,就像选择选择项目一样+。6.创建新项目后,您将回到信息中心页面:
现在,您已成功创建项目,只需选择要用于项目的 API 即可继续。
启用 Google API
您必须先启用 Google API,然后才能开始使用它们。以下示例展示了如何启用 Cloud Vision API。在此 Codelab 中,您可能使用了一个或多个 API,并且应该按照类似的步骤启用这些 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:”
在下一界面中,您可以执行 2 项操作:配置应用的授权“同意屏幕”并选择应用类型:
如果您尚未设置同意屏幕,则会在控制台中看到警告,并且需要立即设置。(如果您已设置同意屏幕,请跳过这些后续步骤)。
OAuth 权限请求页面
点击“配置同意屏幕”在该规则中,您需要选择一个“外部”应用(如果您是 Google Workspace 客户,则为“内部”):
请注意,在本练习中,选择哪一种并不重要,因为您无法发布 Codelab 示例。大多数人会选择“外部”您将要进入一个更为复杂的屏幕 但实际上只需要填写“Application name”以下字段:
此时,您只需要一个应用名称,因此请选择一个能够反映您正在进行的 Codelab 操作的名称,然后点击 Save(保存)。
创建 OAuth 客户端 ID(用户账号身份验证)
现在,返回“凭据”标签页以创建 OAuth2 客户端 ID。在这里,您会看到您可以创建的各种 OAuth 客户端 ID:
我们正在开发一个命令行工具,即 Other,请选择该工具,然后点击创建按钮。选择客户端 ID 名称,该名称应反映您正在创建的应用,或直接使用默认名称,通常为“其他客户端 N”。
保存凭据
- 系统会显示一个包含新凭据的对话框;点击确定以关闭
- 返回“凭据”页面,向下滚动到“OAuth2 客户端 ID”部分找到并点击新建的客户端 ID 最右下方的下载图标 。
- 此操作会打开一个对话框,以保存名为
client_secret-
LONG-HASH-STRING
.apps.googleusercontent.com.json
的文件,并很可能将其保存到您的 Downloads 文件夹中。我们建议将名称缩短为更简洁的名称,例如client_secret.json
(这是示例应用使用的),然后将其保存到您将在此 Codelab 中创建示例应用的目录/文件夹中。