Получить содержимое файла с помощью Drive API - PullRequest
0 голосов
/ 08 апреля 2019

Я пытаюсь загрузить файл, загруженный на Team Drive, используя метод 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'}

Я могу получить доступ к метаданным файла, но не знаю, как получить содержимое файла для записи в файл.

I 'используя полную область доступа, «https://www.googleapis.com/auth/drive".

Документация говорит:« Получает метаданные или содержимое файла по идентификатору. », но не объясняет, как.

1 Ответ

1 голос
/ 09 апреля 2019

Хорошо.Попробовав разные варианты, я пришел к решению, смешивающему информацию из разных постов.

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 очень грязная и противоречивая во многих отношениях.

...