class Utils USERNAME_SITES = %W{youtube facebook soundcloud bandcamp fandalism twitter reverbnation} SITE_TYPES = ['url'].concat(USERNAME_SITES) def self.username_url(username, site) case site when 'youtube' "https://www.youtube.com/c/#{username}" when 'facebook' "https://www.facebook.com/#{username}" when 'soundcloud' "https://soundcloud.com/#{username}" when 'bandcamp' "http://#{username}.bandcamp.com" when 'bandcamp-fan' "http://bandcamp.com/#{username}" when 'fandalism' "http://fandalism.com/#{username}" when 'twitter' "https://twitter.com/#{username}" when 'reverbnation' "http://www.reverbnation.com/#{username}" else nil end end def self.site_validator(url, site=nil) uagent = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2227.1 Safari/537.36" curl_args = "-A '#{uagent}' --silent --head --fail --show-error " case site when 'bandcamp' cmd = "curl #{curl_args} '#{url}' 2>&1" result = `#{cmd}`.chomp if $?.success? if /^HTTP\/\d+\.\d+ 2\d\d OK/ =~ result.lines[0] return nil else if /http:\/\/(.*)\.bandcamp.com/ =~ url return self.site_validator(self.username_url($1, 'bandcamp-fan'), 'bandcamp-fan') end return "Unrecognized url (#{url})" end else result =~ /curl: \(\d+\) (.*)/ return "#{$1} (#{url})" end else curl_args << "-L --output /dev/null " cmd = "curl #{curl_args} '#{url}' 2>&1" result = `#{cmd}`.chomp end if $?.success? return nil else result =~ /curl: \(\d+\) (.*)/ return "#{$1} (#{url})" end end end