2017-04-20 5 views
2

CRML 미디어 리소스에서 전체 (첫 번째 : 항목)를 가져 오려고합니다. Estately RETS repo를 사용합니다. 내 루비 예제 파일은 다음과 같습니다.CRML에서 이진 데이터 가져 오기

require 'rets' 

client = Rets::Client.new({ 
    login_url: 'url', 
    username: 'user', 
    password: 'password', 
    version: 'RETS/1.7.2' 
}) 

begin 
    client.login 
rescue => e 
    puts 'Error: ' + e.message 
    exit! 
end 

puts 'We connected! Lets get all the photos for a property...' 


photos = client.find (:first), { 
    search_type: 'Media', 
    class: 'Media', 
    query: '(MediaModificationTimestamp=2017-04-15+),(MediaType=Image)' 
} 


photo = open(photo = photos['MediaURL']) 
require 'base64' 
image = Base64.encode64(photo.read) 


File.open('property-1.gif', 'wb') do|f| 
    f.write(Base64.decode64(image)) 
end 

puts photos.length.to_s + ' photos saved.' 
client.logout 

그러나 예상 한 26 개 이미지 중 하나만 얻었습니다. 첫 번째 작업을 수행 한 후에 이것이 모든 목록의 모든 이미지를 검색하는 가장 좋은 방법인지 확실하지 않습니다. 다음은이 문제를 당신은 당신의 쿼리 부분에, 한 번에 여러 목록의 모든 이미지를 얻을 수 쉼표로 구분 된 목록 ID를 제공 시도 할 수 https://github.com/estately/rets/issues/210

답변

1
require 'rets' 

client = Rets::Client.new({ 
    login_url: 'url', 
    username: 'username', 
    password: 'password', 
    version: 'RETS/1.7.2' 
}) 

begin 
    client.login 
rescue => e 
    puts 'Error: ' + e.message 
    exit! 
end 

puts 'We connected! Lets get all the photos for a property...' 


photos = client.find (:all), { 
    search_type: 'Media', 
    class: 'Media', 
    query: '(ResourceRecordKeyNumeric=117562969),(MediaType=Image)' 
} 

photos.each_with_index do |data, index| 
    photo = open(photo = data['MediaURL']) 
    puts data['MediaURL'] 
    require 'base64' 
    image = Base64.encode64(photo.read) 
    File.open("property-#{index.to_s}.jpg", 'wb') do |f| 
    f.write(Base64.decode64(image)) 
    end 
end 


puts photos.length.to_s + ' photos saved.' 
client.logout 
0

에 대한 자세한 정보입니다.

photos = client.find (:all), { 
search_type: 'Media', 
    class: 'Media', 
    query: '(ResourceRecordKeyNumeric=117562969,117562970,117562971),(MediaType=Image)' 
}