顯示前 100 個檔案 &Google 雲端硬碟中的資料夾

1. 使用 Google Workspace API

本程式碼研究室將說明如何使用以 HTTP 為基礎的 RESTful API (原名為 G Suite)。這個範例將以 Python 執行,用意是簡潔與可用性,但您也可以選擇使用慣用的開發語言。課程結束後會介紹一些入門主題,像是如何使用開發人員控制台建立/管理專案、取得授權憑證,以及安裝 API 用戶端程式庫。因此請設計一個應用程式,顯示前 100 個檔案和前 100 個檔案Google 雲端硬碟中的資料夾

課程內容

  • 使用 Google/Cloud Developers Console 建立專案
  • 取得並在應用程式中使用 OAuth2 應用程式憑證
  • 瞭解如何使用 Google API 用戶端程式庫
  • 使用 Google &Google Workspace API
  • 使用 Google Drive API 取得檔案和資料夾資訊

軟硬體需求

  • 網際網路和網路瀏覽器的存取權
  • Google 帳戶 (Google Workspace 帳戶可能需要經過管理員核准)
  • 熟悉 Linux 與Mac OS X
  • 可使用程式碼編輯器或殼層指令建立來源檔案。
  • Python (2 或 3) 的基本技能,但您可以使用任何支援的語言
  • Google 雲端硬碟中的部分檔案和資料夾

2. 問卷調查

您會如何使用本程式碼研究室教學課程?

僅供閱讀 閱讀並完成練習

針對 Google Workspace 開發人員工具和 Google Workspace 開發人員工具的體驗,您會給予什麼評價?API?

新手 中級 還算容易

3. 總覽

在本程式碼研究室中,您可以瞭解如何:

  1. 下載 Python 適用的 Google API 用戶端程式庫
  2. 在 Google/Cloud Developers Console 中建立新專案
  3. 取得應用程式的必要憑證
  4. 使用這些憑證存取 Google Drive API

如果您不想使用 Python,歡迎您在慣用的開發工具 (支援語言的用戶端程式庫) 中實作程式碼研究室 (可在這裡取得支援語言的用戶端程式庫),直接將 Python 範例參照為 (可執行) 虛擬程式碼。

4. 確認 Python 環境

本程式碼研究室需要使用 Python 語言 (雖然 Google API 用戶端程式庫支援多種語言,因此您可以在慣用的開發工具中建構對等項目,然後直接使用 Python 做為虛擬程式碼)。特別是本程式碼研究室支援 Python 2 和 3,但建議您盡快改用 3.x。

使用者可以直接在 Cloud 控制台中使用 Cloud Shell,而且不需使用本機開發環境,因此本教學課程可協助您完全在雲端使用網路瀏覽器完成教學課程。如果您是透過 GCP 產品開發或繼續開發產品,或是打算繼續開發產品,Cloud Shell 就能派上用場相互整合針對本程式碼研究室,更具體來說,Cloud Shell 已預先安裝這兩個版本的 Python。

Cloud Shell 也已安裝 IPython,因此我們建議您在採用高階的互動式 Python 解譯器時加以運用,特別是如果您是數據資料學或機器學習社群的成員,更應該採取這個做法。如果您採用的話,Jupyter NotebooksColab 和 Jupyter Notebook 的預設解譯器都是 IPython。

IPython 優先採用 Python 3 解譯器,但如果無法使用 3.x,則會改用 Python 2。您可以從 Cloud Shell 存取 IPython,但也可以在本機開發環境中安裝。請按 ^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.
>>>

本程式碼研究室也假設您擁有 pip 安裝工具 (Python 套件管理員和依附元件解析器)。隨附 2.7.9 以上版本或 3.4 以上版本。如果您的 Python 版本較舊,請參閱這份指南的安裝操作說明。視您的權限而定,您可能需要擁有 sudo 或超級使用者存取權,但一般情況都不例外。您也可以明確使用 pip2pip3,針對特定 Python 版本執行 pip

