JavaScript 快速入門

建立 JavaScript 網頁應用程式,向 Google Sheets API 發出要求。

快速入門指南會說明如何設定及執行呼叫 Google Workspace API 的應用程式。本快速入門導覽課程會使用簡化的驗證方法,適用於測試環境。在正式環境中,建議您先瞭解驗證和授權,再選擇適合應用程式的存取憑證

本快速入門指南會使用 Google Workspace 建議的 API 用戶端程式庫,處理驗證和授權流程的部分詳細資料。

目標

  • 設定環境。
  • 設定範例。
  • 執行範例。

必要條件

  • Google 帳戶

設定環境

如要完成本快速入門導覽課程,請設定環境。

啟用 API

使用 Google API 前,請先在 Google Cloud 專案中啟用這些 API。您可以在單一 Google Cloud 專案中啟用一或多個 API。
  • 在 Google Cloud 控制台中啟用 Google Sheets API。

    啟用 API

如果您使用新的 Google Cloud 專案完成這項快速入門導覽課程,請設定 OAuth 同意畫面。如果已為 Cloud 專案完成這個步驟,請跳至下一節。

  1. 在 Google Cloud 控制台中,依序前往「選單」 > >「品牌」

    前往「品牌宣傳」

  2. 如果您已設定 ,可以在「品牌」、「目標對象」和「資料存取權」中設定下列 OAuth 同意畫面設定。如果看到「尚未設定」 訊息,請按一下「開始使用」
    1. 在「App Information」(應用程式資訊) 下方的「App name」(應用程式名稱) 欄位中,輸入應用程式名稱。
    2. 在「使用者支援電子郵件」中,選擇支援電子郵件地址,方便使用者在同意聲明方面有任何疑問時與您聯絡。
    3. 點選 [下一步]
    4. 在「觀眾」下方,選取「內部」
    5. 點選 [下一步]
    6. 在「聯絡資訊」下方,輸入可接收專案異動通知的電子郵件地址
    7. 點選 [下一步]
    8. 在「完成」下方,詳閱《Google API 服務:使用者資料政策》,然後選取「我同意《Google API 服務:使用者資料政策》」
    9. 按一下 [繼續]。
    10. 按一下「Create」(建立)。
  3. 目前可以略過新增範圍。 日後為 Google Workspace 機構以外的使用者建立應用程式時,請務必將「使用者類型」變更為「外部」。然後新增應用程式需要的授權範圍。詳情請參閱完整的「設定 OAuth 同意畫面」指南。

授權網頁應用程式的憑證

如要在應用程式中驗證使用者身分並存取使用者資料,您需要建立一或多個 OAuth 2.0 用戶端 ID。Google 的 OAuth 伺服器會使用用戶端 ID 來識別個別應用程式。如果您的應用程式在多個平台上執行,則必須為每個平台分別建立用戶端 ID。
  1. 前往 Google Cloud 控制台,依序點選「選單」圖示 > >「用戶端」

    前往「客戶」

  2. 按一下「建立用戶端」
  3. 依序點選「應用程式類型」>「網頁應用程式」
  4. 在「Name」(名稱) 欄位中,輸入憑證名稱。這個名稱只會顯示在 Google Cloud 控制台中。
  5. 新增與應用程式相關的授權 URI:
    • 用戶端應用程式 (JavaScript):在「已授權的 JavaScript 來源」下方,按一下「新增 URI」。然後輸入要用於瀏覽器要求的 URI。這會識別應用程式可從哪些網域將 API 要求傳送至 OAuth 2.0 伺服器。
    • 伺服器端應用程式 (Java、Python 等):按一下「已授權的重新導向 URI」下方的「新增 URI」。然後輸入端點 URI,OAuth 2.0 伺服器可將回應傳送至該 URI。
  6. 按一下 [Create] (建立)

    新建立的憑證會顯示在「OAuth 2.0 Client IDs」下方。

    記下用戶端 ID。網頁應用程式不會使用用戶端密鑰。

請記下這些憑證,因為本快速入門導覽的後續步驟會用到。

建立 API 金鑰

  1. 在 Google Cloud 控制台中,依序前往「選單」圖示 >「API 和服務」 >「憑證」

    前往「憑證」

  2. 依序按一下「建立憑證」>「API 金鑰」
  3. 系統會顯示新的 API 金鑰。
    • 按一下「複製」圖示 ,即可複製 API 金鑰,在應用程式的程式碼中使用。您也可以在專案憑證的「API 金鑰」部分找到 API 金鑰。
    • 為避免未經授權的使用行為,建議您為可使用該 API 金鑰的 API 及使用位置新增限制。詳情請參閱「新增 API 限制」一文。

