【发布时间】:2018-09-13 16:08:35
【问题描述】:
我是使用 Python (v3) 的 Google Drive API 的新手,我一直在尝试访问和更新我拥有 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 notebook 上运行此代码,而不是从 python 文件。
- 我是指定的协作者,对所有子文件夹(包括未显示的文件夹)具有写入权限。
更新
-
files().list()查询用于返回文件夹中 41 条记录中的 40 条记录。现在它只返回 39。 - 不再返回的两个文件夹都由使用扩展写入级别权限的链接访问文件夹的人重命名。
- 当直接使用
files().get()查询它们的文件夹详细信息时,两个未返回的文件夹仍然将父文件夹作为其唯一的父文件夹,并且它们的权限没有改变。
主要问题:
- 为什么在我的
file().list()查询中明确列出了父 ID 的文件没有显示在该查询的结果中?是否有任何方法可以调整查询或文件以确保它确实如此? - 有没有更简单的方法来列出 Google Drive API v3 中文件夹中包含的所有文件?我知道 v2 有一个用于文件夹的
children()方法,但据我所知,它在 v3 中已被弃用
【问题讨论】:
-
当你从你的字段中排除它时,你是如何仔细检查没有 nextpagetoken 的?
-
我运行了
results.keys(),返回的唯一键是'files,根据此文档:developers.google.com/drive/api/v3/reference/files/list 如果没有多个页面,则返回的对象中不存在该键 -
@DaImTo 我刚刚更新了原始帖子以包含有关
nextPageToken和incompleteSearch的更多信息 -
fields='parents, name' 是一个请求部分响应,您没有在其中包含 nextpagetoken ,因为您永远不会看到它。试试 fields='*'
-
@DaImTo 问题不在于
files().get()方法,而在于files().list(),我将 nextPageToken 包含在字段列表中,但在该查询的结果中仍然不可用