本程式碼研究室的其餘部分假設您使用的是 Python 3;如果這些操作說明與 3.x 有顯著差異,我們將會提供 Python 2 適用的特定操作說明。

*建立及使用虛擬環境

本節為選用項目,只有必須在本程式碼研究室中使用虛擬環境的使用者 (如上方的警告側欄) 才需要。如果您的電腦只有 Python 3,可以直接發出這個指令,建立一個名為 my_env 的 virtualenv (您可以視需要選擇其他名稱):

virtualenv my_env

不過,如果您同時擁有 Python 2 和在電腦上,建議您安裝 Python 3 virtualenv 以使用 -p flag 執行,如下所示:

virtualenv -p python3 my_env

按一下「啟用」即可輸入新建立的 virtualenv如下所示:

source my_env/bin/activate

接著觀察殼層提示,並在前面加上環境名稱,例如

(my_env) $ 

現在,您應該能夠 pip install 任何必要套件、在此漸進中執行程式碼等等。另一個好處是,如果完全搞不好、遇到 Python 安裝毀損的情況,可以減掉整個環境,不會影響系統的其他部分。

5. 安裝 Python 適用的 Google API 用戶端程式庫

本程式碼研究室需要使用 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"

如果您是從 Cloud Shell 改用 Python 2,您將會收到支援功能,說明已淘汰的支援功能:

*******************************************************************************
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 通訊!

摘要

這是入門程式碼研究室,因此假設是第一次使用 Google 和 Google Workspace API。如果您已有建立專案及建立使用者授權「OAuth 用戶端 ID」的經驗,若是如此,請建立或重複使用現有專案,建立或重複使用現有的 OAuth 用戶端 ID,然後略過接下來兩個模組,直接跳到「顯示雲端硬碟檔案與資料夾應用程式」也可以跳到「進階開發控制台用量」部分,以較少的指南檢查這些步驟。

6. 在 Cloud 控制台中指定專案

使用 Google API 的應用程式必須擁有專案。您可以在 Google Cloud Developers Console 或「開發人員主控台」中管理這些應用程式。在本程式碼研究室中,我們只會使用 Google Drive API,因此請使用步驟 1 中的魔術連結:

  • 前往 Devconsole
  • 逐步引導您建立新專案 (或選擇現有專案)。
  • 自動建立 Drive API

開始吧!

  1. 前往 console.developers.google.com/start/api?id=drive 並登入您的 Google 帳戶。
  2. 如果您尚未建立任何專案,系統會顯示以下畫面,接受《Google API 服務條款》:

e3b2076ba58a7cd7.png 接受條款後,名稱為「My Project」的新專案,並自動啟用 Drive API。3. 如果您已建立專案 (也許先前使用的程式碼研究室),您將會看到以下畫面:50b3b8ace6721f1f.png 當您點選「Create a project」下拉式選單時,選擇現有專案或實際建立新專案。69db3867445ad9e5.png選取好選取項目 (新專案或現有專案) 後,系統將自動啟用 Drive API。4. 確認已啟用 Drive API 後,請進行下列確認:365e7de1377493bb.png 5.點選「前往憑證」,前往下一步。

7. *授權 API 要求 (使用者授權)

如果您已建立使用者帳戶授權憑證,並熟悉這項程序,可以略過這個部分。這與採用的服務帳戶授權不同,因此請繼續參閱下文。

授權簡介 (加上部分驗證)

如要對 API 提出要求,應用程式必須具備適當的授權。「驗證」一詞是指登入憑證。登入 Google 帳戶時,您必須自行驗證;密碼。驗證完畢後,下一步是您授權存取資料 (例如 Cloud Storage 中的 blob 檔案或 Google 雲端硬碟中的使用者個人檔案) 是否

Google API 支援數種授權類型,但 Google Workspace API 使用者最常用的一種是使用者授權,因為本程式碼研究室中的範例應用程式會存取使用者擁有的資料。這些使用者必須授權「您的應用程式」存取自己的資料。這表示您的程式碼必須取得使用者帳戶的 OAuth2 憑證。

