Google 驱动器 API v3:service.files().list 未返回所有文件夹
Google Drive API v3: service.files().list not returning all folders
我正在根据 Google Team Drive 文件的内容实现基于树的查看器;为了做到这一点,我遵循这里给出的建议:,即进行 2 次 API 调用 - 一次获取所有文件夹,另一个获取所有直接子文件这些文件夹。
但是,我注意到获取所有文件夹的调用并没有返回所有文件夹:
res = service.files().list(
corpora='teamDrive',
pageSize=1000,
supportsTeamDrives=True,
includeTeamDriveItems=True,
teamDriveId=TEAM_DRIVE_ID,
fields='files(id,parents,name,mimeType)',
q="mimeType='application/vnd.google-apps.folder' and trashed=false"
).execute()
len(res['files'])
# 460
此处,文件不应超过 pageSize
,但我肯定从这个结果中遗漏了大量文件夹,例如一个特定的 ID 为 specified_id
:
len([x for x in res['files'] if x['id'] == specified_id])
# 0
我认为这不是权限问题,因为我可以正常获取此文件:
specific_file = service.files().get(
fileId=specified_id,
supportsTeamDrives=True,
).execute()
specific_file
{'id': '...',
'kind': 'drive#file',
'mimeType': 'application/vnd.google-apps.folder',
'name': '...',
'teamDriveId': '...'}
为了实现在一次 API 请求中获取 Google(团队)驱动器中的所有文件夹的目标,我们将不胜感激。
您的代码中存在错误。您的代码假定如果您有(比如说)500 个文件夹,那么通过给出 pageSize=1000
,所有 500 个文件夹将包含在一个 list.execute 中。 云端硬盘不是这样工作的。
pageSize 只是一个最大值,因此最多 将包含 1000 个文件夹。 API 不保证包含最多 1000 个文件夹。您需要在请求中迭代 list.execute
include pageToken
,直到 nextPageToken==null
.
我正在根据 Google Team Drive 文件的内容实现基于树的查看器;为了做到这一点,我遵循这里给出的建议:
但是,我注意到获取所有文件夹的调用并没有返回所有文件夹:
res = service.files().list(
corpora='teamDrive',
pageSize=1000,
supportsTeamDrives=True,
includeTeamDriveItems=True,
teamDriveId=TEAM_DRIVE_ID,
fields='files(id,parents,name,mimeType)',
q="mimeType='application/vnd.google-apps.folder' and trashed=false"
).execute()
len(res['files'])
# 460
此处,文件不应超过 pageSize
,但我肯定从这个结果中遗漏了大量文件夹,例如一个特定的 ID 为 specified_id
:
len([x for x in res['files'] if x['id'] == specified_id])
# 0
我认为这不是权限问题,因为我可以正常获取此文件:
specific_file = service.files().get(
fileId=specified_id,
supportsTeamDrives=True,
).execute()
specific_file
{'id': '...',
'kind': 'drive#file',
'mimeType': 'application/vnd.google-apps.folder',
'name': '...',
'teamDriveId': '...'}
为了实现在一次 API 请求中获取 Google(团队)驱动器中的所有文件夹的目标,我们将不胜感激。
您的代码中存在错误。您的代码假定如果您有(比如说)500 个文件夹,那么通过给出 pageSize=1000
,所有 500 个文件夹将包含在一个 list.execute 中。 云端硬盘不是这样工作的。
pageSize 只是一个最大值,因此最多 将包含 1000 个文件夹。 API 不保证包含最多 1000 个文件夹。您需要在请求中迭代 list.execute
include pageToken
,直到 nextPageToken==null
.