caboose-rets 0.1.194 → 0.1.195

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,21 +1,9 @@
1
- #require 'ruby-rets'
2
- require "rets/version"
3
- require "rets/exceptions"
4
- require "rets/client"
5
- require "rets/http"
6
- require "rets/stream_http"
7
- require "rets/base/core"
8
- require "rets/base/sax_search"
9
- require "rets/base/sax_metadata"
10
-
11
- require 'httparty'
12
- require 'json'
13
-
14
- # http://rets.solidearth.com/ClientHome.aspx
1
+ require 'oauth2'
15
2
 
16
3
  class CabooseRets::RetsImporter # < ActiveRecord::Base
17
4
 
18
5
  @@rets_client = nil
6
+ @@rets_access = nil
19
7
  @@config = nil
20
8
 
21
9
  def self.config
@@ -24,12 +12,12 @@ class CabooseRets::RetsImporter # < ActiveRecord::Base
24
12
 
25
13
  def self.get_config
26
14
  @@config = {
27
- 'url' => nil, # URL to the RETS login
28
- 'username' => nil,
29
- 'password' => nil,
15
+ 'endpoint' => nil,
16
+ 'token_endpoint' => nil,
17
+ 'client_id' => nil,
18
+ 'client_secret' => nil,
30
19
  'temp_path' => nil,
31
- 'log_file' => nil,
32
- 'media_base_url' => nil
20
+ 'log_file' => nil
33
21
  }
34
22
  config = YAML::load(File.open("#{Rails.root}/config/rets_importer.yml"))
35
23
  config = config[Rails.env]
@@ -39,15 +27,58 @@ class CabooseRets::RetsImporter # < ActiveRecord::Base
39
27
  def self.client
40
28
  self.get_config if @@config.nil? || @@config['url'].nil?
41
29
  if @@rets_client.nil?
