[教學] 如何申請並使用Token存取Google Drive REST API (不需使用者介面驗證)

現在網路空間愈來愈多,Google Drive也是其中一個熱門的空間,不但空間大且還能夠與Google其他雲端服務整合使用,而我們有時候會有用程式來存取Google Drive的需求,本篇教學如何申請並使用Google Drive API來存取檔案, (Google OAuth 驗證方式有很多種,本篇為不需要頁面驗證就能夠使用的當作範例)


首先開啟 Google API Console(https://console.developers.google.com/)

進入頁面,點 [建立專案] 按鈕

接著填寫自己想要的專案名稱,並按下建立

建立完成後點 [啟用API和服務] 之後搜尋 Google Drive API 並點選它

點選[啟用]

因為程式要能夠使用Google Drive API,就需要取得憑證

點選左邊選單中的[憑證],並且點[建立憑證]

我們這裡的需求是讓程式可以上傳檔案到Google Drive中,中間並不會有人為介入做驗證的動作,所以屬於 [其他非使用者介面],所以將 [ API 的呼叫來源為何?] 選擇 [其他非使用者介面],要存取的資料選擇[應用程式資料],之後點[我需要哪些憑證]

這是一個非使用者介面操作的憑證,所以需要建立Service Account (這會被Google視為一個獨立的帳號)

這時候要選擇這個Service Account要能有什麼權限,例如唯讀或是可以編輯,這邊依據自己使用情境選擇

金鑰類型普遍都用JSON居多,如有其他需求可以自行選擇P12

接著按下 [繼續]

接著會產生一個檔案下載,這個檔案就是[金鑰],有了這個金鑰就能存取Google Drive API了

注意:這個金鑰要保存好,程式要能夠存取檔案就是要透過這個金鑰

不過這個Service Account相當於一個獨立帳號,它是無法直接存取我們正在使用帳號的Google Drive的

要讓它能夠存取,需要分享資料夾權限給這個Service Account

首先要先取得這個Service Account的服務帳戶ID

前面其實在建立服務帳戶時有填寫,不過如果沒記下可以點右方的 [管理服務帳戶] 查看

這時可以會拿到Service Account的電子郵件,把它記下來

接下來開啟Google Drive,對想要給程式能夠存取的資料夾[共用…]

然後輸入剛剛記下的電子郵件並確定,這樣子Service Account就能夠存取這個資料夾了

官方有提供不同程式語言的library來存取API

可以至網站上查看document:https://developers.google.com/drive/api/v3/downloads

這邊示範一個PHP的例子如何使用Service Account的金鑰存取API

安裝library

composer require google/apiclient:"^2.0"

程式碼

$client = new Google_Client;
$client->setAuthConfig('/path/of/key.json');
$client->addScope(Google_Service_Drive::DRIVE);