Google Drive API: пользователь не допустил ошибку приложения - PullRequest
0 голосов
/ 02 сентября 2018

Я слежу за Quickstart на https://developers.google.com/drive/api/v3/quickstart/python. Я включил API накопителя через страницу, загрузил credentials.json и могу успешно перечислять файлы на моем диске Google. Однако когда я захотел скачать файл, я получил сообщение

`The user has not granted the app ####### read access to the file`

Нужно ли мне делать больше, чем помещать эту область в мой код, или мне нужно активировать что-то еще?

SCOPES = 'https://www.googleapis.com/auth/drive.file'
client.flow_from_clientsecrets('credentials.json', SCOPES)

Ответы [ 2 ]

0 голосов
/ 03 октября 2018

Я столкнулся с той же ошибкой. Я авторизовал всю область, затем извлек файл и использовал класс io.Base для потоковой передачи данных в файл. Обратите внимание, что вам нужно сначала создать файл.

from __future__ import print_function
from googleapiclient.discovery import build
import io
from apiclient import http
from google.oauth2 import service_account

SCOPES = ['https://www.googleapis.com/auth/drive']

SERVICE_ACCOUNT_FILE = 'credentials.json'
FILE_ID = <file-id>

credentials = service_account.Credentials.from_service_account_file(SERVICE_ACCOUNT_FILE, scopes=SCOPES)

service = build('drive', 'v3', credentials=credentials)

def download_file(service, file_id, local_fd):

  request = service.files().get_media(fileId=file_id)
  media_request = http.MediaIoBaseDownload(local_fd, request)

  while True:    
    _, done = media_request.next_chunk()

    if done:
      print ('Download Complete')
      return

file_io_base = open('file.csv','wb')

download_file(service=service,file_id=FILE_ID,local_fd=file_io_base)

Надеюсь, это поможет.

0 голосов
/ 10 сентября 2018

После того, как вы сначала пройдете через Quick-Start Tutorial, область действия будет иметь вид:

SCOPES = 'https://www.googleapis.com/auth/drive.metadata.readonly'

Таким образом, после перечисления файлов и принятия решения о загрузке он не будет работать, так как вам нужно снова сгенерировать токен, поэтому изменение области действия не создаст заново и не запросит у вас «авторизацию Google», которая происходит при первом запуске.

Чтобы принудительно сгенерировать токен, просто удалите свой текущий токен или используйте новый файл для хранения вашего ключа из хранилища:

store = file.Storage('tokenWrite.json')
...