Google 驱动器 API - 仅为 'My Drive' 提取元数据

Google Drive API - Extracting metadata only for 'My Drive'

我正在为 Python 使用 Google Drive API 客户端库。

我只想提取 'My Drive' 中当前文件的元数据。 但是,使用 service.files().list().execute() 不仅会生成当前显示在 'My Drive' 中的文件列表,还会生成以前删除的文件以及存储在 'Google Photos' 中的文件和'Recent'.

如何过滤收到的文件列表以仅检索将下载到安装了 Google Drive sync 的客户端的文件?

您可以同时使用父资源和子资源,以清楚地识别文件夹中 'My Drive' 的内容。此外,您可以使用 files.list 方法,同时包含一个查询以排除已删除的项目。只需包含 'q' 参数,并将查询列为字符串:

param = {}
if page_token:
    param['pageToken'] = page_token
param['q'] = 'trashed = false'
files = service.files().list(**param).execute()

您可以找到有关查询 here 的可用值的更多信息。

已更新

我找到了一种更好的方法来获取 "My Drive" 中的项目列表。而不是 file.list, change.list 更适合我们的用例。

通过将 includeDeletedincludeSubscribed 设置为 falsechange.list returns 更改列表,其中包含严格位于用户驱动器中的文件(没有 最近与我共享)。但是,它确实包括被丢弃的物品。

这个响应更容易处理,因为我们只需要过滤标记为 thrashed 的项目。虽然还不完美,但至少省去了我们构造树的麻烦。

原答案

我找到的最接近的方法是 query for 'me' in owners and trashed = false。此查询将 return "My Drive" 中的所有文件和(不幸的是)"Shared With Me" 中的一些文件。然后你可以从 root 文件夹构建一棵树并删除那些孤立的。

另一方面,最干净的方法是查询 'root' in parents 并逐层遍历树。不过效率不高。

注意:查询not sharedWithMesharedWithMe = false结果为400,否则为最优解