Google 驱动器 API,获取为整个组织添加的文件总数

Google Drive API, get total files added for the entire organization

我收到一个请求,要求为我们的组织计算添加到 google 驱动器的所有文件的数量。 基本上计算每个用户在 google 驱动器中的文件数。 API 有一个我可以调用计数的列表方法,但我必须遍历每个 userId 并获取计数。这将花费很长时间(120,353 条记录)。我在这里错过了什么,因为这似乎是可能的...... 我在 documentation 中注意到他们提到了标准字段和自定义方法,一个标准称为 total_size(int32 列表中项目的总数,与分页无关。 ) 我只是还没有想出在 .net 中如何使用它。

https://developers.google.com/drive/api/v2/reference

我不知道如何使用 google 驱动器 api 并作为组织进行身份验证。

但是,您仍然需要进行大量迭代,所以我不会太担心迭代用户。 google 驱动 api returns 每页一定数量的文件,这意味着在您遍历页面时会进行多次 api 调用。

我认为更大的计算风险是一遍又一遍地计算共享文件(用户可能已经或可能没有添加到他们的 MyDrive 文件夹)。

抱歉,没有全局端点

我认为您正在寻找一个简单的端点 returns 域中的文件总数,但不幸的是 none 因为它不是 Google Drive 存储的方式资料。

一种可能的方法

使用具有全域委派的服务帐户。 Ref

  • 模拟管理员帐户并获取所有用户的列表Ref
  • 根据该信息,模拟每个用户并为每个用户发出云端硬盘 API 请求。由于页面大小有限,您可能需要为每个请求提出一些请求。使用页面标记。 Ref
  • 存储所有 ID 的列表。
  • 计数唯一 ID。

记得在 GCP 控制台和管理控制台中为服务帐户设置权限。 这不是一个简单的解决方案,根据经验,可能需要一些时间才能实施,最困难的部分可能是设置服务帐户,但听起来您已经做到了。

优化方法

  • 使用带有参数 q='"me" in owners'q 参数。这将显着减少您获得的文件数量,因为根据定义,每个文件只有一个所有者。
  • 由于您只需要用户和文件的 ID,请确保只在所有请求的 fields 参数中询问 ID,这将大大加快处理速度。
  • 您还可以利用 batch requests 同时拨打多达 100 个电话。所以如果你有 100 个用户,你可以一次性发出 100 个请求!

如果您需要不断更新此数字,这可能不适合您,但如果您只需要定期更新(每周,可能每天),那么它应该没问题。

性能

为了论证,假设您有 120,000 个文件。如果您在没有 q 参数的情况下实施最简单的解决方案,则会出现重复文件,因为它们是共享的,因此会出现在多个人的驱动器上。为了安全起见,我们将其乘以 10,因此需要为 120 万个文件获取 ID。同样,假设您实施了最不优化的解决方案并且每个请求最多请求 1000 个文件,并且您连续发出请求。考虑到一般请求的平均时间约为 2 秒,让我们将其四舍五入为 5 秒。所以在潜在的坏情况下:

1200000 / 1000 = 1200 requests
1200 * 5 = 6000 seconds
6000 / 60 = 100 minutes

当然,如果您使用批处理并且您有 10 个用户,则可能会减少 10 倍,因此如果所有用户都拥有相同数量的文件,则可能只需要 10 分钟。

如果您再次使用 q 参数,您将删除 10 倍的系数,因此需要 10 分钟。如果您有完美的批处理情况,那么可能需要 1 分钟!

维护总人数

您还可以使用 Reports API 来查询是否创建和删除了文件,因此,通过在每个创建文件时递增它并在每次删除时递减来维护您域中的文件总数。


参考资料