是否可以通过一个请求仅列出根目录文件夹或Google Drive API上根目录下任何级别的文件?

时间:2019-12-09 22:59:19

标签: python python-3.x google-drive-api

我想做的是从Google云端硬盘文件创建本地文件树(就像缓存一样工作),因此我不必每次都需要文件信息时发出HTTP请求(配额限制为Google API)。可以找到代码here

我最好的方法是一次请求所有文件,所以我有一个庞大的File列表,没有太多的HTTP请求,我可以将它们链接起来以创建树。通过对文件进行一些技巧来完成这种工作,但是问题是我得到的文件比我需要的多得多(收到9729个文件,仅1764个有用文件),因为我无法想到高效的{{ 3}}到filter服务。我正在下载所有文件(包括sharedWithMe,除了垃圾桶,因为trashed = false的过滤器很简单,它也仅下载必要的字段),并且由于不必要的数据,它花费的时间比必要的长得多。

我只想获取MyDrive(根)文件夹下的文件(有一些list,我不能简单地通过使用q = 'me' in owner来忽略它们)。换句话说,我只想获取位于根级别的文件,属于根级别文件的子级的文件等等。有查询吗?还是至少使其更有效率?

注意:这不是files that are sharedWithMe and are also under MyDrive

1 个答案:

答案 0 :(得分:1)

我发现创建树的最佳方法是:

  1. 请求所有文件夹(q: mimeType = 'application/vnd.google-apps.folder')的files.list,因为通常文件夹少于文件。 trashed = false也可能有用。
  2. 创建丢弃所有无用文件夹的树形结构。
  3. 对于树中的每个文件夹,获取其ID,然后使用q = 'mimeType != 'application/vnd.google-apps.folder' and (folderId1' in parents or 'folderId2 in parents or ... or 'folderIdN' in parents)获取file.list(请注意主体尺寸过大(可能超过25,000个字符,不确定)的过于复杂的查询错误)。
  4. 完成树的链接。

这样做,将会有一些无用的数据和一些请求,但是下载的数据量比没有q限制的列表文件要少得多。

这个想法来自替代3 this question的答案。