xdl*_*xdl 3 python google-drive-api google-drive-shared-drive
我正在根据 Google Team Drive 文件的内容实现一个基于树的查看器;为此,我遵循此处给出的建议:How do I search sub-folders and sub-sub-folders in Google 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
Run Code Online (Sandbox Code Playgroud)
在这里,文件不应该超过pageSize,但我肯定从这个结果中丢失了大量文件夹,例如 id 为 的特定文件夹specified_id:
len([x for x in res['files'] if x['id'] == specified_id])
# 0
Run Code Online (Sandbox Code Playgroud)
我不认为这是权限问题,因为我可以正常获取此文件:
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': '...'}
Run Code Online (Sandbox Code Playgroud)
为了实现在一个 API 请求中获取 Google(团队)云端硬盘中的所有文件夹的目标,有关尝试其他事情的任何其他提示将不胜感激。
您的代码中有一个错误。您的代码假设如果您有(比如说)500 个文件夹,则通过给出 a pageSize=1000,所有 500 个文件夹将包含在单个 list.execute 中。云端硬盘不是这样工作的。
pageSize 只是最大值,因此最多会包含 1000 个文件夹。API 不保证包含最多 1000 个的所有文件夹。您需要迭代请求中的list.execute包含内容,直到。pageTokennextPageToken==null