usuario suit password only gsuite google agregar ruby google-api google-drive-sdk google-spreadsheet google-apps

suit - ¿Cómo puedo crear una hoja de cálculo de Google para un usuario con Ruby, como administrador de Google Apps?



google suit admin (1)

Me gustaría automatizar la creación de documentos para los usuarios de nuestro servicio Google Apps.
Consideraciones:

  • No se puede habilitar OAuth para los usuarios
  • Tengo tokens de acceso Super API API
  • Solo sé la dirección de correo electrónico del usuario

¿Se puede lograr esto con una biblioteca de Ruby existente? (La mayoría usa autenticación de dos patas para lograr esto como usuario, no como administrador).


Pude lograr esto con una "Cuenta de servicio" y la gema google-api-client Google (alpha). Aquí hay una clase de Ruby, tomada de una documentación de Google distinta, que toma el correo electrónico de un usuario (del dominio de Google Apps que administra) cuando se crea una instancia.

require ''google/api_client'' class GoogleDriveConnection def initialize(user_email=nil) @client = Google::APIClient.new @drive = @client.discovered_api(''drive'', ''v2'') key_file_name = ''<DOWNLOADED WHEN CREATING A SERVICE ACCOUNT>.p12'' key = Google::APIClient::PKCS12.load_key("#{Rails.root.to_s}/config/#{key_file_name}", ''notasecret'') asserter = Google::APIClient::JWTAsserter.new( ''<THE EMAIL ADDRESS OF YOUR SERVICE ACCOUNT>'', ''https://www.googleapis.com/auth/drive'', key) @client.authorization = asserter.authorize(user_email) end def insert_file(title, description, parent_id, mime_type, file_name) file = @drive.files.insert.request_schema.new({ ''title'' => title, ''description'' => description, ''mimeType'' => mime_type }) # Set the parent folder. if parent_id file.parents = [{''id'' => parent_id}] end media = Google::APIClient::UploadIO.new(file_name, mime_type) result = @client.execute( :api_method => @drive.files.insert, :body_object => file, :media => media, :parameters => { ''uploadType'' => ''multipart'', ''convert'' => true, ''alt'' => ''json''}) if result.status == 200 return result.data else puts "An error occurred: #{result.data[''error''][''message'']}" return nil end end def list_files result = @client.execute!(:api_method => @drive.files.list) result.data.to_hash end def get_file(file_id) result = @client.execute!( :api_method => @drive.files.get, :parameters => { ''fileId'' => file_id }) result.data.to_hash end private def token @client.authorization.access_token end end

El uso es bastante simple:

g = GoogleDriveConnection.new(''[email protected]'') g.insert_file(''My file'', ''File stuff'', nil, ''text/csv'', "#{Rails.root}/tmp/test.csv")

* Crear una cuenta de servicio y administrar el "Proyecto API" fue complicado. Esta guía parece ser la más útil.