在 Google Drive Activity API 中发出请求

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

查询键

请求活动的方法有两种:按 Google 云端硬盘内容请求,或按文件夹层次结构下的所有内容请求。

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

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

如果未设置任何键,系统会默认使用“items/root”的 ancestorName,并显示云端硬盘中所有项的 activity。

分页

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

页面大小受限。如果应用需要许多 activity,请使用分页发出多个请求,而不是为 pageSize 设置较大的值。具体而言,如果获取的 activity 可能比响应中包含的 activity 多,则响应中也将包含 nextPageToken。如需检索更多结果,请重复执行同一请求,但添加一个 pageToken 字段,其值为来自之前响应的 nextPageToken

整合

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

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

虽然单个 Action 有一个 Actor 和一个 Target,但在分组后,生成的 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 和“包含”运算符 (:)。您可以使用单数值,也可以使用括号括起来并以空格分隔允许的操作类型列表。如需查找操作类型列表,请查看 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
}

针对祖先文件夹下的每个云端硬盘内容请求汇总 activity:

{
  "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"
}