#python #google-api #google-drive-api #google-api-python-client
#python #google-api #google-drive-api #google-api-python-client
Вопрос:
я пытаюсь создать общедоступную папку на Google Диске и получить взамен ссылку для совместного использования этого:
def createfolder(foldername,service):
new_role='reader'
types='anyone'
# create folder
file_metadata = {
'name': '{}'.format(foldername),
'mimeType': 'application/vnd.google-apps.folder',
'role': 'reader',
'type': 'anyone',
}
file = service.files().create(body=file_metadata,
fields='id,webViewLink').execute()
print('Folder ID: %s' % file.get('webViewLink'))
return file.get('id')
я зашел так далеко
он создает и папку и печатает ссылку
попробуйте добавить поля в роль и тип тела и установить для него значение reader / anyone, но это не работает
поля типа роли, похоже, игнорируются
есть ли способ сделать это при создании или мне нужно изменить разрешение после его создания?
Ответ №1:
Вы должны вызвать Permissions.create:
Права доступа к файлам обрабатываются с помощью разрешений, а не с помощью Files
методов.
Если вы проверите представление ресурсов файлов, вы заметите, что в некоторых полях, таких как name
или mimeType
, есть слово writable
under Notes
. Это означает, что вы можете изменять эти поля напрямую, используя этот ресурс ( Files
) методы.
Однако, если вы проверите свойство permissions
, вы заметите writable
, что его там нет. Это означает permissions
, что невозможно обновить напрямую, используя Files
методы. Вместо этого вы должны использовать Permissions
методы.
Более конкретно, вы должны вызвать Permissions.create после создания папки и ее извлечения ID
.
Фрагмент кода:
def shareWithEveryone(folderId, service):
payload = {
"role": "reader",
"type": "anyone"
}
service.permissions().create(fileId=folderId, body=payload).execute()
Ссылка:
Комментарии:
1. спасибо, что я надеялся, что смогу сделать это одним вызовом, но этого хватит 🙂
Ответ №2:
Создание папки и изменение разрешений — это два разных вызова.
Сначала создайте свой каталог
file = service.files().create(body=file_metadata).execute()
Затем выполните permissions.update, чтобы установить общедоступные разрешения для файла.
permissions = service.permissions().update(body=permissions).execute()
Я не разработчик python, поэтому код является предположением
Комментарии:
1. Для
permissionId
этого потребуется A (см. Метод ). Кроме того, если файл был только что создан, у него есть только разрешение по умолчанию для владельца. Я не думаю, что это можно обновить, поскольку это заставило бы владельца статьreader
. Вместо этого следует вызвать Permissions.create.2. да, вы можете обновить существующее разрешение, или вы можете просто создать новое, это зависит от вас developers.google.com/drive/api/v3/reference/permissions/create .
3. TBH я буду удивлен, если вы сможете получить webviewlink в каталоге, раньше я делал это только с файлами.
4. Если ранее не было создано никакого разрешения после разрешения по умолчанию, это необязательно. Существующее разрешение является разрешением по умолчанию, соответствующим для
owner
этого файла. Вы не можете обновить это разрешение, чтобы поделиться имanyone
, поскольку может быть только одна учетнаяowner
запись (по крайней мере, для файлов с необщим диском), и вы не можете обновить ее до какой-либо другой роли, напримерreader
, поскольку это приведет к тому, что файл не будет иметь noowner
. Из-за этого при попытке обновить разрешение по умолчанию сpermissions().update
помощью, будет выдана ошибка (fieldNotWritable
).