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