設定範例

  1. 在工作目錄中,建立名為 index.html 的檔案。
  2. index.html 檔案中,貼上下列程式碼範例:

    sheets/quickstart/index.html
    <!DOCTYPE html> <html>   <head>     <title>Sheets API Quickstart</title>     <meta charset="utf-8" />   </head>   <body>     <p>Sheets API Quickstart</p>      <!--Add buttons to initiate auth sequence and sign out-->     <button id="authorize_button" onclick="handleAuthClick()">Authorize</button>     <button id="signout_button" onclick="handleSignoutClick()">Sign Out</button>      <pre id="content" style="white-space: pre-wrap;"></pre>      <script type="text/javascript">       /* exported gapiLoaded */       /* exported gisLoaded */       /* exported handleAuthClick */       /* exported handleSignoutClick */        // TODO(developer): Set to client ID and API key from the Developer Console       const CLIENT_ID = '<YOUR_CLIENT_ID>';       const API_KEY = '<YOUR_API_KEY>';        // Discovery doc URL for APIs used by the quickstart       const DISCOVERY_DOC = 'https://sheets.googleapis.com/$discovery/rest?version=v4';        // Authorization scopes required by the API; multiple scopes can be       // included, separated by spaces.       const SCOPES = 'https://www.googleapis.com/auth/spreadsheets.readonly';        let tokenClient;       let gapiInited = false;       let gisInited = false;        document.getElementById('authorize_button').style.visibility = 'hidden';       document.getElementById('signout_button').style.visibility = 'hidden';        /**        * Callback after api.js is loaded.        */       function gapiLoaded() {         gapi.load('client', initializeGapiClient);       }        /**        * Callback after the API client is loaded. Loads the        * discovery doc to initialize the API.        */       async function initializeGapiClient() {         await gapi.client.init({           apiKey: API_KEY,           discoveryDocs: [DISCOVERY_DOC],         });         gapiInited = true;         maybeEnableButtons();       }        /**        * Callback after Google Identity Services are loaded.        */       function gisLoaded() {         tokenClient = google.accounts.oauth2.initTokenClient({           client_id: CLIENT_ID,           scope: SCOPES,           callback: '', // defined later         });         gisInited = true;         maybeEnableButtons();       }        /**        * Enables user interaction after all libraries are loaded.        */       function maybeEnableButtons() {         if (gapiInited && gisInited) {           document.getElementById('authorize_button').style.visibility = 'visible';         }       }        /**        *  Sign in the user upon button click.        */       function handleAuthClick() {         tokenClient.callback = async (resp) => {           if (resp.error !== undefined) {             throw (resp);           }           document.getElementById('signout_button').style.visibility = 'visible';           document.getElementById('authorize_button').innerText = 'Refresh';           await listMajors();         };          if (gapi.client.getToken() === null) {           // Prompt the user to select a Google Account and ask for consent to share their data           // when establishing a new session.           tokenClient.requestAccessToken({prompt: 'consent'});         } else {           // Skip display of account chooser and consent dialog for an existing session.           tokenClient.requestAccessToken({prompt: ''});         }       }        /**        *  Sign out the user upon button click.        */       function handleSignoutClick() {         const token = gapi.client.getToken();         if (token !== null) {           google.accounts.oauth2.revoke(token.access_token);           gapi.client.setToken('');           document.getElementById('content').innerText = '';           document.getElementById('authorize_button').innerText = 'Authorize';           document.getElementById('signout_button').style.visibility = 'hidden';         }       }        /**        * Print the names and majors of students in a sample spreadsheet:        * https://docs.google.com/spreadsheets/d/1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms/edit        */       async function listMajors() {         let response;         try {           // Fetch first 10 files           response = await gapi.client.sheets.spreadsheets.values.get({             spreadsheetId: '1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms',             range: 'Class Data!A2:E',           });         } catch (err) {           document.getElementById('content').innerText = err.message;           return;         }         const range = response.result;         if (!range || !range.values || range.values.length == 0) {           document.getElementById('content').innerText = 'No values found.';           return;         }         // Flatten to string to display         const output = range.values.reduce(             (str, row) => `${str}${row[0]}, ${row[4]}\n`,             'Name, Major:\n');         document.getElementById('content').innerText = output;       }     </script>     <script async defer src="https://apis.google.com/js/api.js" onload="gapiLoaded()"></script>     <script async defer src="https://accounts.google.com/gsi/client" onload="gisLoaded()"></script>   </body> </html>

    更改下列內容:

執行範例

  1. 在工作目錄中,安裝 http-server 套件:

     npm install http-server 
  2. 在工作目錄中啟動網路伺服器:

     npx http-server -p 8000 
  1. 在瀏覽器中前往 http://localhost:8000
  2. 畫面上會顯示授權存取權的提示:
    1. 如果尚未登入 Google 帳戶,系統會提示你登入。如果您登入了多個帳戶,請選取要用於授權的帳戶。
    2. 按一下 [接受]

JavaScript 應用程式會執行並呼叫 Google Sheets API。

後續步驟