我正在基于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
在这里,文件不应超过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(团队)驱动器中所有文件夹的目的。
答案 0 :(得分:1)
您的代码中有一个错误。您的代码假定如果您拥有(例如)500个文件夹,则通过给pageSize=1000
来将所有500个文件夹都包含在一个list.execute中。 这不是云端硬盘的工作方式。
pageSize仅为最大值,因此将最多包含1000个文件夹。该API不保证将包括所有不超过1000个文件夹。您需要迭代请求中的list.execute
包括pageToken
,直到nextPageToken==null
。