在 Google Drive Activity API 中发出请求

本指南介绍了如何使用 activity.query 方法在 Google Drive Activity API 中发出请求。

查询键

您可以通过以下 2 种方式请求活动记录:按 Google 云端硬盘项,或按文件夹层次结构下的所有内容。

  • itemName:此键的格式为“items/ITEM_ID”。通常,这是云端硬盘中的文件。如果您为此键指定文件夹,则系统会显示该文件夹的活动,例如创建或重命名时间。

  • ancestorName:此键的格式为“items/ITEM_ID”,响应包含此文件夹下子树中所有项的活动。

如果未设置任何键,则默认使用“items/root”的 ancestorName,并显示您云端硬盘中所有内容的活动记录。

分页

借助 pageSize 字段,您可以请求在每个响应中返回的活动数量的近似值。返回的活动的实际数量会有所不同,因此您的应用应处理响应中的任意数量。

页面大小有限。如果您的应用需要许多 activity,请使用分页发出多个请求,而不是为 pageSize 设置较大的值。具体而言,如果要提取的活动数量可能多于响应中包含的活动数量,则响应中还会包含 nextPageToken。如需检索更多结果,请重复相同的请求,但添加一个值为上一个响应中的 nextPageTokenpageToken 字段。

整合

Action 对象通常会分组并在单个 DriveActivity 资源中返回。某些 Action 分组会自然发生,例如将内容移至共享文件夹会触发权限更改。

您还可以在请求中指定 ConsolidationStrategy(有时称为汇总或批处理)。这样一来,您就可以对相关 Action 对象进行其他分组,例如多个操作者修改一个项,或一个 Actor 将多个文件移至新的云端硬盘文件夹。

虽然单个 Action 只有一个 Actor 和一个 Target,但分组后,生成的 DriveActivity 可以有多个执行器和多个目标。不过,即使进行分组后,DriveActivity 资源中始终有一个“主要”操作,该操作代表 DriveActivity 资源中的所有操作,或者是最重要的操作,具体取决于请求的合并策略。

因此,无论是否启用合并,对于许多客户端来说,只查看 DriveActivity 资源的顶级内容(例如 primaryActionDetail 中的集体操作者和目标)并忽略响应中的详细操作可能就足够了。

过滤条件

您可以在 activity.query 请求中构建 filter 字符串,以限制 DriveActivity 资源中可能返回的操作。支持 2 个字段:timedetail.action_detail_case

按时间过滤

如需按时间范围限制操作,请使用日期值的数字运算符指定字段名称 time,并用可选的“AND”连接。使用自 1970 年 1 月 1 日起的毫秒数或 RFC 3339 格式,例如:

  • time > 1452409200000 AND time <= 1492812924310
  • time >= "2016-01-10T01:02:03-05:00"

按类型过滤

如需按操作类型进行限制,请将字段名称 detail.action_detail_case 与“has”运算符 (:) 一起使用。使用单个值或允许的操作类型列表(括号括起来,以空格分隔)。如需查找操作类型列表,请查看 ActionDetail 对象。

如需从响应中排除某种操作类型,请在过滤条件字符串开头添加一个连字符 (-)。

以下是一些操作类型示例:

  • detail.action_detail_case:RENAME
  • detail.action_detail_case:(CREATE RESTORE)
  • -detail.action_detail_case:MOVE

组合

这些过滤条件可在单个 filter 字符串中组合使用,例如:

  • detail.action_detail_case:(CREATE EDIT RESTORE) time > 1452409200000

示例请求

请求获取云端硬盘内容的 10 项最新活动记录:

{
  "itemName": "items/ITEM_ID",
  "pageSize": 10
}

请求获取祖先文件夹下每个云端硬盘项的汇总活动:

{
  "ancestorName": "items/ITEM_ID",
  "consolidationStrategy": {
    "legacy": {}
  }
}

请求对云端硬盘内容执行所有 MOVERENAME 操作:

{
  "itemName": "items/ITEM_ID",
  "filter": "detail.action_detail_case:(MOVE RENAME)"
}

请求获取自 2018 年 1 月 1 日(美国东部标准时间)以来的所有活动记录:

{
  "ancestorName": "items/root",
  "filter": "time >= \"2018-01-01T00:00:00-05:00\""
}

请求 2017 年 6 月(世界协调时间)的所有活动记录(EDIT 操作除外):

{
  "ancestorName": "items/root",
  "filter": "time >= \"2018-06-01T00:00:00Z\" time < \"2018-07-01T00:00:00Z\" -detail.action_detail_case:EDIT"
}