Google Drive API: проверьте, существует ли папка - PullRequest
3 голосов
/ 07 июня 2019

Я использую Google Drive API, чтобы попытаться ответить на, казалось бы, простой вопрос: существует ли папка с определенным именем на диске?

Особенности:

  • ВерсияV3 API привода
  • Python-клиент: googleapiclient

Пример:

С учетом идентификатора прилагаемого диска abcdef папка с именем June 2019 (и mimeType application/vnd.google-apps.folder) существует?

Текущий маршрут:

>>> from googleapiclient.discovery import build
>>> # ... build credentials
>>> driveservice = build("drive", "v3", credentials=cred).files()
>>> [i for i in driveservice.list().execute()['files'] if 
...  i['name'] == 'June 2019' and i['mimeType'] == 'application/vnd.google-apps.folder']                                                                                                                                                                     
[{'kind': 'drive#file',
  'id': '1P1k5c2...........',
  'name': 'June 2019',
  'mimeType': 'application/vnd.google-apps.folder'}]

Таким образом, ответ - да, папка существует.Но должен быть более эффективный способ сделать это через .list(), передав driveId.Как это можно сделать?Я пробовал различные комбинации, каждая из которых выдает ответ, отличный от 200.

>>> FOLDER_ID = "abcdef........"
>>> driveservice.list(corpora="drive", driveId=FOLDER_ID).execute()                                                                                                                                                                                                          
# 403 response, even when adding the additional requested params

Как использовать параметр q для запроса по имени папки?

1 Ответ

3 голосов
/ 10 июня 2019

При использовании driveId и corpora="drive" необходимо указать еще два параметра: includeItemsFromAllDrives и supportsAllDrives

Код:

response = driveservice.list(
    q="name='June 2019' and mimeType='application/vnd.google-apps.folder'",
    driveId='abcdef',
    corpora='drive',
    includeItemsFromAllDrives=True,
    supportsAllDrives=True
).execute()

for item in response.get('files', []):
    # process found item

Обновление:

Если это идентификатор диска, который, как вы уверены, существует, и вы продолжаете получать сообщение об ошибке «Общий диск не найден», это может быть проблемой области действия с учетными данными, полученными вами для API.Кроме того, в соответствии с этими документами Google API, по-видимому, происходит множество изменений и устареваний, связанных с поддержкой API общих дисков.https://developers.google.com/drive/api/v3/enable-shareddrives https://developers.google.com/drive/api/v3/reference/files/list

Если у вас продолжаются эти проблемы, вот альтернативное решение для вас, используя параметр spaces:

response = driveservice.list(
    q="name='June 2019' and mimeType='application/vnd.google-apps.folder'",
    spaces='drive'
).execute()

for item in response.get('files', []):
    # process matched item
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...