404 ошибка при доступе к общему диску через Google Drive API

#python #python-3.x #google-drive-api

Вопрос:

Я пытаюсь перечислить метаданные общего диска. Ниже приведен код:

 from __future__ import print_function
import os.path
from googleapiclient.discovery import build
from google_auth_oauthlib.flow import InstalledAppFlow
from google.auth.transport.requests import Request
from google.oauth2.credentials import Credentials

SCOPES = [
'https://www.googleapis.com/auth/drive',
'https://www.googleapis.com/auth/drive.file',
'https://www.googleapis.com/auth/drive.metadata'
]
creds = None

if os.path.exists('token.json'):
    creds = Credentials.from_authorized_user_file('token.json', SCOPES)
    
if not creds or not creds.valid:
    if creds and creds.expired and creds.refresh_token:
        creds.refresh(Request())
    else:
        flow = InstalledAppFlow.from_client_secrets_file('credentials.json', SCOPES)
        creds = flow.run_local_server(port=8080)
    with open('token.json', 'w') as token:
        token.write(creds.to_json())
 

Приведенный выше код работает; он может успешно пройти аутентификацию.

 service = build('drive', 'v3', credentials=creds)
file_id = '0AFmX-a2BvgHBUk9PVA'
results = service.permissions().list(fileId=file_id).execute()
 

Вывод кода выглядит следующим образом:

Обратная трассировка (последний последний вызов): Файл «<pyshell#23>», строка 1, в файле results = service.permissions().list(fileId=идентификатор файла).выполнить() «/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/googleapiclient/_helpers.py», строка 134, в positional_wrapper возвращает завернутый(*args, **kwargs) файл «/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/googleapiclient/http.py», строка 935, в поле выполнить вызов HTTPError(соответственно, содержимое, uri=self.uri) googleapiclient.ошибки.HTTPError: <HTTPError 404 при запросе https://www.googleapis.com/drive/v3/files/0AFmX-a2BvgHBUk9PVA/permissions?alt=json вернулся «файл не найден: 0AFmX-a2BvgHBUk9PVA.». Подробности: «[{‘домен’: ‘глобальный’, ‘причина’: ‘процесс’, ‘сообщение’: ‘файл не найден: 0AFmX-a2BvgHBUk9PVA.’, ‘locationType’: ‘параметр’, ‘место’: ‘идентификатор файла’}]»>

Файл определенно существует. Является ли код неправильным? Правильно ли я использую область разрешений? Нужно ли мне использовать учетную запись службы вместо идентификатора клиента OAuth?

Ответ №1:

Я считаю, что ваша цель и ваша текущая ситуация заключаются в следующем.

  • Вы хотите получить список разрешений с общего диска.
  • Вы можете получить доступ к общему диску.

В этом случае, пожалуйста, укажите supportsAllDrives в параметре запроса для запроса следующее.

supportsAllDrives : Поддерживает ли запрашивающее приложение как Мои диски, так и общие диски. (По умолчанию: ложь)

От:

 results = service.permissions().list(fileId=file_id).execute()
 

Для:

 results = service.permissions().list(fileId=file_id, supportsAllDrives=True).execute()
 

Ссылка:

Комментарии:

1. @ITGarry Спасибо, что ответили и протестировали его. Я рад, что ваш вопрос был решен. И тебе тоже спасибо.