GoogleAppsサービスのユーザー向けのドキュメントの作成を自動化したいと思います。
考慮事項:
- ユーザーに対してOAuthを有効にできません
- SuperAdminAPIアクセストークンを持っています
- ユーザーのメールアドレスしか知りません
これは既存のRubyライブラリで実現できますか?(ほとんどの場合、これを管理者としてではなくユーザーとして実行するために、2本足の認証を使用します。)
GoogleAppsサービスのユーザー向けのドキュメントの作成を自動化したいと思います。
考慮事項:
これは既存のRubyライブラリで実現できますか?(ほとんどの場合、これを管理者としてではなくユーザーとして実行するために、2本足の認証を使用します。)
私は「サービスアカウント」とGoogleの(アルファ)宝石でこれを達成することができましたgoogle-api-client
。これは、さまざまなGoogleドキュメントからサンプリングされたRubyクラスであり、インスタンス化されたときに(管理しているGoogle Appsドメインから)ユーザーの電子メールを受け取ります。
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
使用法は十分に簡単です:
g = GoogleDriveConnection.new('me@mycompany.com')
g.insert_file('My file', 'File stuff', nil, 'text/csv', "#{Rails.root}/tmp/test.csv")
*サービスアカウントの作成と「APIプロジェクト」の管理には注意が必要でした。このガイドが最も役立つようでした。