Python 快速入門

建立 Python 指令列應用程式,向 Google Forms API 發出要求。

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

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

目標

  • 設定環境。
  • 安裝用戶端程式庫。
  • 設定範例。
  • 執行範例。

必要條件

如要執行本快速入門導覽課程,請先完成下列必要條件:

  • Google 帳戶。

設定環境

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

啟用 API

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

    啟用 API

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

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

    前往「品牌宣傳」

  2. 如果您已設定 Google Auth platform,可以在「品牌」、「目標對象」和「資料存取權」中設定下列 OAuth 同意畫面設定。如果看到「尚未設定」Google Auth platform 訊息,請按一下「開始使用」
    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 控制台,依序點選「選單」圖示 > Google Auth platform >「用戶端」

    前往「客戶」

  2. 按一下「建立用戶端」
  3. 依序點選「應用程式類型」>「電腦應用程式」
  4. 在「Name」(名稱) 欄位中,輸入憑證名稱。這個名稱只會顯示在 Google Cloud 控制台中。
  5. 按一下 [Create] (建立)

    新建立的憑證會顯示在「OAuth 2.0 用戶端 ID」下方。

  6. 將下載的 JSON 檔案儲存為 credentials.json,然後將該檔案移至工作目錄。

安裝 Google 用戶端程式庫

  • 安裝 Python 適用的 Google 用戶端程式庫:

    pip install --upgrade google-api-python-client google-auth-httplib2 google-auth-oauthlib
    

設定範例

  1. 在工作目錄中,建立名為 quickstart.py 的檔案。
  2. quickstart.py 中加入下列程式碼:

    forms/quickstart/quickstart.py
    from apiclient import discovery
    from httplib2 import Http
    from oauth2client import client, file, tools
    
    SCOPES = "https://www.googleapis.com/auth/forms.body"
    DISCOVERY_DOC = "https://forms.googleapis.com/$discovery/rest?version=v1"
    
    store = file.Storage("token.json")
    creds = None
    if not creds or creds.invalid:
      flow = client.flow_from_clientsecrets("client_secrets.json", SCOPES)
      creds = tools.run_flow(flow, store)
    
    form_service = discovery.build(
        "forms",
        "v1",
        http=creds.authorize(Http()),
        discoveryServiceUrl=DISCOVERY_DOC,
        static_discovery=False,
    )
    
    # Request body for creating a form
    NEW_FORM = {
        "info": {
            "title": "Quickstart form",
        }
    }
    
    # Request body to add a multiple-choice question
    NEW_QUESTION = {
        "requests": [
            {
                "createItem": {
                    "item": {
                        "title": (
                            "In what year did the United States land a mission on"
                            " the moon?"
                        ),
                        "questionItem": {
                            "question": {
                                "required": True,
                                "choiceQuestion": {
                                    "type": "RADIO",
                                    "options": [
                                        {"value": "1965"},
                                        {"value": "1967"},
                                        {"value": "1969"},
                                        {"value": "1971"},
                                    ],
                                    "shuffle": True,
                                },
                            }
                        },
                    },
                    "location": {"index": 0},
                }
            }
        ]
    }
    
    # Creates the initial form
    result = form_service.forms().create(body=NEW_FORM).execute()
    
    # Adds the question to the form
    question_setting = (
        form_service.forms()
        .batchUpdate(formId=result["formId"], body=NEW_QUESTION)
        .execute()
    )
    
    # Prints the result to show the question has been added
    get_result = form_service.forms().get(formId=result["formId"]).execute()
    print(get_result)

執行範例

  1. 在工作目錄中,建構並執行範例:

    python3 quickstart.py
    
  1. 第一次執行範例時,系統會提示您授權存取權:
    1. 如果尚未登入 Google 帳戶,系統會提示你登入。如果您登入了多個帳戶,請選取要用於授權的帳戶。
    2. 按一下 [接受]

    Python 應用程式會執行並呼叫 Google Forms API。

    授權資訊會儲存在檔案系統中,因此下次執行範例程式碼時,系統不會提示您授權。

後續步驟