如要取得使用者授權的 OAuth2 憑證,請返回 API 管理員頁面,然後選取「憑證」分頁

Y33PZ_rJC1y7NH7Rrvq1kN_WxZ9CppDGJK8tTSaha298Jlm5pMqgnyweIO4oX34fcLy0_VI4gihYu5wpEM_LeJg1iDAFoidhUVyfqJX3QTzODQ_OGjHLXYBxPpUvihCJi9JGwvMREw

進入該頁面後,您就會在三個不同的部分看到所有憑證:

ComE4qh76dwZbIehkDUm1QawHGia_qVe7w7rkmgbeo_wjWS--kqXCt4_zvm55iy_RXA8dKYKvBxIKazkcYQ8871SA_kNslbvum_n1Ju4k9qJJSMtDhPAnofcvIlqlKm1nu7PBQhmEg

第一個是 API 金鑰、第二個 OAuth 2.0 用戶端 ID 和最後一個 OAuth2 服務帳戶,這裡使用的是中間的帳戶。

建立憑證

在「憑證」頁面上,按一下頂端的「+ 建立憑證」按鈕,畫面上就會顯示對話方塊,您可以從中選擇「OAuth 用戶端 ID」:

C7jTddfrczo3GewPGCxbxX13GawtFc6FGvAPFusPc_IW-tr5M6xgXd1OzOHOUTo86WDa9fXiCITogv9b3wAgOcYM7xS3AmVNaPdTxbAynIe_sia2_x3LEPsBrdbX8NjeI2WaHRioOA

在下一個畫面,您有兩個動作:設定應用程式的授權「同意畫面」並選擇應用程式類型:

El9_aqPQ6Q9hOsOp3JUC5qnCm_A_BVI-oCEfPk_MsvybnWBmC5lT6CtXSoZ7EQoFzrcBEzo4zF9s8CbhXyo0e-eSY3pZ1zg0BRvT0YssMMhbzEG-gP_jiO8v9q9HYTjg-QW5jJ0RDA

如果尚未設定同意畫面,您會在控制台中看到警示,必須立即完成。(如果已設定同意畫面,請略過這些後續步驟)。

按一下「設定同意畫面」您可以在其中選取「外部」應用程式 (如果您是 Google Workspace [舊稱「Google Workspace」] 客戶,則稱「內部」):

5w-9R6gPvUHFzODZxXy-0GEhL8ZGDGNea3QtMp1FFYDv5DJ_MIDD21NEh3CzI-GKNzy6bkhH7bohxOG8icQTegiWlavOQhQqhSy7K31Ma3YTI9aAP3P-LmTBanPslX1cnjKLVZBi8A

請注意,就本練習而言,由於您不是發布程式碼研究室範例,因此您可以自行選擇。大部分的人會選取「外部」但只要輸入「應用程式名稱」即可」欄位:

8e9z_RQz8lumYbDIcBvm57_Gpptn9uhrVQHoRzJ01AJNOFmXloDO7Eg3hhzJZZIU2F5rR0MxTCw-oXVFCq683xUwD4O33pXeuFsOMtM8EZhyjDoYc8Kv4hEoaG0Ztq9ePx6De7YmfA

目前,您只需要使用應用程式名稱,因此請選擇能反映該程式碼研究室的人員,然後按一下「Save」

正在建立 OAuth 用戶端 ID (使用者帳戶驗證)

現在,請返回「憑證」分頁建立 OAuth2 用戶端 ID。您會看到各種可建立的 OAuth 用戶端 ID:

f8reuhsxOUNLcVrEIyRVsmP_fX_ceIlLvEKql1YHwSPW9jk9Mm9fJ0UlfUoi8eRN3QQXar4xtpo071zj6LSczNN7TYY8zB96Dn6ICZuvCAtjIgJSKdMSlX-ZhMuSWFpxxv661aUemw

我們正在開發一款指令列工具 (其他),因此請選擇該工具,然後按一下「Create」按鈕。請選擇符合所建立應用程式的用戶端 ID 名稱,或直接使用預設名稱 (通常為「其他用戶端 N」)。

