Sha256: 6633123277aeb4fa997806f9a37611e91dd4a48486b376de6ec9488b5d1dc043

Contents?: true

Size: 1.64 KB

Versions: 6

Compression:

Stored size: 1.64 KB

Contents

require 'nokogiri'

module Kosmos
  class DownloadUrl < Struct.new(:url)
    def resolve_download_url
      if mediafire?
        extract_mediafire_url
      elsif box?
        extract_box_url
      elsif dropbox?
        extract_dropbox_url
      elsif curseforge?
        extract_curseforge_url
      else
        url
      end
    end

    def has_known_resolver?
      mediafire? || box? || dropbox? || curseforge?
    end

    def mediafire?
      url =~ /mediafire/
    end

    def box?
      url =~ /app\.box\.com/
    end

    def dropbox?
      url =~ /dropbox/
    end

    def curseforge?
      url =~ /curseforge/
    end

    private

    def extract_mediafire_url
      rendered_page.css('.download_link a').first['href']
    end

    def extract_dropbox_url
      rendered_page.css('#default_content_download_button').first['href']
    end

    def extract_curseforge_url
      rendered_html("#{url}/files/latest").strip
    end

    def extract_box_url
      raw_html = HTTParty.get(url)

      shared_name = url.split("/").last
      file_id = raw_html.scan(/itemTypedID: \"(f_\d+)\"/)[0][0]

      box_intermediate_url(shared_name, file_id)
    end

    def box_intermediate_url(shared_name, file_id)
      base = "https://app.box.com/index.php?rm=box_download_shared_file"
      shared_name_part = "&shared_name=#{shared_name}"
      file_id_part = "&file_id=#{file_id}"

      base + shared_name_part + file_id_part
    end

    def rendered_page(url = self.url)
      Nokogiri::HTML(rendered_html(url))
    end

    def rendered_html(url)
      Dir.chdir(File.dirname(__FILE__)) do
        `phantomjs page_fetcher.js #{url}`
      end
    end
  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
kosmos-0.0.4 lib/kosmos/download_url.rb
kosmos-0.0.3 lib/kosmos/download_url.rb
kosmos-0.0.2.pre.test4 lib/kosmos/download_url.rb
kosmos-0.0.2.pre.test3 lib/kosmos/download_url.rb
kosmos-0.0.2.pre.test2 lib/kosmos/download_url.rb
kosmos-0.0.2 lib/kosmos/download_url.rb