Python 快速入门

快速入门介绍了如何设置和运行调用 Google Workspace API。

Google Workspace 快速入门使用 API 客户端库来处理一些 身份验证和授权流程的详细信息。我们建议 您需要为自己的应用使用客户端库本快速入门使用 适用于测试的简化身份验证方法 环境对于生产环境,我们建议您了解 身份验证和授权 早于 选择访问凭据 适合您应用的广告格式

创建一个向 Google Drive Activity API 发出请求的 Python 命令行应用。

目标

  • 设置环境。
  • 安装客户端库。
  • 设置示例。
  • 运行该示例。

前提条件

如需运行本快速入门,您需要满足以下前提条件:

  • Google 账号。

设置环境

如需完成本快速入门,请设置您的环境。

启用 API

在使用 Google API 之前,您需要先在 Google Cloud 项目中启用这些 API。 您可以在单个 Google Cloud 项目中启用一个或多个 API。
  • 在 Google Cloud 控制台中,启用 Google Drive Activity API。

    启用 API

如果您使用新的 Google Cloud 项目来完成本快速入门,请配置 OAuth 权限请求页面,并将您自己添加为测试用户。如果您已经 已完成此步骤,请跳到下一部分。

  1. 在 Google Cloud 控制台中,点击“菜单”图标 > API 和服务 > OAuth 同意屏幕

    转到 OAuth 同意屏幕

  2. 对于用户类型,选择内部,然后点击创建
  3. 填写应用注册表单,然后点击保存并继续
  4. 现在,您可以跳过添加范围的步骤,然后点击保存并继续。 以后,如果您要创建一款应用供用户使用 Google Workspace 组织,您必须将用户类型更改为外部,然后执行以下操作: 添加您的应用所需的授权范围。

  5. 查看应用注册摘要。如需进行更改,请点击修改。如果应用 点击 Back to Dashboard(返回信息中心)。

为桌面应用授权凭据

如需对最终用户进行身份验证并访问应用中的用户数据,您需要执行以下操作: 创建一个或多个 OAuth 2.0 客户端 ID。客户端 ID 用于标识 连接到 Google OAuth 服务器。如果您的应用在多个平台上运行 您必须为每个平台创建一个单独的客户端 ID。
  1. 在 Google Cloud 控制台中,依次点击“菜单”图标 > API 和服务 > 凭据

    进入“凭据”页面

  2. 依次点击创建凭据 > OAuth 客户端 ID
  3. 依次点击应用类型 > 桌面应用
  4. 名称字段中,输入凭据的名称。此名称仅在 Google Cloud 控制台中显示。
  5. 点击创建。系统会显示“OAuth 客户端创建”屏幕,其中显示了您的新客户端 ID 和客户端密钥。
  6. 点击 OK。新创建的凭据会显示在 OAuth 2.0 客户端 ID 下。
  7. 将下载的 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 中添加以下代码:

    drive/activity-v2/quickstart.py
    import os.path
    
    from google.auth.transport.requests import Request
    from google.oauth2.credentials import Credentials
    from google_auth_oauthlib.flow import InstalledAppFlow
    from googleapiclient.discovery import build
    from googleapiclient.errors import HttpError
    
    # If modifying these scopes, delete the file token.json.
    SCOPES = ["https://www.googleapis.com/auth/drive.activity.readonly"]
    
    
    def main():
      """Shows basic usage of the Drive Activity API.
    
      Prints information about the last 10 events that occured the user's Drive.
      """
      creds = None
      # 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.
      if os.path.exists("token.json"):
        creds = Credentials.from_authorized_user_file("token.json", SCOPES)
      # If there are no (valid) credentials available, let the user log in.
      if not creds or not creds.valid:
        if creds and creds.expired and creds.refresh_token:
          creds.refresh(Request())
        else:
          flow = InstalledAppFlow.from_client_secrets_file(
              "credentials.json", SCOPES
          )
          creds = flow.run_local_server(port=0)
        # Save the credentials for the next run
        with open("token.json", "w") as token:
          token.write(creds.to_json())
    
      service = build("driveactivity", "v2", credentials=creds)
    
      # Call the Drive Activity API
      try:
        results = service.activity().query(body={"pageSize": 10}).execute()
        activities = results.get("activities", [])
    
        if not activities:
          print("No activity.")
        else:
          print("Recent activity:")
          for activity in activities:
            time = getTimeInfo(activity)
            action = getActionInfo(activity["primaryActionDetail"])
            actors = map(getActorInfo, activity["actors"])
            targets = map(getTargetInfo, activity["targets"])
            actors_str, targets_str = "", ""
            actor_name = actors_str.join(actors)
            target_name = targets_str.join(targets)
    
            # Print the action occurred on drive with actor, target item and timestamp
            print(f"{time}: {action}, {actor_name}, {target_name}")
    
      except HttpError as error:
        # TODO(developer) - Handleerrors from drive activity API.
        print(f"An error occurred: {error}")
    
    
    # Returns the name of a set property in an object, or else "unknown".
    def getOneOf(obj):
      for key in obj:
        return key
      return "unknown"
    
    
    # Returns a time associated with an activity.
    def getTimeInfo(activity):
      if "timestamp" in activity:
        return activity["timestamp"]
      if "timeRange" in activity:
        return activity["timeRange"]["endTime"]
      return "unknown"
    
    
    # Returns the type of action.
    def getActionInfo(actionDetail):
      return getOneOf(actionDetail)
    
    
    # Returns user information, or the type of user if not a known user.
    def getUserInfo(user):
      if "knownUser" in user:
        knownUser = user["knownUser"]
        isMe = knownUser.get("isCurrentUser", False)
        return "people/me" if isMe else knownUser["personName"]
      return getOneOf(user)
    
    
    # Returns actor information, or the type of actor if not a user.
    def getActorInfo(actor):
      if "user" in actor:
        return getUserInfo(actor["user"])
      return getOneOf(actor)
    
    
    # Returns the type of a target and an associated title.
    def getTargetInfo(target):
      if "driveItem" in target:
        title = target["driveItem"].get("title", "unknown")
        return f'driveItem:"{title}"'
      if "drive" in target:
        title = target["drive"].get("title", "unknown")
        return f'drive:"{title}"'
      if "fileComment" in target:
        parent = target["fileComment"].get("parent", {})
        title = parent.get("title", "unknown")
        return f'fileComment:"{title}"'
      return f"{getOneOf(target)}:unknown"
    
    
    if __name__ == "__main__":
      main()

运行示例

  1. 在您的工作目录中,构建并运行该示例:

    python3 quickstart.py
    
  1. 首次运行该示例时,它会提示您授予访问权限: <ph type="x-smartling-placeholder">
      </ph>
    1. 如果您尚未登录 Google 账号,请在系统提示时登录。如果 如果您登录了多个账号,请选择一个用于授权的账号。
    2. 点击接受

    您的 Python 应用运行并调用 Google Drive Activity API。

    授权信息存储在文件系统中,因此下次运行该示例时 则系统不会提示您授权。

后续步骤