Class: Purdie::Services::SoundCloud

Inherits:
Object
  • Object
show all
Includes:
Purdie::Service
Defined in:
lib/purdie/services/soundcloud.rb

Class Method Summary collapse

Instance Method Summary collapse

Methods included from Purdie::Service

#configure, included, #initialize

Class Method Details

.matcherObject



49
50
51
# File 'lib/purdie/services/soundcloud.rb', line 49

def self.matcher
  'soundcloud.com'
end

.resolve(url) ⇒ Object



41
42
43
44
45
46
47
# File 'lib/purdie/services/soundcloud.rb', line 41

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

Instance Method Details

#clientObject



8
9
10
# File 'lib/purdie/services/soundcloud.rb', line 8

def client
  @client ||= ::SoundCloud.new client_id: ENV['SOUNDCLOUD_CLIENT_ID']
end

#distill(url) ⇒ Object



12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# 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']

  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

  results['date'] = "%4d-%02d-%02d" % [ track['release_year'], track['release_month'], track['release_day'] ]

  results.attach_license self, track['license']

  results
end