class Purdie::Services::SoundCloud

Public Class Methods

matcher() click to toggle source
# File lib/purdie/services/soundcloud.rb, line 59
def self.matcher
  'soundcloud.com'
end
resolve(url) click to toggle source
# File lib/purdie/services/soundcloud.rb, line 51
def self.resolve url
  return [url] unless url =~ /\/sets\//

  client = ::SoundCloud.new client_id: ENV['SOUNDCLOUD_CLIENT_ID']
  client.get('/resolve', url: url).tracks.
    map { |track| track['permalink_url'] }
end

Public Instance Methods

client() click to toggle source
# File lib/purdie/services/soundcloud.rb, line 8
def client
  @client ||= ::SoundCloud.new client_id: ENV['SOUNDCLOUD_CLIENT_ID']
end
distill(url) click to toggle source
# File lib/purdie/services/soundcloud.rb, line 12
def distill url
  begin
    track = client.get '/resolve', url: url
  rescue ArgumentError => ae
    raise CredentialsException.new self, 'missing'
  rescue ::SoundCloud::ResponseError => re
    raise CredentialsException.new self, 'duff'
  end

  results = {}
  results['title'] = track['title']
  results['id'] = track['id']
  results['url'] = track['permalink_url']

  begin
    description = YAML.load track['description']

    if description.class == Hash
      description.keys.each do |k|
        results[k] = description[k]
      end
    else
      results['location'] = track['description']
    end
  rescue TypeError => te
    raise MetadataException.new self, "'#{url}' does not have a location" if te.message == "no implicit conversion of nil into String"
  end

  begin
    results['date'] = "%4d-%02d-%02d" % [ track['release_year'], track['release_month'], track['release_day'] ]
  rescue TypeError => te
    raise MetadataException.new self, "'#{url}' does not have a release date" if te.message == "can't convert nil into Integer"
  end

  results.attach_license self, track['license']

  results
end