class NwmlsClient::Image
Constants
- IMAGE_SCHEMA
Public Class Methods
new(config, image_destination = nil)
click to toggle source
# File lib/nwmls_client/image.rb, line 10 def initialize(config, image_destination = nil) @listing_number = nil @image_destination = image_destination raise "Configuration data is required for authentication" if config.nil? @user_id = config.fetch("user_id") @password = config.fetch("password") end
Public Instance Methods
retrieve_images(listing_number)
click to toggle source
# File lib/nwmls_client/image.rb, line 18 def retrieve_images(listing_number) @listing_number = listing_number request = { 'query' => build_request()} @client = create_client() response = @client.call(:retrieve_images, message: request) cdata = response.body[:retrieve_images_response][:retrieve_images_result] nori_options = { :convert_tags_to => lambda { |tag| tag.snakecase.to_sym } } result = Nori.new(nori_options).parse(cdata) images_data = result[:results][:images] raise "No images found:\n#{result}" if images_data.nil? if @image_destination.nil? image_folder = File.join(Dir.pwd, "images") if not Dir.exist?(image_folder) Dir.mkdir(image_folder) end dirpath = File.join(Dir.pwd, "images/#{@listing_number}") if not Dir.exist?(dirpath) Dir.mkdir(dirpath) end else dirpath = File.join(@image_destination, "/#{@listing_number}") if not Dir.exist?(dirpath) Dir.mkdir(dirpath) end end image_data = images_data[:image] if image_data.is_a?(Array) image_data.each do |image| filename = File.join(dirpath, "#{@listing_number}_#{image[:image_order]}.jpg") File.open(filename, 'wb') do |f| f.write(Base64.decode64(image[:blob])) end end else image = image_data begin filename = File.join(dirpath, "#{@listing_number}_#{image[:image_order]}.jpg") File.open(filename, 'wb') do |f| f.write(Base64.decode64(image[:blob])) end rescue Exception => e puts "Image retrieval error: #{e.message}" end end end
Private Instance Methods
build_request()
click to toggle source
# File lib/nwmls_client/image.rb, line 91 def build_request() xm = Builder::XmlMarkup.new # Generate query to obtain actual images of specified property xm.instruct! :xml, :version=>"1.0" xm.ImageQuery(:xmlns => "NWMLS:EverNet:ImageQuery:1.0") { xm.Auth { xm.UserId @user_id xm.Password @password } xm.Query { xm.ByListingNumber @listing_number } xm.Results { xm.Schema IMAGE_SCHEMA } } end
create_client()
click to toggle source
# File lib/nwmls_client/image.rb, line 79 def create_client() @client = Savon.client( wsdl: "http://images.idx.nwmls.com/imageservice/imagequery.asmx?wsdl" #log_level: :debug, # can be: :debug, warn, :error, :fatal, :info #log: true, #open_timeout: 10, #read_timeout: 60 ) end