42
- @@rets_client = RETS::Client.login(
43
- :url => @@config['url'],
44
- :username => @@config['username'],
45
- :password => @@config['password']
30
+ @@rets_client = ::OAuth2::Client.new(
31
+ @@config['client_id'],
32
+ @@config['client_secret'],
33
+ site: @@config['endpoint'],
34
+ token_url: @@config['token_endpoint']
46
35
  )
47
36
  end
48
37
  return @@rets_client
49
38
  end
50
39
 
40
+ def self.access
41
+ @@rets_access = self.client.client_credentials.get_token
42
+ end
43
+
44
+ def self.resource(resource_name, query, per_page = 100, count = false, select_column = nil, page_number = 1)
45
+
46
+ params = {
47
+ "$filter" => query,
48
+ "$top" => per_page
49
+ }
50
+
51
+ extra_path = ""
52
+
53
+ if count
54
+ extra_path = "/$count"
55
+ end
56
+
57
+ if !select_column.blank?
58
+ params["$select"] = "ListingId"
59
+ end
60
+
61
+ if page_number > 1
62
+ params["$skip"] = ((page_number - 1) * per_page)
63
+ end
64
+
65
+ url_path = "/trestle/odata/#{resource_name}#{extra_path}"
66
+
67
+ # self.log3(resource_name, nil, "Making request to URL #{url_path} with params #{params}")
68
+
69
+ response = self.access.get(url_path, params: params )
70
+
71
+ if response && response.body
72
+ if response.parsed['@odata.count']
73
+ return response.parsed['@odata.count']
74
+ else
75
+ return response.parsed['value']
76
+ end
77
+ else
78
+ return nil
79
+ end
80
+ end
81
+
51
82
  def self.meta(class_type)
52
83
  case class_type
53
84
  when 'Office' then Caboose::StdClass.new({ :search_type => 'Office' , :remote_key_field => 'OfficeMlsId' , :local_key_field => 'lo_mls_id' , :local_table => 'rets_offices' , :date_modified_field => 'ModificationTimestamp'})
@@ -62,32 +93,44 @@ class CabooseRets::RetsImporter # < ActiveRecord::Base
62
93
  # Import method
63
94
  #=============================================================================
64
95
 
96
+ def self.import_one_property(mls_number)
97
+ response = self.resource('Property', "ListingId eq '#{mls_number}'")
98
+ data = response ? response[0] : nil
99
+ # self.log3('Property',nil,"WE GOT THE PROPERTY: #{data['ListingId']}") if data
100
+ obj = data ? self.get_instance_with_id('Property', data) : nil
101
+ if obj.nil?
102
+ self.log3(class_type,nil,"Error: object is nil")
103
+ self.log3(class_type,nil,data.inspect)
104
+ else
105
+ obj.parse(data)
106
+ obj.save
107
+ end
108
+ end
109
+
65
110
  def self.import(class_type, query)
66
111
  m = self.meta(class_type)
67
112
  self.log3(class_type,nil,"Importing #{m.search_type}:#{class_type} with query #{query}...")
68
113
  self.get_config if @@config.nil? || @@config['url'].nil?
69
- params = {
70
- :search_type => m.search_type,
71
- :class => class_type,
72
- :query => query,
73
- :timeout => -1
74
- }
114
+
75
115
  obj = nil
76
116
 
77
117
  begin
78
- self.client.search(params) do |data|
79
- obj = self.get_instance_with_id(class_type, data)
80
- if obj.nil?
81
- self.log3(class_type,nil,"Error: object is nil")
82
- self.log3(class_type,nil,data.inspect)
83
- next
118
+ results = self.resource(m.search_type, query)
119
+ if results && results.count > 0
120
+ results.each do |data|
121
+ obj = self.get_instance_with_id(class_type, data)
122
+ if obj.nil?
123
+ self.log3(class_type,nil,"Error: object is nil")
124
+ self.log3(class_type,nil,data.inspect)
125
+ next
126
+ end
127
+ obj.parse(data)
128
+ obj.save
84
129
  end
85
- obj.parse(data)
86
- obj.save
87
130
  end
88
- rescue RETS::HTTPError => err
131
+ rescue
89
132
  self.log3(class_type,nil,"Import error for #{class_type}: #{query}")
90
- self.log3(class_type,nil,err.message)
133
+ #self.log3(class_type,nil,err.message)
91
134
  end
92
135
  end
93
136
 
@@ -130,56 +173,50 @@ class CabooseRets::RetsImporter # < ActiveRecord::Base
130
173
  self.log3(class_type,nil,"Updating #{class_type} modified after #{date_modified} and #{si}")
131
174
  m = self.meta(class_type)
132
175
  k = m.remote_key_field
133
- d = date_modified.in_time_zone(CabooseRets::timezone).strftime("%FT%T")
176
+ d = date_modified.in_time_zone(CabooseRets::timezone).strftime("%FT%TZ")
134
177
 
135
178
  statusquery = ""
136
179
  case class_type
137
- when 'Property' then statusquery = "OriginatingSystemName=WESTAL"
138
- when 'Office' then statusquery = "OfficeStatus=Active"
139
- when 'Member' then statusquery = "MemberStatus=Active"
140
- when 'OpenHouse' then statusquery = "OpenHouseKeyNumeric=0+"
180
+ when 'Property' then statusquery = "OriginatingSystemName eq 'WESTAL'"
181
+ when 'Office' then statusquery = "OfficeStatus eq 'Active'"
182
+ when 'Member' then statusquery = "MemberStatus eq 'Active'"
183
+ when 'OpenHouse' then statusquery = "OpenHouseKeyNumeric gt 0"
141
184
  end
142
185
 
143
- quer = "(#{m.date_modified_field}=#{d}+)AND(OriginatingSystemName=WESTAL)AND(#{statusquery})"
144
- params = {
145
- :search_type => m.search_type,
146
- :class => class_type,
147
- :select => [m.remote_key_field],
148
- :querytype => 'DMQL2',
149
- :query => quer,
150
- :limit => 1000,
151
- :standard_names_only => true,
152
- :timeout => -1
153
- }
154
- self.log3(class_type,nil,"Searching with params: " + params.to_s)
155
- self.client.search(params) do |data|
156
- self.log3(class_type,nil,"Resulting data: " + data.to_s)
157
- case class_type
158
- when 'Property' then self.delay(:priority => 10, :queue => 'rets').import_properties(data[k], save_images)
159
- when 'Office' then self.delay(:priority => 10, :queue => 'rets').import_office( data[k], false)
160
- when 'Member' then self.delay(:priority => 10, :queue => 'rets').import_agent( data[k], false)
161
- when 'OpenHouse' then self.delay(:priority => 10, :queue => 'rets').import_open_house(data[k], false)
186
+ query = "#{m.date_modified_field} gt #{d} and #{statusquery}"
187
+
188
+ self.log3(class_type,nil,"Searching with query: " + query)
189
+
190
+ results = self.resource(m.search_type, query, 1000)
191
+
192
+ if results && results.count > 0
193
+ results.each do |data|
194
+ # self.log3(class_type,nil,"Resulting data: " + data.to_s)
195
+ case class_type
196
+ when 'Property' then self.delay(:priority => 10, :queue => 'rets').import_properties(data[k], save_images)
197
+ when 'Office' then self.delay(:priority => 10, :queue => 'rets').import_office( data[k], false)
198
+ when 'Member' then self.delay(:priority => 10, :queue => 'rets').import_agent( data[k], false)
199
+ when 'OpenHouse' then self.delay(:priority => 10, :queue => 'rets').import_open_house(data[k], false)
200
+ end
162
201
  end
163
202
  end
164
203
 
165
204
  # Check for changed images
166
205
  if class_type == 'Property' && Rails.env.production?
167
206
  self.log3("Property",nil,"Checking for modified images on Properties...")
168
- d1 = (self.last_updated - 1.hours).in_time_zone(CabooseRets::timezone).strftime("%FT%T")
169
- params = {
170
- :search_type => m.search_type,
171
- :class => class_type,
172
- :select => [m.remote_key_field],
173
- :querytype => 'DMQL2',
174
- :limit => 1000,
175
- :query => "(PhotosChangeTimestamp=#{d1}+)AND(OriginatingSystemName=WESTAL)AND(MlsStatus=Active)",
176
- :standard_names_only => true,
177
- :timeout => -1
178
- }
179
- self.log3(class_type,nil,"Searching with params: " + params.to_s)
180
- self.client.search(params) do |data|
181
- self.log3(class_type,nil,"Resulting data: " + data.to_s)
182
- self.delay(:priority => 10, :queue => 'rets').import_properties(data[k], true)
207
+ d1 = (self.last_updated - 1.hours).in_time_zone(CabooseRets::timezone).strftime("%FT%TZ")
208
+
209
+ query = "PhotosChangeTimestamp gt #{d1} and OriginatingSystemName eq 'WESTAL' and MlsStatus eq 'Active'"
210
+
211
+ self.log3(class_type,nil,"Searching with query: " + query)
212
+
213
+ results = self.resource(m.search_type, query, 1000)
214
+
215
+ if results && results.count > 0
216
+ results.each do |data|
217
+ # self.log3(class_type,nil,"Resulting data: " + data.to_s)
218
+ self.delay(:priority => 10, :queue => 'rets').import_properties(data[k], true)
219
+ end
183
220
  end
184
221
  end
185
222
 
@@ -193,10 +230,10 @@ class CabooseRets::RetsImporter # < ActiveRecord::Base
193
230
  si = save_images ? 'saving images' : 'not saving images'
194
231
  self.log3('Property',mls_id,"Importing Property #{mls_id} and #{si}...")
195
232
  save_images = true if !CabooseRets::Property.where(:mls_number => mls_id.to_s).exists?
196
- self.import('Property', "(ListingId=#{mls_id})")
233
+ self.import('Property', "ListingId eq '#{mls_id}'")
197
234
  p = CabooseRets::Property.where(:mls_number => mls_id.to_s).first
198
235
  if p != nil && p.status == 'Active'
199
- self.download_property_images(p) if save_images == true && Rails.env.production?
236
+ self.download_property_images(p) if save_images == true # && Rails.env.production?
200
237
  if p.latitude.blank? || p.latitude == '0.0' || p.longitude.blank? || p.longitude == '0.0'
201
238
  self.update_coords(p)
202
239
  end
@@ -207,7 +244,7 @@ class CabooseRets::RetsImporter # < ActiveRecord::Base
207
244
 
208
245
  def self.import_office(mls_id, save_images = true)
209
246
  self.log3('Office',mls_id,"Importing Office #{mls_id}...")
210
- self.import('Office', "(OfficeMlsId=#{mls_id})")
247
+ self.import('Office', "OfficeMlsId eq '#{mls_id}'")
211
248
  office = CabooseRets::Office.where(:matrix_unique_id => mls_id.to_s).first
212
249
  end
213
250
 
@@ -216,7 +253,7 @@ class CabooseRets::RetsImporter # < ActiveRecord::Base
216
253
  a = CabooseRets::Agent.where(:mls_id => mls_id.to_s).first
217
254
  if a.nil?
218
255
  self.log3('Agent',mls_id,"Importing new Agent #{mls_id}...")
219
- self.import('Member', "(MemberMlsId=#{mls_id})")
256
+ self.import('Member', "MemberMlsId eq '#{mls_id}'")
220
257
  a = CabooseRets::Agent.where(:mls_id => mls_id.to_s).first
221
258
  if a
222
259
  a.last_updated = DateTime.now
@@ -229,7 +266,7 @@ class CabooseRets::RetsImporter # < ActiveRecord::Base
229
266
  is_old = diff > 86400 # 24 hours
230
267
  if is_old
231
268
  self.log3('Agent',mls_id,"Updating existing Agent #{mls_id}...")
232
- self.import('Member', "(MemberMlsId=#{mls_id})")
269
+ self.import('Member', "MemberMlsId eq '#{mls_id}'")
233
270
  a.last_updated = DateTime.now
234
271
  a.save
235
272
  else
@@ -240,12 +277,12 @@ class CabooseRets::RetsImporter # < ActiveRecord::Base
240
277
 
241
278
  def self.import_open_house(oh_id, save_images = true)
242
279
  self.log3('OpenHouse',oh_id,"Importing Open House #{oh_id}...")
243
- self.import('OpenHouse', "(OpenHouseKey=#{oh_id})")
280
+ self.import('OpenHouse', "OpenHouseKey eq '#{oh_id}'")
244
281
  end
245
282
 
246
283
  def self.import_media(id, save_images = true)
247
284
  self.log3('Media',id,"Importing Media #{id}...")
248
- self.import('Media', "((MediaObjectID=#{id}+),(MediaObjectID=#{id}-))")
285
+ self.import('Media', "MediaObjectID eq '#{id}'")
249
286
  end
250
287
 
251
288
  #=============================================================================
@@ -253,58 +290,102 @@ class CabooseRets::RetsImporter # < ActiveRecord::Base
253
290
  #=============================================================================
254
291
 
255
292
  def self.download_property_images(p)
256
- return if Rails.env.development?
293
+ # return if Rails.env.development?
257
294
  self.log3('Property',p.mls_number,"Downloading images for #{p.mls_number}...")
258
295
  ids_to_keep = []
259
296
  begin
260
- self.client.get_object(:resource => 'Property', :type => 'Photo', :location => false, :id => "#{p.matrix_unique_id}:*") do |headers, content|
261
- next if headers.blank?
262
- ind = headers['orderhint'] ? headers['orderhint'].to_i : 1
263
- self.log3('Media',p.mls_number,headers.to_s)
264
- self.log3('Media',p.mls_number,"Downloading photo with content-id #{headers['content-id']}, index #{ind}")
297
+
298
+ query = "ResourceRecordKey eq '#{p.matrix_unique_id}'"
299
+ photos = self.resource('Media',query,100)
300
+
301
+ photos.each do |photo|
302
+ ind = photo['Order']
303
+ self.log3('Media',p.mls_number,"Downloading photo with order #{ind}")
265
304
  is_new = false
266
- m = CabooseRets::Media.where(:media_mui => headers['content-id'], :media_order => ind).first
305
+ m = CabooseRets::Media.where(:media_mui => photo['ResourceRecordKey'], :media_order => ind).first
267
306
  is_new = true if m.nil?
268
307
  m = CabooseRets::Media.new if m.nil?
269
- tmp_path = "#{Rails.root}/tmp/rets_media_#{headers['content-id']}_#{ind}.jpeg"
270
- File.open(tmp_path, "wb") do |f|
271
- f.write(content)
272
- end
273
- m.media_mui = headers['content-id']
308
+
309
+ url = photo['MediaURL']
310
+ m.media_mui = photo['ResourceRecordKey']
274
311
  m.media_order = ind
275
312
  m.media_type = 'Photo'
276
- cm = nil
313
+ m.media_remarks = photo['ShortDescription']
314
+
277
315
  old_cm_id = is_new ? nil : m.media_id
278
- begin
279
- cm = Caboose::Media.new
280
- cm.image = File.open(tmp_path)
281
- cm.name = "rets_media_#{headers['content-id']}_#{ind}"
282
- cm.original_name = "rets_media_#{headers['content-id']}_#{ind}.jpeg"
283
- cm.processed = true
284
- cm.save
285
- if cm && !cm.id.blank?
286
- m.media_id = cm.id
287
- m.save
288
- ids_to_keep << m.id
289
- if is_new
290
- self.log3("Media",p.mls_number,"Created new RetsMedia object #{m.id}, media_id = #{m.media_id}")
291
- else
292
- old_media = Caboose::Media.where(:id => old_cm_id).first
293
- if old_media
294
- self.log3("Media",p.mls_number,"Deleting old CabooseMedia #{old_media.id}")
295
- old_media.destroy
296
- end
297
- self.log3("Media",p.mls_number,"RetsMedia object already existed #{m.id}, updated media_id = #{m.media_id}")
298
- end
299
- self.log3("Media",p.mls_number,"Image rets_media_#{headers['content-id']}_#{ind} saved")
300
- else
301
- self.log3("Media",p.mls_number,"CabooseMedia was not created for some reason, not saving RetsMedia")
302
- end
303
- rescue
304
- self.log3("Media",p.mls_number,"Error processing image #{ind} from RETS")
316
+
317
+ cm = is_new ? Caboose::Media.new : Caboose::Media.where(:id => old_cm_id).first
318
+
319
+ cm.name = "rets_media_#{photo['ResourceRecordKey']}_#{ind}"
320
+ cm.save
321
+
322
+ m.media_id = cm.id
323
+ m.save
324
+ ids_to_keep << m.id
325
+
326
+ if !is_new
327
+ old_media = Caboose::Media.where(:id => old_cm_id).first
328
+ self.log3("Media",p.mls_number,"Deleting old CabooseMedia #{old_media.id}")
329
+ old_media.destroy if Rails.env.production?
330
+ end
331
+
332
+ if Rails.env.production?
333
+ cm.download_image_from_url(url)
334
+ else
335
+ puts "would download photo from URL #{url}"
305
336
  end
306
- `rm #{tmp_path}`
337
+
307
338
  end
339
+
340
+ # self.client.get_object(:resource => 'Property', :type => 'Photo', :location => false, :id => "#{p.matrix_unique_id}:*") do |headers, content|
341
+ # next if headers.blank?
342
+ # ind = headers['orderhint'] ? headers['orderhint'].to_i : 1
343
+ # self.log3('Media',p.mls_number,headers.to_s)
344
+ # self.log3('Media',p.mls_number,"Downloading photo with content-id #{headers['content-id']}, index #{ind}")
345
+ # is_new = false
346
+ # m = CabooseRets::Media.where(:media_mui => headers['content-id'], :media_order => ind).first
347
+ # is_new = true if m.nil?
348
+ # m = CabooseRets::Media.new if m.nil?
349
+ # tmp_path = "#{Rails.root}/tmp/rets_media_#{headers['content-id']}_#{ind}.jpeg"
350
+ # File.open(tmp_path, "wb") do |f|
351
+ # f.write(content)
352
+ # end
353
+ # m.media_mui = headers['content-id']
354
+ # m.media_order = ind
355
+ # m.media_type = 'Photo'
356
+ # cm = nil
357
+ # old_cm_id = is_new ? nil : m.media_id
358
+ # begin
359
+ # cm = Caboose::Media.new
360
+ # cm.image = File.open(tmp_path)
361
+ # cm.name = "rets_media_#{headers['content-id']}_#{ind}"
362
+ # cm.original_name = "rets_media_#{headers['content-id']}_#{ind}.jpeg"
363
+ # cm.processed = true
364
+ # cm.save
365
+ # if cm && !cm.id.blank?
366
+ # m.media_id = cm.id
367
+ # m.save
368
+ # ids_to_keep << m.id
369
+ # if is_new
370
+ # self.log3("Media",p.mls_number,"Created new RetsMedia object #{m.id}, media_id = #{m.media_id}")
371
+ # else
372
+ # old_media = Caboose::Media.where(:id => old_cm_id).first
373
+ # if old_media
374
+ # self.log3("Media",p.mls_number,"Deleting old CabooseMedia #{old_media.id}")
375
+ # old_media.destroy
376
+ # end
377
+ # self.log3("Media",p.mls_number,"RetsMedia object already existed #{m.id}, updated media_id = #{m.media_id}")
378
+ # end
379
+ # self.log3("Media",p.mls_number,"Image rets_media_#{headers['content-id']}_#{ind} saved")
380
+ # else
381
+ # self.log3("Media",p.mls_number,"CabooseMedia was not created for some reason, not saving RetsMedia")
382
+ # end
383
+ # rescue
384
+ # self.log3("Media",p.mls_number,"Error processing image #{ind} from RETS")
385
+ # end
386
+ # `rm #{tmp_path}`
387
+ # end
388
+
308
389
  rescue
309
390
  self.log3("Media",p.mls_number,"Error downloading images for property with MLS # #{p.mls_number}")
310
391
  end
@@ -316,7 +397,7 @@ class CabooseRets::RetsImporter # < ActiveRecord::Base
316
397
  CabooseRets::Media.where(:media_mui => p.matrix_unique_id).where("id not in (?)",ids_to_keep).each do |med|
317
398
  self.log3("Media",p.mls_number,"Deleting old RetsMedia #{med.id} and CabooseMedia #{med.media_id}...")
318
399
  m = Caboose::Media.where(:id => med.media_id).where("name ILIKE ?","rets_media%").first
319
- m.destroy if m
400
+ m.destroy if m && Rails.env.production?
320
401
  med.destroy
321
402
  end
322
403
  end
@@ -393,7 +474,7 @@ class CabooseRets::RetsImporter # < ActiveRecord::Base
393
474
 
394
475
  def self.purge_properties() self.delay(:priority => 10, :queue => 'rets').purge_helper('Property', '2012-01-01') end
395
476
  def self.purge_offices() self.delay(:priority => 10, :queue => 'rets').purge_helper('Office', '2012-01-01') end
396
- def self.purge_agents() self.delay(:priority => 10, :queue => 'rets').purge_helper('Member', '2012-01-01') end
477
+ def self.purge_agents() self.delay(:priority => 10, :queue => 'rets').purge_helper('Member', '2012-01-01T') end
397
478
  def self.purge_open_houses() self.delay(:priority => 10, :queue => 'rets').purge_helper('OpenHouse', '2012-01-01') end
398
479
 
399
480
 
@@ -410,32 +491,31 @@ class CabooseRets::RetsImporter # < ActiveRecord::Base
410
491
  statusquery = ""
411
492
 
412
493
  case class_type
413
- when 'Property' then statusquery = "MlsStatus=Active"
414
- when 'Office' then statusquery = "OfficeStatus=Active"
415
- when 'Member' then statusquery = "MemberStatus=Active"
416
- when 'OpenHouse' then statusquery = "OpenHouseKeyNumeric=0+"
494
+ when 'Property' then statusquery = "MlsStatus eq 'Active'"
495
+ when 'Office' then statusquery = "OfficeStatus eq 'Active'"
496
+ when 'Member' then statusquery = "MemberStatus eq 'Active'"
497
+ when 'OpenHouse' then statusquery = "OpenHouseKeyNumeric gt 0"
417
498
  end
418
499
 
419
- params = {
420
- :search_type => m.search_type,
421
- :class => class_type,
422
- :query => "(#{m.date_modified_field}=#{date_modified}T00:00:01+)AND(#{statusquery})AND(OriginatingSystemName=WESTAL)",
423
- :standard_names_only => true,
424
- :limit => 1000,
425
- :timeout => -1
426
- }
500
+ query = "#{m.date_modified_field} gt #{date_modified}T00:00:01Z and #{statusquery} and OriginatingSystemName eq 'WESTAL'"
501
+
427
502
  count = 0
428
- self.client.search(params.merge({ :count => 1})) do |data| end
429
- count = self.client.rets_data[:code] == "20201" ? 0 : self.client.rets_data[:count]
503
+ result = self.resource(class_type, query, 1, true, nil)
504
+
505
+ count = result ? result.to_f : 0.0
506
+
430
507
  batch_count = (count.to_f/1000.0).ceil
431
508
 
432
509
  ids = []
433
510
  k = m.remote_key_field
434
511
  (0...batch_count).each do |i|
435
512
  self.log3(class_type,nil,"Getting ids for #{class_type} (batch #{i+1} of #{batch_count})...")
436
- self.client.search(params.merge({ :select => [k], :limit => 1000, :offset => 1000*i })) do |data|
513
+
514
+ results = self.resource(class_type, query, 1000, false, k, (i+1))
515
+ results.each do |data|
437
516
  ids << data[k]
438
517
  end
518
+
439
519
  end
440
520
 
441
521
  # Only do stuff if we got a real response from the server