#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 Спасибо, что ответили и протестировали его. Я рад, что ваш вопрос был решен. И тебе тоже спасибо.