Как переименовать файл с помощью Google Drive API для Ruby?
Это кажется основным вопросом, но я уже на второй день: (
Я использую Google Drive Ruby Api здесь: https://github.com/google/google-api-ruby-client но основные примеры файлов в README, по-видимому, сильно устарели. В частности, вызовы Drive.update_file
не принимают ничего похожего на показанные параметры.
Пока что я могу получить авторизованный сервис DriveService:
drive = Google::Apis::DriveV3::DriveService.new
drive.authorization = Google::Auth.get_application_default(['https://www.googleapis.com/auth/drive'])
Я могу получить файл:
file_id = 'string-of-stuff'
file = drive.get_file file_id
Я могу установить атрибуты на объект File, который выглядит нормально:
file.update!(name: 'My new name')
Но я не могу понять, как заставить обновление / патч действительно работать после этого. README предлагает drive.update_file(file)
, но это просто взрывается с ошибкой типа.
TypeError: Can't convert Google::Apis::DriveV3::File into String or Array.
Глядя на код, #update_file
фактически ожидает file_id
в качестве первого парама.
Я пробовал всевозможные вариации, основанные на README, например:
drive.update_file(file_id, {name: 'New name'})
Или:
drive.update_file(file_id, {title: 'New name'})
Или (глядя на код):
drive.update_file(file_id, fields: {title: 'New name'})
Или даже:
drive.update_file(file_id, file)
Который взрывается с:
Google::Apis::ClientError: fieldNotWritable: The resource body includes fields which are not directly writable.
Но ничего не работает для меня. Кто-нибудь пользовался этой библиотекой? Все остальное кажется довольно простым, но это просто трудно.
1 ответ:
Ну, после гораздо большего количества проб и ошибок, единственный способ, которым этот API работает с новым
File
объект. Если вы используетеget_file
для получения вашегоFile
, то в конечном итоге вы получаете объект, который имеет неписаное поле id.Итак, это - и только это-кажется, работает:
drive.update_file(file_id, Google::Apis::DriveV3::File.new(name: name))
Вздох.