class Kamome::Downloader
Public Class Methods
new(config)
click to toggle source
# File lib/kamome/downloader.rb, line 11 def initialize(config) @config = config end
Public Instance Methods
run(url:)
click to toggle source
@return [Pathname] CSV file path
# File lib/kamome/downloader.rb, line 16 def run(url:) zip_path = download(url) csv_path = unpack(zip_path) zip_path.delete csv_path rescue StandardError => e raise Kamome::DownloadError, "#{url}, #{e.class}: #{e.message}" end
Private Instance Methods
convert_encoding(content)
click to toggle source
convert encoding Shift_JIS to UTF-8 (and half width Katakana to full width Katakana)
# File lib/kamome/downloader.rb, line 59 def convert_encoding(content) ::NKF.nkf('-w -Lu', content) end
download(url)
click to toggle source
@return [Pathname] downloaded file
# File lib/kamome/downloader.rb, line 28 def download(url) dest = @config.working_directory.join(download_filename) ::FileUtils.mkdir_p(dest.dirname) ::OpenURI.open_uri(url, @config.open_uri_options) do |response| ::File.binwrite(dest, response.read) end dest end
download_filename()
click to toggle source
# File lib/kamome/downloader.rb, line 38 def download_filename ::Time.now.strftime("%Y%m%d%H%M%S_#{SecureRandom.hex(3)}.zip") end
take_csv_entry(src)
click to toggle source
# File lib/kamome/downloader.rb, line 49 def take_csv_entry(src) entry = ::Zip::File.open(src) do |zipfile| zipfile.select { |o| o.name =~ /.*\.csv/i }.first end raise 'Not found csvfile in zipfile' if entry.nil? entry.get_input_stream.read end
unpack(src)
click to toggle source
# File lib/kamome/downloader.rb, line 42 def unpack(src) dest = src.sub('.zip', '.csv') content = convert_encoding(take_csv_entry(src)) ::File.binwrite(dest, content) dest end