Google Drive API v3 Python文件中缺少某些文件()。list()

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Google Drive API v3 Python文件中缺少某些文件()。list()相关的知识,希望对你有一定的参考价值。

我是使用Google Drive API for Python(v3)的新手,我一直在尝试访问和更新我拥有fileId的特定父文件夹中的子文件夹。这是我为API驱动程序构建的:

store = file.Storage('token.json')
creds = store.get()
if not creds or creds.invalid:
    flow = client.flow_from_clientsecrets('credentials.json',
           scope='https://www.googleapis.com/auth/drive')
    creds = tools.run_flow(flow, store)
service = build('drive', 'v3', http=creds.authorize(Http()))

我可以使用files().list()成功访问大多数子文件夹,但返回的结果列表中至少有一个丢失:

results = service.files().list(
    q="parents in '1QXPl6z04GsYAO0GKHBk2oBjEweaAbczw'", 
    fields="files(id, name), incompleteSearch, nextPageToken").execute()
items = results['files']

我仔细检查了结果中没有nextPageToken键,incompleteSearch的值是False,我假设这意味着返回完整的结果列表。此外,当我使用file().get()方法访问缺少文件的父项列表时,列出的唯一父项是上面查询中的父项:

service.files().get(
    fileId='1WHP02DtXfJHfkdr47xSeeRIj0sCrihPA',
    fields='parents, name').execute()

并返回:

{'name': 'Sara Gaul -Baltimore Corps docs and schedules',
 'parents': ['1QXPl6z04GsYAO0GKHBk2oBjEweaAbczw']}

其他可能相关的细节:

  • 未出现在列表中的此特定文件夹由协作者重命名。
  • 我在jupyter笔记本上运行此代码而不是python文件。
  • 我是一个命名的协作者,对所有子文件夹都有写访问权限,包括没有显示的子文件夹。

更新

  • files().list()查询用于返回文件夹中41的40条记录。现在它只返回39。
  • 使用扩展写入级别权限的链接访问该文件夹的人重命名了不再返回的两个文件夹。
  • 当使用files().get()直接查询其文件夹详细信息时,两个未返回的文件夹仍然具有父文件夹作为其唯一父文件夹,并且其权限未更改。

主要问题:

  1. 为什么这个文件显然没有在我的file().list()查询中列出的父ID显示在该查询的结果中?有没有办法调整查询或文件,以确保它呢?
  2. 是否有更简单的方法列出Google Drive API v3中文件夹中包含的所有文件?我知道v2对于文件夹有一个children()方法,但据我所知,它在v3中被弃用了
答案

我用我的代码弄清楚了错误:

我之前在files().list()方法中的查询参数是:

results = service.files().list(
    q="parents in '1QXPl6z04GsYAO0GKHBk2oBjEweaAbczw'", 
    fields="files(id, name), incompleteSearch, nextPageToken").execute()
items = results['files']

在查看有人在Google的问题跟踪器中发布的另一个错误后,我看到该查询的首选语法是:

results = service.files().list(
    q="'1QXPl6z04GsYAO0GKHBk2oBjEweaAbczw' in parents", 
    fields="files(id, name), incompleteSearch, nextPageToken").execute()
items = results['files']

换句话说,将parents in fileId的顺序切换为fileId in parents。随着语法的改变,返回了所有41个文件。

我有两个后续问题,希望有人可以澄清:

  1. 如果不正确,为什么第一个语法会返回任何记录?为什么更改文件名会阻止使用第一种语法返回它?
  2. 如果您想返回存储在几个文件夹之一中的文件列表,有没有办法将多个父ID传递给查询,因为parents in ...语法会建议?或者他们必须被评估为单独的条件,即fileId1 in parents or fileId2 in parents

如果有人可以用这些解释对这个答案发表评论或发表更完整的答案,我很乐意选择它作为最佳答案。

以上是关于Google Drive API v3 Python文件中缺少某些文件()。list()的主要内容,如果未能解决你的问题,请参考以下文章

使用 Java 和 Google Drive API V3 将文件上传到共享的 Google Drive 位置?

如何通过 Google Drive .NET API v3 使用服务帐户访问 Team Drive

Google Drive API v3:没有任何方法可以获取 google 文档的下载 url?

Google Drive API v3 Python文件中缺少某些文件()。list()

文件移动 Google Drive API v3 PHP

如何从 Google Drive 上传和下载文件(使用 Rest Api v3)