63 lines
1.8 KiB
Ruby
63 lines
1.8 KiB
Ruby
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
|