def update_xml
require 'rubygems'
require 'rchardet'
@shop = Shop.find(params[:id])
url = "http://#{@shop.domain}#{@shop.xml_url}"
tmp_file = "#{RAILS_ROOT}/tmp/#{@shop.id.to_s}_ceneo.xml"
File.open(tmp_file,'w') do |f|
data = ""
data_sample = ""
open(url) {|u|
u.each_line {|line|
data << line
if data.size < 5000
data_sample << line
end
}
}
cd = CharDet.detect(data_sample)
enc = cd['encoding']
translate = Iconv.new("UTF-8//IGNORE", enc)
data_translated = translate.iconv(data)
f.write(data_translated)
end
File.open(tmp_file, 'r') do |f|
@shop.ceneo_xml = f
@shop.save!
end
end
Jedyny problem na jaki napotkalem to bardzo dlugie dzialanie metody CharDet.detect
, zapewne przez to ze testowalem zbyt duzy plik xml (~40MB), dlatego tez ta “sztuczka” z data_sample
Uznalem, ze skoro poczatek pliku ma kodowanie “X” to reszta pliku bedzie miala takowe rowniez.
Jakies propozycje na refaktoryzacje kodu podanego powyzej ?