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



我是使用适用于Python的Google Drive API (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 文件运行此代码。
  • 我是指定协作者,对所有子文件夹具有写入权限,包括未显示的子文件夹。

更新

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

主要问题:

  1. 为什么这个在我的file().list()查询中明确列出了父 ID 的文件没有显示在该查询的结果中?有没有办法调整查询或文件以确保它这样做?
  2. 有没有更简单的方法列出 Google 云端硬盘 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的问题跟踪器中发布的API问题跟踪器中发布的另一个错误后,我看到该查询的首选语法是:

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. 如果要返回存储在几个文件夹之一中的文件列表,有没有办法像parents in ...语法建议的那样将多个父 ID 传递给查询?还是必须将它们作为单独的条件进行评估,即fileId1 in parents or fileId2 in parents

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

最新更新