儲存憑證

  1. 畫面上會顯示包含新憑證的對話方塊。按一下「確定」關閉

rAwekj_GNEuVwGbZOYYlGDQjlu4flE61OPEZIUmwMI5vGi3W365UwVCxi0mVNhg4WZSSczZywrZZ6NDM_U0FJ4b-TOIMEC189uybOJjgn8F_axesVMopel9RlehRBXdEFhN4d41WGQ

  1. 返回「憑證」頁面,向下捲動至「OAuth2 用戶端 ID」部分中,找出並按一下剛建立用戶端 ID 最右下角的下載圖示 aAmje6kT_xSUM4BKIlPREpjosx7C_xxwpWqBgiGVfVWxQ8nnQOfxTPhuU0QwSnmbjykZffGrqyP1nnKrEQ7D7OqYaGw_Uzscs9gX2RwwP4AmvtHIiTFLa0gkprzJSjG9pQSx7HtmSQx-vb-sKZy-X8a1X4uTsBWotSd4wn0PGt4mHMNv6DUrq5J5ihpujUyTiIVr5SHw0p2ZDy0KTP-zqOaFX-Az9BYDWG90KNFmsRLTUOo1mUVk7dYRJiK3VwYJNU0bbxjsbbpqcTr5_oLw
  2. 系統會開啟對話方塊,讓您儲存 client_secret-LONG-HASH-STRING.apps.googleusercontent.com.json 檔案,該檔案可能位於「下載」資料夾。建議您縮短為較容易使用的名稱 (例如 client_secret.json,這是範例應用程式使用的名稱),然後將其儲存至您將在本程式碼研究室中建立範例應用程式的目錄/資料夾。

摘要

有了內部憑證,您現在就能從應用程式存取 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'])

應用程式結構

這個應用程式有三個主要部分:

  1. 提供 Python 匯入功能,帶來程式庫功能
  2. 取得應用程式憑證
  3. 擷取檔案和資料夾名稱與使用者 Google 雲端硬碟的 MIMEtype 及螢幕

注意:在本程式碼研究室課程結束後,如需深入瞭解程式碼和逐行說明,可以稍後再深入研究。

執行應用程式

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 權限對話方塊:

c2648f37bcb7a0c1.png

應用程式會透過 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 中輸入的驗證碼:

f6da2c335fb7c6a.png

剪下這段程式碼並貼入終端機視窗。

摘要

當使用者點選「允許」和/或將驗證碼貼入提示後,應用程式就會 (繼續) 執行,因此看到輸出內容會包含雲端硬碟檔案/資料夾及其 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. 結語

您現在可以進一步瞭解 Drive API 功能,或探索其他 Google Workspace (Gmail、Google 文件、試算表、簡報、日曆) 和其他 Google API (地圖、數據分析、YouTube 等)。恭喜你完成這趟旅程!

您也可以在 GitHub 存放區的 github.com/googlecodelabs/gsuite-apis-intro 中找到本程式碼研究室提供的程式碼。(我們的目標是讓本程式碼研究室與存放區保持同步)。準備好進行下一步了嗎?歡迎參考下列各項資源,進一步瞭解本程式碼研究室涵蓋的內容。您也可以依需求探索其他方法,透過程式輔助方式使用 Google 技術。

如前文提示:如果您不是一般 Python 開發人員,我們邀請您以您慣用的開發語言重新執行這個程式碼研究室範例。您可以前往這裡查看支援語言的用戶端程式庫。

其他研究

