快速入門導覽課程會說明如何設定及執行應用程式,來呼叫 Google Workspace API。本快速入門導覽課程會使用簡化的驗證方法,適用於測試環境。在正式環境中,建議您先瞭解驗證和授權,再選擇適合應用程式的存取憑證。
建立 Node.js 指令列應用程式,向 Drive Labels API 提出要求。
目標
- 設定環境。
- 安裝用戶端程式庫。
- 設定範例。
- 執行範例。
必要條件
- 已安裝 Node.js 和 npm。
- Google Cloud 專案。
- Google 帳戶。
設定環境
如要完成本快速入門導覽課程,請設定環境。
啟用 API
使用 Google API 前,您需要在 Google Cloud 專案中啟用這些 API。 您可以在單一 Google Cloud 專案中啟用一或多個 API。在 Google Cloud 控制台中啟用 Drive Labels API。
授權電腦應用程式的憑證
如要在應用程式中驗證使用者身分並存取使用者資料,您需要建立一或多個 OAuth 2.0 用戶端 ID。Google 的 OAuth 伺服器會使用用戶端 ID 來識別個別應用程式。如果您的應用程式在多個平台上執行,則必須為每個平台分別建立用戶端 ID。- 在 Google Cloud 控制台中,依序前往「Menu」(選單) > Google Auth platform >「Clients」(用戶端)。
- 按一下「Create Client」(建立用戶端)。
- 依序點選「Application type」(應用程式類型) >「Desktop app」(電腦版應用程式)。
- 在「Name」(名稱) 欄位中,輸入憑證名稱。這個名稱只會顯示在 Google Cloud 控制台中。
- 按一下 [Create] (建立)。
新建立的憑證會顯示在「OAuth 2.0 Client IDs」(OAuth 2.0 用戶端 ID) 下方。
- 將下載的 JSON 檔案儲存為
credentials.json,然後將該檔案移至工作目錄。
安裝用戶端程式庫
使用 npm 安裝程式庫:
npm install googleapis@113 @google-cloud/local-auth@2.1.1 --save
設定範例
在工作目錄中,建立名為
index.js的檔案。在檔案中貼上下列程式碼:
const fs = require('fs'); const readline = require('readline'); const {google} = require('googleapis'); // If modifying these scopes, delete token.json. const SCOPES = ['https://www.googleapis.com/auth/drive.labels.readonly']; // 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. const TOKEN_PATH = 'token.json'; // Load client secrets from a local file. fs.readFile('credentials.json', (err, content) => { if (err) return console.log('Error loading client secret file:', err); // Authorize a client with credentials, then call the Google Drive Labels // API. authorize(JSON.parse(content), listDriveLabels); }); /** * Create an OAuth2 client with the given credentials, and then execute the * given callback function. * @param {Object} credentials The authorization client credentials. * @param {function} callback The callback to call with the authorized client. */ function authorize(credentials, callback) { const {client_secret, client_id, redirect_uris} = credentials.installed; const oAuth2Client = new google.auth.OAuth2( client_id, client_secret, redirect_uris[0]); // Check if we have previously stored a token. fs.readFile(TOKEN_PATH, (err, token) => { if (err) return getNewToken(oAuth2Client, callback); oAuth2Client.setCredentials(JSON.parse(token)); callback(oAuth2Client); }); } /** * Get and store new token after prompting for user authorization, and then * execute the given callback with the authorized OAuth2 client. * @param {google.auth.OAuth2} oAuth2Client The OAuth2 client to get token for. * @param {getEventsCallback} callback The callback for the authorized client. */ function getNewToken(oAuth2Client, callback) { const authUrl = oAuth2Client.generateAuthUrl({ access_type: 'offline', scope: SCOPES, }); console.log('Authorize this app by visiting this url:', authUrl); const rl = readline.createInterface({ input: process.stdin, output: process.stdout, }); rl.question('Enter the code from that page here: ', (code) => { rl.close(); oAuth2Client.getToken(code, (err, token) => { if (err) return console.error('Error retrieving access token', err); oAuth2Client.setCredentials(token); // Store the token to disk for later program executions fs.writeFile(TOKEN_PATH, JSON.stringify(token), (err) => { if (err) return console.error(err); console.log('Token stored to', TOKEN_PATH); }); callback(oAuth2Client); }); }); } function listDriveLabels(auth) { const service = google.drivelabels({version: 'v2', auth}); const params = { 'view': 'LABEL_VIEW_FULL' }; service.labels.list(params, (err, res) => { if (err) return console.error('The API returned an error: ' + err); const labels = res.data.labels; if (labels) { labels.forEach((label) => { const name = label.name; const title = label.properties.title; console.log(`${name}\t${title}`); }); } else { console.log('No Labels'); } }); }
執行範例
在工作目錄中執行範例:
node .
首次執行範例時,系統會提示您授予存取權:
- 如果尚未登入 Google 帳戶,系統會提示你登入。如果您登入了多個帳戶,請選取要用於授權的帳戶。
- 按一下 [接受]。
授權資訊會儲存在檔案系統中,因此下次執行範例程式碼時,系統不會提示您授權。
您已成功建立第一個 Node.js 應用程式,並向 Drive Labels API 發出要求。