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.