您已累積過 Drive API 的使用經驗,建議您參考下列練習,進一步培養技能:

  1. ZIP 檔案:編寫的應用程式,可將多個 ZIP 封存檔即時解壓縮到雲端硬碟,即時解壓縮,讓每個 ZIP 檔案名稱都成為這些檔案所在資料夾的名稱。EXTRA CREDIT:支援其他 ZIP 檔案 (內嵌在其他資料夾中的雲端硬碟資料夾) 中的遞迴 ZIP 封存檔。如果您放棄,請參閱這個 Node.js 範例應用程式
  2. 相簿:撰寫相簿生成工具的開頭,此工具可將多張圖片上傳到 Google 雲端硬碟,依時間戳記和時間戳記將圖片分門別類地理位置。額外抵免額: 尋找開放原始碼圖片操作庫,並拼接每個資料夾中的所有相片,來代表你可能遇到過的活動 (旅遊、晚餐等等)。
  3. 探索 GCP:編寫可將 Google Workspace 和 Google Cloud Platform (GCP) 連結的應用程式。編寫可將 Google 雲端硬碟中的備份圖片檔,並寫入 Google Cloud Storage (GCS)、另一個「雲端檔案儲存空間」的工具解決方案事實上,GCS 擁有先進的用戶端程式庫,因此使用 GCS 會比 Google 雲端硬碟來得簡單。
  4. 分析與紀錄:將每張備份圖片傳送至 Google Cloud Vision API 並顯示在最前面 (3、5、10 個)「標籤」,藉此分析每張備份的圖片,將解決方案擴展到 #3。API 會在圖片中看到的內容在 Google 試算表中為每張圖片編寫一列,內含來自 Cloud Vision 的分析資料,以及圖片在 GCS 備份的位置。如果您放棄,請參閱這個 Python 程式碼研究室

10. 其他資源

說明文件

新聞與動態

其他程式碼研究室

入門

中級

進階

參考應用程式

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 API
  • httplib2 會提供 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 建構新的授權流程client_id.json您所下載的 Secret 物件]
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()))

擷取(&S)顯示前 100 個雲端硬碟檔案/資料夾和MIMEtypes)

files = DRIVE.files().list().execute().get('files', [])
for f in files:
    print(f['name'], f['mimeType'])
  • 下一行程式碼會呼叫 Drive API 的 files() 集合中的 list() 方法以建構要求,此要求會立即使用 execute() 呼叫。會傳回 Python dict,我們要求提供 'files' 鍵來取得 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 用戶端,並為三個 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. *進階開發主控台使用方式

在本節 (選用) 部分中,我們會說明如何在 Developer Console 中建立專案、啟用 API 及取得憑證,完全「不需要」使用程式碼研究室中的精靈。這種課程適合中等程度的使用者手動操作,或想瞭解如何操作。

在 Cloud 控制台中指定專案

每次使用 Google API 編寫應用程式時,都必須擁有專案。您可以重複使用現有專案,也可以建立新專案。這會在 Cloud 控制台中進行。部分程式碼研究室會提供魔法連結 (例如設定精靈),協助您快速上手,略過許多必要步驟。不過並非全部,因此只能做為建立專案的一般操作說明。

