Google Drive API v3: service.files (). Список не возвращает все папки - PullRequest
0 голосов
/ 26 февраля 2019

Я использую древовидную программу просмотра на основе содержимого файла Google Team Drive;для этого я следую приведенному здесь совету: Как выполнить поиск в подпапках и подпапках на Google Диске? , т. е. сделать 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, но я определенно пропускаю заметное количество папок из этого результата, например, определенную с идентификатором 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': '...'}

Любые другие советы о других вещах, которые нужно попробовать, чтобы достичь цели получения всехпапки на диске Google (Team) в одном запросе API.

1 Ответ

0 голосов
/ 28 февраля 2019

В вашем коде есть ошибка.В вашем коде предполагается, что если у вас есть, скажем, 500 папок, то, дав pageSize=1000, все 500 папок будут включены в один list.execute. Диск работает не так.

Размер страницы - это максимум, поэтому будет включено максимум 1000 папок.API не гарантирует, что все папки до 1000 будут включены.Вам нужно перебрать list.execute include pageToken в вашем запросе до nextPageToken==null.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...