【问题标题】:Google API search for folder by IDGoogle API 按 ID 搜索文件夹
【发布时间】:2021-05-19 18:21:01
【问题描述】:

有没有办法让 Google API 按 ID 搜索?我尝试了 q="id='FOLDER_ID'" 的多种组合(我已经能够按名称查找,所以我知道我的整体代码正在运行),但我总是得到一个错误像这样:

googleapiclient.errors.HttpError:https://www.googleapis.com/drive/v3/files?q=id%3D%27FOLDER_ID%27&spaces=drive&fields=%2A&alt=json 时返回“无效值”。详细信息:“[{'domain': 'global', 'reason': 'invalid', 'message': 'Invalid Value', 'locationType': 'parameter', 'location': 'q'}]">

我无法找到 service.files().list() 函数的任何文档(我发现的只是“支持的语法”,这完全没有帮助),我也找不到我想要的示例认为这是一个相当基本的查找。

我在 python 中这样做,但这可能只是次要的。

【问题讨论】:

  • 我必须为我糟糕的英语水平道歉。不幸的是,根据您的问题,我无法理解您的目标。我可以问你目标的细节吗?
  • @Tanaike 我正在尝试使用 google API 使用文件夹的 32 个字符 ID 来检索文件夹的信息。例如,如果我有一个文件夹 drive.google.com/drive/u/0/folders/…,我应该能够使用类似 'q="id = 1J5oHywhD9zDmOhgnfq6wdrrnyTJo6TX"' 的内容进行查询,但似乎“id”不是有效的查询选项.
  • 感谢您的回复。从你的回复中,我提出了一个答案。你能确认一下吗?如果我误解了您的问题,我深表歉意。

标签: python google-drive-api


【解决方案1】:

我相信你的目标如下。

  • 您想从文件夹 ID 中检索文件夹信息。
  • 您想使用 googleapis for python 来实现这一点。

在“文件:列表”的方法中,当使用文件夹ID时,可以检索到文件夹ID的文件夹下的文件列表。根据您的问题,我认为您可能想使用 'folderId' in parents 作为搜索查询。在当前阶段,id 未在搜索查询中使用。例如,当使用搜索查询的name='folder name'时,可以检索到文件夹信息。不幸的是,使用“文件:列表”的方法无法直接从文件夹ID中检索文件夹信息。

在这种情况下,我认为可以使用“Files:get”的方法。当这反映到使用 googleapis for python 的脚本时,它变成如下。

示例脚本:

service = build('drive', 'v3', credentials=creds)
folderId = '###' # Please set the folder ID.
res = service.files().get(fileId=folderId, fields='*').execute()
print(res)

注意:

  • 如果您想使用“文件:列表”的方法和文件夹ID来实现您的目标,您还可以使用以下脚本。在这种情况下,首先,使用“Files:get”方法检索文件夹名称,使用“Files:list”方法检索文件夹信息。 q="name='" + res1['name'] + "' and mimeType='application/vnd.google-apps.folder' and trashed=false" 的搜索查询用于此目的。在这种情况下,当驱动器中存在相同的文件夹名称时,“文件:列表”会返回这些文件夹信息。

      service = build('drive', 'v3', credentials=creds)
      folderId = '###' # Please set the folder ID.
      res1 = service.files().get(fileId=folderId).execute()
      res2 = service.files().list(q="name='" + res1['name'] + "' and mimeType='application/vnd.google-apps.folder' and trashed=false", fields='*').execute()
      print(res2)
    

参考资料:

【讨论】:

  • 这主要对我有用。使用“get”来收集文件夹的信息绝对是关键。 “get”的文档没有说明在文件夹中使用它。
  • 不过,这种方法存在问题。在一种情况下,我有一个本地文件夹,它与我要获取内容的文件夹同名。所以,如果我使用它, res 会以 my 文件夹的内容结束,而不是我实际查看的内容。幸运的是,解决方案非常简单(实际上到目前为止我一直在这样做): q=f"'{args.folder_id}' in parents and mimeType='application/vnd.google-apps.folder ' 和垃圾=假" 或 q="'" + folderId + "' 在父母和 mimeType='application/vnd.google-apps.folder' 和垃圾=false"
  • @Phantom of Krankor 感谢您的回复。很高兴您的问题得到解决。
猜你喜欢
  • 1970-01-01
  • 2015-12-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-13
  • 1970-01-01
相关资源
最近更新 更多