只要使用 Google 憑證登入,並在控制台頂端顯示專案下拉式選單,您就可以在 Cloud 控制台中大部分的畫面建立專案。請注意,這裡的大多數螢幕截圖都擷取自 API Manager,也就是 Developers Console (您可以直接點選左側導覽列中的「API 管理員」,或直接將瀏覽器指向 console.developers.google.com,即可存取這些螢幕截圖。

  1. 如果您尚未建立任何專案,系統可能會將您導向...
  2. 「Dashboard」(資訊主頁) 頁面:Gwkk2zcSPOHlRzCGsmBDqfdsEMopOgJyJzh6TunpVFOP3R7bN0-iGt81mNueGxoAei6wCqgQBENsamw3v4ozZJtQgKva6v_90dYJ-rvQjUn9U89avlG1tepDYT9HHjZmYixLD0hACQ
  3. 「Library」頁面:NqfejNuo6fJfiTXERiCNAFTnno1JGgudf7M2zVyM9DzXP4E6ruoVxHvFQOPW-HFL5SZvm-WohzPTf7njBS9VCwuu4XnwhQ7CB83tNkH0jsYEx31hO6UMBVHPJS1BMjidg5kh-c7MEw
  4. 或完全空白的網頁:LcJ-wgOFlYa9uZm46fwUkfFTkXIcbhuk607KDaCz8_8NM09RHblz6T5JoWhH7uwSE2q6hKW9XnlutzUqd8yvRAEXFzQjqNNTuscj19yKGkMjbPixeUB8-F1y4Tz7eCpeOEzBUw70yw如果遇到第 3 個錯誤,只要重新整理瀏覽器,即可前往「資源庫」頁面。
  5. 無論您是在「Dashboard」(資訊主頁) 或「Library」(程式庫) 頁面,請按一下頁面頂端的專案選取器:3f5REVgveKDcJ8wG2C9gduFBftJb6RNtdQQJ79vwFmQCMU8_t_vxja8jPGIK-ZrpjSqGkRkY4k02xth-7FWNPj4GZUdcBmKQe97LporGaLvwIFzzR5wtH5mEEoA1a74_fnrh9YAqqg
  6. 接著,您會看到選取器對話方塊。按一下「+」建立新專案:jNzs1bp1eWkpJT3S3AGTm9ejYT2mB3rEd1QajOhO0AR3YxcwaCcF4WlMzdmgOFtlIPQfGEMUysM6m7r89_Fc0Dyy--mjPhCEKdLRZjaozLOvoZOzKtIxdMoWFHCVc2N1K-2HES_k4Q
  7. 點按「+」後,畫面會顯示「New Project」頁面。根據預設,所有個人帳戶都會有 12 個專案。建立第一個專案之前,您必須接受《Google API 服務條款》:bCB0sQ6k5nfrajlhc-S61MVzyYYBqu6XVNKeRDzXNvKZUNlSeVJSLbkP8sPNi5A-5hWIFzhsQ5R_ER9BBb2bE_B02c1neY2iO5SSe6XDFldppsXbkWm63-0l3ugtSDQS-TeM1d773w

完成後,日後建立專案時,相關電子郵件請教與《服務條款》問題就會消失:

Pj31ZKoAAnw_JiSz8io7e4yC2Xh3voETusvePf0DS64IMB4aVy9CtANg2r-2NgPxLjbqcfd-Vs33ZNdN7Diz7sZo3j-MKS83SuNXlhGT8ivdhpIvizP1dsYeK1MBQ4HlDZA5aQkIhg 5.如果您過去曾建立至少一個專案,在登入後,系統會將您帶往最後一個專案資訊主頁。接著,以選取「選取專案」的方式建立新專案 >+ 鍵。6.新專案建立完成後,您會返回「資訊主頁」頁面:ana4q1H1Q8KNTBEVb62Cc6NVA8VZbxb6BLgf4-bLqLV-p7n8UWv3WW3FN-49CE0x1kARav3pelxOBwNuUDELmitMRFhUNXuaw9-CH9DO3Lek_ifnaI3ZsxSy67Z1UsBO95SPFqlf8Q

您已成功建立專案,可以選擇要在專案中使用的 API。

啟用 Google API

您必須先啟用 Google API,才能開始使用。以下範例顯示如何啟用 Cloud Vision API。在本程式碼研究室中,您可能會使用一或多個 API,且應先按照類似步驟啟用這些 API,才能使用這些 API。

透過 Cloud Shell

您可以透過 Cloud Shell 使用下列指令啟用 API:

gcloud services enable vision.googleapis.com

使用 Cloud 控制台

您也可以在 API 管理員中啟用 Vision API。在 Cloud 控制台中,前往「API 管理員」,然後選取「程式庫」。

mg03by3QV6kco0rVVV_8IA6VobAoMG4Yoyl-PofNM0dHK8IcoDmpoLUwWeiKFFjpxHWlS1td5-0n7kNkfqHVhSsTSW_hUMvRu3D72g3LCFb7u4v4bla_Z4XyonTVK8PpigMLJcE01g

在搜尋列中開始輸入「vision」然後在畫面上出現 Vision API輸入後,看起來會像這樣:

B6fWWsVhymufgQx6oGIq4sgukK6JQ1VoguVOrSNf_anQb6Cv6RTLtsjx5Qdeu3-uO8-8PyqwZLYdDDjYW5o56R47cnsd_88RKTMqNkpFeDESW2hmBM_7FK2UAMz1_216yXERYSp_JA

選取 Cloud Vision API 取得下方的對話方塊,然後按一下「啟用」按鈕:

D-MONPLi0UWH6Dp607Dod6JF-LJQZIiUQEPQNKM4Y0mSt09KfipbeeXRAE6cokArBYTfL9VQoONc4L0jlnsUYLsNytQIPfSKr9lCDrXmrrx-1w64LeWWa-byDxcyYWZdCI0mAcVzBw

費用

雖然許多 Google API 都無須付費即可使用,但 GCP (產品和 API) 是免費的。啟用 Vision API 時 (如上所述),系統可能會要求您提供有效的帳單帳戶。在啟用之前,使用者應參照 Vision API 的定價資訊。請注意,部分 Google Cloud Platform (GCP) 產品具有「一律免費」配額級別。就程式碼研究室而言,每次呼叫 Vision API 都會計入該免費方案,但只要您未超過匯總用量上限 (每月以內) 就不會產生任何費用。

某些 Google API,例如Google Workspace 有按月訂閱方案的用量限制,因此使用 Gmail、Google 雲端硬碟、Google 日曆、文件、試算表和簡報 API 時,無須直接付費。不同 Google 產品的計費方式不同,請參閱 API 的說明文件,瞭解相關資訊。

摘要

在本程式碼研究室中,您只需開啟 Google Drive API,因此請按照上述操作說明搜尋「Drive」。請在啟用後繼續。

授權 API 要求 (使用者授權)

授權簡介 (加上部分驗證)

如要對 API 提出要求,應用程式必須具備適當的授權。「驗證」一詞是指登入憑證。登入 Google 帳戶時,您必須自行驗證;密碼。驗證完畢後,下一步是您授權存取資料 (例如 Cloud Storage 中的 blob 檔案或 Google 雲端硬碟中的使用者個人檔案) 是否

Google API 支援數種授權類型,但 Google Workspace API 使用者最常用的一種是使用者授權,因為本程式碼研究室中的範例應用程式會存取使用者擁有的資料。這些使用者必須授權「您的應用程式」存取自己的資料。這表示您的程式碼必須取得使用者帳戶的 OAuth2 憑證。

如要取得使用者授權的 OAuth2 憑證,請返回 API 管理員頁面,然後選取「憑證」分頁

Y33PZ_rJC1y7NH7Rrvq1kN_WxZ9CppDGJK8tTSaha298Jlm5pMqgnyweIO4oX34fcLy0_VI4gihYu5wpEM_LeJg1iDAFoidhUVyfqJX3QTzODQ_OGjHLXYBxPpUvihCJi9JGwvMREw

進入該頁面後,您就會在三個不同的部分看到所有憑證:

ComE4qh76dwZbIehkDUm1QawHGia_qVe7w7rkmgbeo_wjWS--kqXCt4_zvm55iy_RXA8dKYKvBxIKazkcYQ8871SA_kNslbvum_n1Ju4k9qJJSMtDhPAnofcvIlqlKm1nu7PBQhmEg

第一個是 API 金鑰、第二個 OAuth 2.0 用戶端 ID 和最後一個 OAuth2 服務帳戶,這裡使用的是中間的帳戶。

建立憑證

在「憑證」頁面上,按一下頂端的「+ 建立憑證」按鈕,畫面上就會顯示對話方塊,您可以從中選擇「OAuth 用戶端 ID」:

C7jTddfrczo3GewPGCxbxX13GawtFc6FGvAPFusPc_IW-tr5M6xgXd1OzOHOUTo86WDa9fXiCITogv9b3wAgOcYM7xS3AmVNaPdTxbAynIe_sia2_x3LEPsBrdbX8NjeI2WaHRioOA

在下一個畫面,您有兩個動作:設定應用程式的授權「同意畫面」並選擇應用程式類型:

El9_aqPQ6Q9hOsOp3JUC5qnCm_A_BVI-oCEfPk_MsvybnWBmC5lT6CtXSoZ7EQoFzrcBEzo4zF9s8CbhXyo0e-eSY3pZ1zg0BRvT0YssMMhbzEG-gP_jiO8v9q9HYTjg-QW5jJ0RDA

如果尚未設定同意畫面,您會在控制台中看到警示,必須立即完成。(如果已設定同意畫面,請略過這些後續步驟)。

按一下「設定同意畫面」您可以在其中選取「外部」應用程式 (如果您是 Google Workspace 客戶,則為「內部」):

5w-9R6gPvUHFzODZxXy-0GEhL8ZGDGNea3QtMp1FFYDv5DJ_MIDD21NEh3CzI-GKNzy6bkhH7bohxOG8icQTegiWlavOQhQqhSy7K31Ma3YTI9aAP3P-LmTBanPslX1cnjKLVZBi8A

請注意,就本練習而言,由於您不是發布程式碼研究室範例,因此您可以自行選擇。大部分的人會選取「外部」但只要輸入「應用程式名稱」即可」欄位:

8e9z_RQz8lumYbDIcBvm57_Gpptn9uhrVQHoRzJ01AJNOFmXloDO7Eg3hhzJZZIU2F5rR0MxTCw-oXVFCq683xUwD4O33pXeuFsOMtM8EZhyjDoYc8Kv4hEoaG0Ztq9ePx6De7YmfA

目前,您只需要使用應用程式名稱,因此請選擇能反映該程式碼研究室的人員,然後按一下「Save」

正在建立 OAuth 用戶端 ID (使用者帳戶驗證)

現在,請返回「憑證」分頁建立 OAuth2 用戶端 ID。您會看到各種可建立的 OAuth 用戶端 ID:

f8reuhsxOUNLcVrEIyRVsmP_fX_ceIlLvEKql1YHwSPW9jk9Mm9fJ0UlfUoi8eRN3QQXar4xtpo071zj6LSczNN7TYY8zB96Dn6ICZuvCAtjIgJSKdMSlX-ZhMuSWFpxxv661aUemw

我們正在開發一款指令列工具 (其他),因此請選擇該工具,然後按一下「Create」按鈕。請選擇符合所建立應用程式的用戶端 ID 名稱,或直接使用預設名稱 (通常為「其他用戶端 N」)。

儲存憑證

  1. 畫面上會顯示包含新憑證的對話方塊。按一下「確定」關閉

rAwekj_GNEuVwGbZOYYlGDQjlu4flE61OPEZIUmwMI5vGi3W365UwVCxi0mVNhg4WZSSczZywrZZ6NDM_U0FJ4b-TOIMEC189uybOJjgn8F_axesVMopel9RlehRBXdEFhN4d41WGQ

  1. 返回「憑證」頁面,向下捲動至「OAuth2 用戶端 ID」部分中,找出並按一下剛建立用戶端 ID 最右下角的下載圖示 aAmje6kT_xSUM4BKIlPREpjosx7C_xxwpWqBgiGVfVWxQ8nnQOfxTPhuU0QwSnmbjykZffGrqyP1nnKrEQ7D7OqYaGw_Uzscs9gX2RwwP4AmvtHIiTFLa0gkprzJSjG9pQSx7HtmSQx-vb-sKZy-X8a1X4uTsBWotSd4wn0PGt4mHMNv6DUrq5J5ihpujUyTiIVr5SHw0p2ZDy0KTP-zqOaFX-Az9BYDWG90KNFmsRLTUOo1mUVk7dYRJiK3VwYJNU0bbxjsbbpqcTr5_oLw
  2. 系統會開啟對話方塊,讓您儲存 client_secret-LONG-HASH-STRING.apps.googleusercontent.com.json 檔案,該檔案可能位於「下載」資料夾。建議您縮短為較容易使用的名稱 (例如 client_secret.json,這是範例應用程式使用的名稱),然後將其儲存至您將在本程式碼研究室中建立範例應用程式的目錄/資料夾。