Class: Oddb2xml::SwissmedicDownloader

Inherits:
Downloader
  • Object
show all
Includes:
DownloadMethod
Defined in:
lib/oddb2xml/downloader.rb

Constant Summary collapse

BASE_URL =
"https://www.swissmedic.ch"

Instance Attribute Summary

Attributes inherited from Downloader

#agent, #file2save, #type, #url

Instance Method Summary collapse

Methods inherited from Downloader

#init, #report_download

Constructor Details

#initialize(type = :orphan, options = {}) ⇒ SwissmedicDownloader

Returns a new instance of SwissmedicDownloader.



305
306
307
308
309
310
311
312
313
314
315
316
# File 'lib/oddb2xml/downloader.rb', line 305

def initialize(type = :orphan, options = {})
  url = BASE_URL + "/swissmedic/de/home/services/listen_neu.html"
  doc = Nokogiri::HTML(Oddb2xml.uri_open(url))
  @type = type
  @options = options
  case @type
  when :orphan
    @direct_url_link = BASE_URL + doc.xpath("//a").find { |x| /Humanarzneimittel mit Status Orphan Drug/.match(x.children.text) }.attributes["href"].value
  when :package
    @direct_url_link = BASE_URL + doc.xpath("//a").find { |x| /Zugelassene Packungen/.match(x.children.text) }.attributes["href"].value
  end
end

Instance Method Details

#downloadObject



318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
# File 'lib/oddb2xml/downloader.rb', line 318

def download
  @file2save = File.join(Oddb2xml::WORK_DIR, "swissmedic_#{@type}.xlsx")
  report_download(@url, @file2save)
  if @options[:calc] && @options[:skip_download] && File.exist?(@file2save) && ((Time.now - File.ctime(@file2save)).to_i < 24 * 60 * 60)
    Oddb2xml.log "SwissmedicDownloader #{__LINE__}: Skip downloading #{@file2save} #{File.size(@file2save)} bytes"
    return File.expand_path(@file2save)
  end
  begin
    FileUtils.rm(File.expand_path(@file2save), verbose: !defined?(RSpec)) if File.exist?(File.expand_path(@file2save))
    @url = @direct_url_link
    download_as(@file2save, "w+")
    if @options[:artikelstamm]
      cmd = "ssconvert '#{@file2save}' '#{File.join(DOWNLOADS, File.basename(@file2save).sub(/\.xls.*/, ".csv"))}' 2> /dev/null"
      Oddb2xml.log(cmd)
      system(cmd)
    end
    return File.expand_path(@file2save)
  rescue Timeout::Error, Errno::ETIMEDOUT
    retrievable? ? retry : raise
  ensure
    Oddb2xml.download_finished(@file2save, false)
  end
  File.expand_path(@file2save)
end