caboose-rets 0.1.36 → 0.1.37
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/models/caboose_rets/agent.rb +29 -29
- data/app/models/caboose_rets/agent_meta.rb +1 -1
- data/app/models/caboose_rets/media.rb +1 -1
- data/app/models/caboose_rets/office.rb +32 -32
- data/app/models/caboose_rets/open_house.rb +10 -10
- data/app/models/caboose_rets/property.rb +143 -140
- data/app/models/caboose_rets/rets_importer.rb +103 -75
- data/app/models/caboose_rets/schema.rb +40 -38
- data/lib/caboose_rets/version.rb +1 -1
- data/lib/rets/base/core.rb +4 -0
- data/lib/rets/client.rb +1 -1
- data/lib/rets/http.rb +13 -3
- data/lib/tasks/caboose_rets.rake +26 -22
- metadata +2 -2
data/lib/caboose_rets/version.rb
CHANGED
data/lib/rets/base/core.rb
CHANGED
@@ -243,6 +243,7 @@ module RETS
|
|
243
243
|
# @see #request_size
|
244
244
|
# @see #request_hash
|
245
245
|
def search(args, &block)
|
246
|
+
# puts "starting search..."
|
246
247
|
if !block_given? and args[:count_mode] != :only
|
247
248
|
raise ArgumentError, "No block found"
|
248
249
|
end
|
@@ -264,8 +265,11 @@ module RETS
|
|
264
265
|
|
265
266
|
@request_size, @request_hash, @request_time, @rets_data = nil, nil, nil, {}
|
266
267
|
|
268
|
+
# puts "req: #{req.to_s}"
|
269
|
+
|
267
270
|
start = Time.now.utc.to_f
|
268
271
|
@http.request(req) do |response|
|
272
|
+
# puts "URL: #{req[:url]}"
|
269
273
|
if args[:disable_stream]
|
270
274
|
stream = StringIO.new(response.body)
|
271
275
|
@request_time = Time.now.utc.to_f - start
|
data/lib/rets/client.rb
CHANGED
data/lib/rets/http.rb
CHANGED
@@ -8,7 +8,7 @@ module RETS
|
|
8
8
|
##
|
9
9
|
# Creates a new HTTP instance which will automatically handle authenting to the RETS server.
|
10
10
|
def initialize(args)
|
11
|
-
@headers = {"User-Agent" => "Ruby RETS/v#{RETS::VERSION}", "Accept-Encoding" => "none"}
|
11
|
+
@headers = {"User-Agent" => "Ruby RETS/v#{RETS::VERSION}", "Accept-Encoding" => "none", "RETS-Version" => "1.8.0"}
|
12
12
|
@request_count = 0
|
13
13
|
@config = {:http => {}}.merge(args)
|
14
14
|
@rets_data, @cookie_list = {}, {}
|
@@ -135,7 +135,7 @@ module RETS
|
|
135
135
|
text = attr.last.value
|
136
136
|
end
|
137
137
|
end
|
138
|
-
|
138
|
+
# puts "replycode: #{code}"
|
139
139
|
return code, text
|
140
140
|
end
|
141
141
|
|
@@ -179,6 +179,8 @@ module RETS
|
|
179
179
|
request_uri = args[:url].request_uri
|
180
180
|
end
|
181
181
|
|
182
|
+
request_uri = request_uri[0..-2] if request_uri[-1] == '&'
|
183
|
+
|
182
184
|
headers = args[:headers]
|
183
185
|
|
184
186
|
# Digest will change every time due to how its setup
|
@@ -204,6 +206,9 @@ module RETS
|
|
204
206
|
http.ca_path = @config[:http][:ca_path] if @config[:http][:ca_path]
|
205
207
|
end
|
206
208
|
|
209
|
+
puts "request_uri: #{request_uri}"
|
210
|
+
# puts "headers: #{headers.to_s}"
|
211
|
+
|
207
212
|
http.start do
|
208
213
|
http.request_get(request_uri, headers) do |response|
|
209
214
|
# Pass along the cookies
|
@@ -234,6 +239,10 @@ module RETS
|
|
234
239
|
end
|
235
240
|
end
|
236
241
|
|
242
|
+
# puts "response.code: #{response.code}"
|
243
|
+
# puts "response.body: #{response.body}"
|
244
|
+
# puts "response.message: #{response.message}"
|
245
|
+
|
237
246
|
# Rather than returning HTTP 401 when User-Agent authentication is needed, Retsiq returns HTTP 200
|
238
247
|
# with RETS error 20037. If we get a 20037, will let it pass through and handle it as if it was a HTTP 401.
|
239
248
|
# Retsiq apparently returns a 20041 now instead of a 20037 for the same use case.
|
@@ -241,12 +250,13 @@ module RETS
|
|
241
250
|
rets_code = nil
|
242
251
|
if response.code != "401" and ( response.code != "200" or args[:check_response] )
|
243
252
|
if response.body =~ /<RETS/i
|
253
|
+
# puts "found RETS in response body"
|
244
254
|
rets_code, text = self.get_rets_response(Nokogiri::XML(response.body).xpath("//RETS").first)
|
245
255
|
unless rets_code == "20037" or rets_code == "20041" or rets_code == "20052" or rets_code == "0"
|
246
256
|
raise RETS::APIError.new("#{rets_code}: #{text}", rets_code, text)
|
247
257
|
end
|
248
|
-
|
249
258
|
elsif !args[:check_response]
|
259
|
+
# puts "didn't find RETS in response body and check_response is false"
|
250
260
|
raise RETS::HTTPError.new("#{response.code}: #{response.message}", response.code, response.message)
|
251
261
|
end
|
252
262
|
end
|
data/lib/tasks/caboose_rets.rake
CHANGED
@@ -13,26 +13,29 @@ namespace :caboose_rets do
|
|
13
13
|
desc "Do a simple search"
|
14
14
|
task :simple_search => :environment do
|
15
15
|
type = ['p','a','o','oh']
|
16
|
-
|
16
|
+
@@config = nil
|
17
|
+
config = YAML::load(File.open("#{Rails.root}/config/rets_importer.yml"))
|
18
|
+
config = config[Rails.env]
|
19
|
+
config.each { |key,val| @@config[key] = val }
|
17
20
|
client = RETS::Client.login(
|
18
|
-
:url =>
|
19
|
-
:username =>
|
20
|
-
:password =>
|
21
|
+
:url => config['url'],
|
22
|
+
:username => config['username'],
|
23
|
+
:password => config['password']
|
21
24
|
)
|
22
25
|
type.each do |t|
|
23
26
|
if t == 'p'
|
24
27
|
params = {
|
25
28
|
:search_type => 'Property',
|
26
|
-
:class => '
|
27
|
-
:query => "(
|
28
|
-
:limit =>
|
29
|
+
:class => 'Property',
|
30
|
+
:query => "(MlsStatus=Active)",
|
31
|
+
:limit => 1,
|
29
32
|
:timeout => -1
|
30
33
|
}
|
31
34
|
elsif t == 'a'
|
32
35
|
params = {
|
33
|
-
:search_type => '
|
34
|
-
:class => '
|
35
|
-
:query => "(
|
36
|
+
:search_type => 'Member',
|
37
|
+
:class => 'Member',
|
38
|
+
:query => "(MemberStatus=Active)",
|
36
39
|
:limit => 1,
|
37
40
|
:timeout => -1
|
38
41
|
}
|
@@ -40,7 +43,7 @@ namespace :caboose_rets do
|
|
40
43
|
params = {
|
41
44
|
:search_type => 'Office',
|
42
45
|
:class => 'Office',
|
43
|
-
:query => "(
|
46
|
+
:query => "(OfficeStatus=Active)",
|
44
47
|
:limit => 1,
|
45
48
|
:timeout => -1
|
46
49
|
}
|
@@ -48,7 +51,7 @@ namespace :caboose_rets do
|
|
48
51
|
params = {
|
49
52
|
:search_type => 'OpenHouse',
|
50
53
|
:class => 'OpenHouse',
|
51
|
-
:query => "(
|
54
|
+
:query => "(OpenHouseKeyNumeric=0+)",
|
52
55
|
:limit => 1,
|
53
56
|
:timeout => -1
|
54
57
|
}
|
@@ -69,36 +72,37 @@ namespace :caboose_rets do
|
|
69
72
|
task :reimport_property_images => :environment do
|
70
73
|
props = CabooseRets::Property.all
|
71
74
|
props.each do |p|
|
72
|
-
CabooseRets::RetsImporter.log("- Reimporting images for #{p.
|
73
|
-
CabooseRets::Media.where(:media_mui => p.
|
75
|
+
CabooseRets::RetsImporter.log("- Reimporting images for #{p.mls_number}...")
|
76
|
+
CabooseRets::Media.where(:media_mui => p.mls_number, :media_type => 'Photo').destroy_all
|
74
77
|
CabooseRets::RetsImporter.download_property_images(p)
|
75
78
|
end
|
76
79
|
end
|
77
80
|
|
78
81
|
desc "Import rets data"
|
79
82
|
task :import => :environment do
|
80
|
-
CabooseRets::RetsImporter.import('
|
81
|
-
CabooseRets::RetsImporter.import('
|
82
|
-
CabooseRets::RetsImporter.import('Office'
|
83
|
-
CabooseRets::RetsImporter.import('OpenHouse', "(
|
83
|
+
CabooseRets::RetsImporter.import('Member' , "(MemberStatus=Active)")
|
84
|
+
CabooseRets::RetsImporter.import('Property' , "(MlsStatus=Active)")
|
85
|
+
CabooseRets::RetsImporter.import('Office' , "(OfficeStatus=Active)")
|
86
|
+
CabooseRets::RetsImporter.import('OpenHouse' , "(OpenHouseKeyNumeric=0+)")
|
84
87
|
end
|
85
88
|
|
86
89
|
desc "Single Import Test"
|
87
90
|
task :import_one => :environment do
|
88
|
-
CabooseRets::RetsImporter.import_properties('
|
91
|
+
#CabooseRets::RetsImporter.import_properties('130185',false)
|
92
|
+
CabooseRets::RetsImporter.import_agent('118596368',false)
|
89
93
|
end
|
90
94
|
|
91
95
|
desc "Purge rets data"
|
92
96
|
task :purge => :environment do
|
93
|
-
CabooseRets::RetsImporter.purge_helper('
|
97
|
+
CabooseRets::RetsImporter.purge_helper('Property', '2013-08-06')
|
94
98
|
CabooseRets::RetsImporter.purge_helper('Office', '2012-01-01')
|
95
|
-
CabooseRets::RetsImporter.purge_helper('
|
99
|
+
CabooseRets::RetsImporter.purge_helper('Member', '2012-01-01')
|
96
100
|
CabooseRets::RetsImporter.purge_helper('OpenHouse', '2012-01-01')
|
97
101
|
end
|
98
102
|
|
99
103
|
desc "update helper"
|
100
104
|
task :uh => :environment do
|
101
|
-
CabooseRets::RetsImporter.update_helper('
|
105
|
+
CabooseRets::RetsImporter.update_helper('Property', last_updated)
|
102
106
|
end
|
103
107
|
|
104
108
|
#desc "Delete old rets properties"
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: caboose-rets
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.37
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- William Barry
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-
|
11
|
+
date: 2018-10-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: caboose-cms
|