Я пытаюсь загрузить файл, который я загрузил на общий диск, используя метод v3 из drive().files().get()
, как описано в документация.
Я могу получить метаданные, такие как идентификатор файла и разрешения, но не знаю, как получить доступ к фактическому двоичному содержимому, например. чтобы записать его в файл. Рассматриваемый файл представляет собой обычный текстовый файл.
Это часть кода, который я использую.
request = service.files().get(fileId=file_id, supportsTeamDrives=True)
pprint.pprint(request.to_json())
response = request.execute()
pprint.pprint(response)
И ответ (из ппринтов)
Запрос
{
"uri": "https://www.googleapis.com/drive/v3/files/1CxxxxxxxxxxxxHp?supportsTeamDrives=true&alt=json",
"method": "GET",
"body": null,
"headers": {
"accept": "application/json",
"accept-encoding": "gzip, deflate",
"user-agent": "google-api-python-client/1.7.8 (gzip)"
},
"methodId": "drive.files.get",
"resumable": null,
"response_callbacks": [],
"_in_error_state": false,
"body_size": 0,
"resumable_uri": null,
"resumable_progress": 0
}
Метаданные файла
{'id': '1CxxxxxxxxxxxxHp',
'kind': 'drive#file',
'mimeType': 'text/plain',
'name': 'test.txt',
'teamDriveId': 'XXXXXXXXXXXXXXX'}
Я могу получить доступ к метаданным файла, но не знаю, как получить содержимое файла для записи в файл.
Я использую область полного доступа "https://www.googleapis.com/auth/drive".
В документации говорится: «Получает метаданные или содержимое файла по идентификатору», но не объясняется, как это сделать.
Возможный дубликат Проблемы с загрузкой CSV-файлов с Google Диска
Ok. Попробовав разные варианты, я пришел к решению, смешивающему информацию из разных сообщений.
1 - Метод get_media() работает в v3, но нигде не документирован (даже в документах v2). 2 - io.BytesIO не работает, заменен на FileIO.
Код результата был примерно таким:
request = drive_service.files().get_media(fileId=file_id)
fh = io.FileIO(filename, "wb")
downloader = MediaIoBaseDownload(fh, request)
done = False
while done is False:
status, done = downloader.next_chunk()
Документация Google Api действительно запутана и во многих отношениях противоречива.
get_media
задокументирован в документации клиента Python для Drive API, кстати: Developers.google.com/resources/api-libraries/documentation/…
Спасибо большое, уже 3 часа ломаю голову. Просто не мог понять, почему простая задача, такая как чтение простого текстового файла, плохо документирована.
В документе Google Drive API говорится о файлах().get, но вместо этого в примере показаны файлы().get_media.