Затова пиша скрипт за групово изтриване на потребители от домейн на Google Apps for Education. Кодът изглежда така:
#! /usr/bin/env ruby
require 'google/api_client'
require 'csv'
service_account_email = '[email protected]'
key_file = 'key.p12'
key_secret = 'notasecret'
admin_email = 'XXX@xxx'
# Build the API Client object
client = Google::APIClient.new(
:application_name => 'XXX',
:application_version => '0.1'
)
key = Google::APIClient::KeyUtils.load_from_pkcs12(key_file, key_secret)
client.authorization = Signet::OAuth2::Client.new(
:token_credential_uri => 'https://accounts.google.com/o/oauth2/token',
:audience => 'https://accounts.google.com/o/oauth2/token',
:scope => 'https://www.googleapis.com/auth/admin.directory.user',
:issuer => service_account_email,
:signing_key => key,
:person => admin_email,
)
client.authorization.fetch_access_token!
directory = client.discovered_api('admin', 'directory_v1')
# Reads and parses CSV input into a hash
# Takes file path as an argument
def import_csv(file)
csv = CSV.new(
File.open(file).read,
:headers => true,
:header_converters => :symbol
)
return csv.to_a.map {|row| row.to_hash}
end
users_to_delete = import_csv('accounts.csv')
puts 'Preparing to delete users...'
users_to_delete.each_slice(1000) do |chunk|
directory.batch do |directory|
chunk.each do |user|
client.execute!(
:api_method => directory.users.delete,
:parameters => { :userKey => user[:emailaddress].downcase }
)
end
end
end
puts 'Users successfully deleted!'
Когато стартирам скрипта без двата външни пакетни блока, скриптът работи перфектно (макар и невероятно бавно).
Това, което искам да знам, е какво трябва да променя, за да спра да ми дава грешката на недефинирания метод в метода „партида“ за API на директорията. В примери в документацията на Google забелязах, че те извикват API по различен начин (zoo = Google::Apis::ZooV1::ZooService.new
вместо zoo = client.discovered_api('zoo', 'v1')
). Не виждам обаче как това ще промени нещата.