Получение «неопределенного пакета методов» для API каталога Google с служебной учетной записью

Итак, я пишу сценарий для пакетного удаления пользователей из домена Google Apps для образования. Код выглядит следующим образом:

#! /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')). Я не вижу, как это будет иметь значение, хотя.


person Community    schedule 24.07.2015    source источник


Ответы (1)


Вы можете сделать это следующим образом:

client = Google::APIClient.new(
 :application_name => 'XXX',
 :application_version => '0.1'

)

directory = client.discovered_api('admin', 'directory_v1')
batch = Google::APIClient::BatchRequest.new do |result|
 puts result.data
end
batch.add(:api_method => directory.users.delete,:parameters => { :userKey =>       user[:emailaddress].downcase })
client.execute(batch)
person Aravind Raju    schedule 15.12.2015