soundcloud-ruby-api-wrapper 0.1.6 → 0.1.8

Sign up to get free protection for your applications and to get access to all the features.
data/README.html CHANGED
@@ -29,7 +29,7 @@ Look at <a href="http://wiki.github.com/soundcloud/api/oauth-example">http://wik
29
29
 
30
30
  <h3>First steps</h3>
31
31
 
32
- Let's start with a simple app, which will find and display the hottest tracks. You don't need any OAuth authentication to do this.
32
+ Let's start with a simple app. It will find and display the 10 hottest tracks of alltime. You don't need any OAuth authentication to do this.
33
33
 
34
34
  <pre>
35
35
  require 'rubygems'
@@ -42,7 +42,7 @@ require 'soundcloud'
42
42
  sc_client = Soundcloud.register
43
43
 
44
44
  # Find the 10 hottest tracks
45
- hot_tracks = sc_client.Track.find(:all,:params => {:order => 'order', :limit => 10})
45
+ hot_tracks = sc_client.Track.find(:all,:params => {:order => 'hotness', :limit => 10})
46
46
 
47
47
  # and display their titles
48
48
  p '==the 10 hottest tracks=='
@@ -69,7 +69,7 @@ sc_consumer = Soundcloud.consumer('YOUR_APPLICATION_CONSUMER_TOKEN','YOUR_APPLIC
69
69
  access_token = OAuth::AccessToken.new(sc_consumer, 'YOUR_OAUTH_ACCESS_TOKEN', 'YOUR_OAUTH_ACCESS_SECRET')
70
70
 
71
71
  # Create an authenticated Soundcloud client, based on the access token
72
- sc_client = Soundcloud.register({ :access_token => access_token})
72
+ sc_client = Soundcloud.register({:access_token => access_token})
73
73
 
74
74
  # Get the logged in user
75
75
  my_user = sc_client.User.find_me
@@ -79,25 +79,25 @@ p "Hello, my name is #{my_user.full_name}"
79
79
 
80
80
  </pre>
81
81
 
82
- Find more examples in the "Model ..." pages.
82
+ Find more examples in these pages: [[Model Events]], [[Model Users]], [[Model Tracks]], [[Model Playlists]], [[Model Comments]].
83
83
 
84
84
 
85
85
  <h2>Sub-resources</h2>
86
86
 
87
87
  The Soundcloud API provides 3 different types of sub-resources:
88
- <h3>Nested</h3>
88
+ <h3>Nested sub-resources</h3>
89
89
 
90
- These are directly embedded in the response. For example a playlist has a track array.
90
+ These are directly embedded in the resource. For example a playlist has a track array.
91
91
 
92
92
  <pre>playlist.tracks</pre>
93
93
 
94
94
  When saving the original resource, the nested array will be saved as well.
95
95
 
96
- <pre>playlist.tracks.push some_track
96
+ <pre>playlist.tracks &lt;&lt; some_track
97
97
  playlist.save
98
98
  </pre>
99
99
 
100
- <h3>Separate</h3>
100
+ <h3>Separate sub-resources</h3>
101
101
 
102
102
  These are separated from the original resource.
103
103
  Example:
@@ -111,7 +111,7 @@ In ruby they are accessed like nested resources:
111
111
 
112
112
  But have to be saved explicitly:
113
113
  <pre>
114
- playlist.permissions.push some_user
114
+ playlist.permissions &lt;&lt; some_user
115
115
  playlist.permissions.save
116
116
  playlist.save</pre>
117
117
 
@@ -130,7 +130,7 @@ end while some_fans.count >= limit
130
130
  The array fans now contains all fans/followers of famous_dj.
131
131
 
132
132
 
133
- <h3>'Single changeable' separate</h3>
133
+ <h3>'Single changeable' separate sub-resources</h3>
134
134
 
135
135
  Some separate collections can't be saved in a bulk request. Instead each item has to be added or removed explicitly.
136
136
  For now this only affects the contacts (followees) and favorites of a user.
data/VERSION.yml CHANGED
@@ -1,4 +1,4 @@
1
1
  ---
2
2
  :major: 0
3
3
  :minor: 1
4
- :patch: 6
4
+ :patch: 8
@@ -1,9 +1,20 @@
1
1
  module Soundcloud
2
- module Models
3
- # Soundcloud Comment resource
2
+ module Models
3
+ #
4
+ # SC API Attributes (as of 26/05/09):
5
+ # * body
6
+ # * timestamp
7
+ # * id
8
+ # * track_id
9
+ # * user_id
10
+ # * uri
11
+ #
12
+ # Custom Wrapper Attributes/Methods:
13
+ # * user
14
+ # * track
4
15
  #
5
16
  # Look up the resource attributes and filtering usage here:
6
- #
17
+ #
7
18
  # http://wiki.github.com/soundcloud/api/documentation#comment
8
19
  #
9
20
  # Examples:
@@ -13,7 +24,7 @@ module Soundcloud
13
24
  # sc_client.Comment.create({:track => some_track, :body => 'Nice Track!'})
14
25
  #
15
26
  # # optionally you can add a timestamp (in milliseconds)
16
- # sc_client.Comment.create({:track => some_track, :body => 'nice drums!', :timestamp => 5000})
27
+ # sc_client.Comment.create({:track => some_track, :body => 'nice drums @ the 5th second!', :timestamp => 5000})
17
28
  #
18
29
  # # display all comments of some track
19
30
  # some_track.comments.each do |comment|
@@ -1,19 +1,31 @@
1
1
  module Soundcloud
2
2
  module Models
3
- # Look up the resource attributes and filtering usage here:
4
3
  #
4
+ # SC API Attributes (as of 26/05/09):
5
+ # * type
6
+ # * id
7
+ # * created_at
8
+ # * resource_id
9
+ # * comment/track/user (embedded resource, depending on type)
10
+ #
11
+ # Look up the resource attributes and filtering usage here:
12
+ #
5
13
  # http://wiki.github.com/soundcloud/api/documentation#event
6
14
  #
7
15
  # Examples:
8
16
  #
9
- # # find the last 50 (default soundcloud limit) dropbox events
10
- # sc_client.Event.find(:all,:params => {:filter => 'drop'})
17
+ # # find the last 50 (default soundcloud limit) dropbox events and display the titles of the dropped tracks
18
+ # dropbox_events = sc_client.Event.find(:all,:params => {:filter => 'drop'})
19
+ #
20
+ # dropbox_events.each do |event|
21
+ # p event.track.title
22
+ # end
11
23
  #
12
24
  # # find the last 50 (default soundcloud limit) events
13
25
  # sc_client.Event.find(:all)
14
26
  #
15
27
  class Event < Base
16
- belongs_to :user, :track
28
+ #belongs_to :user, :track, :comment # this is not right
17
29
  cattr_accessor :element_name
18
30
  self.element_name = 'event'
19
31
  end
@@ -2,8 +2,28 @@ module Soundcloud
2
2
  module Models
3
3
  # Note: At the moment, you can't create or delete playlists via Soundcloud API
4
4
  #
5
- # Look up the resource attributes and filtering usage here:
5
+ # SC API Attributes (as of 26/05/09):
6
+ # * created_at
7
+ # * description
8
+ # * genre
9
+ # * id
10
+ # * permalink
11
+ # * title
12
+ # * user_id
13
+ # * permalink_url
14
+ # * uri
15
+ # * artwork_url
16
+ # * duration
17
+ # * type
18
+ # * user (overwritten by wrapper)
19
+ # * tracks (array)
6
20
  #
21
+ # Custom Wrapper Attributes/Methods:
22
+ # * user
23
+ # * permissions
24
+ #
25
+ # Look up the resource attributes and filtering usage here:
26
+ #
7
27
  # http://wiki.github.com/soundcloud/api/documentation#playlist
8
28
  #
9
29
  # Examples:
@@ -1,7 +1,43 @@
1
1
  module Soundcloud
2
2
  module Models
3
3
  # Look up the resource attributes and filtering usage here:
4
- #
4
+ #
5
+ # SC API Attributes (as of 26/05/09):
6
+ # * id
7
+ # * user_id
8
+ # * permalink
9
+ # * description
10
+ # * sharing
11
+ # * bpm
12
+ # * comments_count
13
+ # * created_at
14
+ # * downloadable
15
+ # * downloads_count
16
+ # * duration
17
+ # * genre
18
+ # * streamable
19
+ # * uri
20
+ # * user (overwritten by wrapper)
21
+ # * permalink_url
22
+ # * playback_count
23
+ # * artwork_url
24
+ # * waveform_url
25
+ # * purchase_url
26
+ # * stream_url
27
+ # * user_playback_count
28
+ # * user_favorite
29
+ #
30
+ # Custom Wrapper Attributes/Methods:
31
+ # * user
32
+ # * permissions
33
+ # * comments
34
+ # * is_favorite?
35
+ # * add_favorite!
36
+ # * remove_favorite!
37
+ # * asset_data (= File.new('/your file..'))
38
+ #
39
+ # Look up the resource attributes and filtering usage here:
40
+ #
5
41
  # http://wiki.github.com/soundcloud/api/documentation#track
6
42
  #
7
43
  # Examples:
@@ -9,7 +45,7 @@ module Soundcloud
9
45
  # # gets 50 (Soundcloud API limit) tracks from some_user
10
46
  # some_user_tracks = some_user.tracks
11
47
  #
12
- # # gets the first song from some_user_tracks
48
+ # # gets the latest song from some_user_tracks
13
49
  # first_song = some_user_tracks.first
14
50
  #
15
51
  # # prints 50 (Soundcloud API limit) comments of first_song with username, timestamp (can be nil) and comment body
@@ -31,11 +67,12 @@ module Soundcloud
31
67
  # new_track = sc_client.Track.new
32
68
  # new_track.title = 'New Track'
33
69
  # new_track.sharing = 'private'
34
- # new_track.set_asset_data(File.new('some_sound_file.wav')
70
+ # new_track.asset_data = File.new('some_sound_file.wav')
35
71
  # new_track.save
36
72
  #
37
- # # downloads the original soundfile. some_sound_file.wav and another_sound_file.wav should be equal
38
- # File.open('another_sound_file.wav', 'w') {|f| f.write( new_track.download ) }
73
+ # # downloads the original soundfile.
74
+ # #some_sound_file.wav and downloaded_file should be the same (the open call requires the 'open-uri' gem)
75
+ # downloaded_file = open new_track.download_url
39
76
  #
40
77
  # # gives some_user permission to access the new_track
41
78
  # some_user = sc_client.User.find('some_user')
@@ -52,16 +89,22 @@ module Soundcloud
52
89
  can_be_a_single_changeable :favorite
53
90
 
54
91
  cattr_accessor :element_name
92
+ attr_accessor :asset_data
55
93
  self.element_name = 'track'
56
94
 
57
- def download
95
+ def download_url
58
96
  raise Exception.new('Track is not downloadable') if not downloadable
59
- begin
60
- response = connection.handle_response( self.class.oauth_connection.get(download_url) )
61
- rescue ActiveResource::Redirection => redirection
62
- response = Net::HTTP.get(URI.parse(redirection.response['Location']))
97
+ original_download_url = super
98
+ if sharing == "private"
99
+ begin
100
+ response = connection.handle_response( self.class.oauth_connection.get( original_download_url ) )
101
+ return original_download_url
102
+ rescue ActiveResource::Redirection => redirection
103
+ return redirection.response['Location']
104
+ end
105
+ else
106
+ return original_download_url
63
107
  end
64
- return response
65
108
  end
66
109
 
67
110
  # multipart stuff, to upload a soundfile
@@ -1,10 +1,46 @@
1
1
  module Soundcloud
2
2
  module Models
3
+ # SC API Attributes (as of 26/05/09):
4
+ # * id
5
+ # * username
6
+ # * full_name
7
+ # * description
8
+ # * city
9
+ # * country
10
+ # * discogs_name
11
+ # * myspace_name
12
+ # * website
13
+ # * website_title
14
+ # * online
15
+ # * avatar_url
16
+ # * permalink_url
17
+ # * uri
18
+ # * track_count
19
+ #
20
+ # Custom Wrapper Attributes/Methods:
21
+ # * tracks
22
+ # * contacts
23
+ # * comments
24
+ # * favorites
25
+ # * playlists
26
+ # * fans
27
+ # * is_contact?
28
+ # * add_contact!
29
+ # * remove_contact!
30
+ # * has_favorite?(track/track_id)
31
+ # * has_contact?(user/user_id)
32
+ #
3
33
  # Look up the resource attributes and filtering usage here:
4
34
  #
5
35
  # http://wiki.github.com/soundcloud/api/documentation#user
6
36
  #
37
+ # Custom Wrapper Class Methods
38
+ # * find_me
39
+ #
7
40
  # Examples:
41
+ # # gets the logged-in user
42
+ # me = client.User.find_me
43
+ #
8
44
  # # gets the user with username userABC
9
45
  # user = sc_client.User.find('userABC')
10
46
  #
@@ -14,8 +50,6 @@ module Soundcloud
14
50
  # p user.username
15
51
  # end
16
52
  #
17
- # # gets the logged-in user
18
- # me = client.User.find_me
19
53
  #
20
54
  # # checks if the first user named joe is following the second user named joe
21
55
  # joe1 = joes.first
@@ -11,4 +11,9 @@ describe 'Soundcloud::Models::Event' do
11
11
  it 'should get the last events' do
12
12
  events = @sc.Event.find(:all)
13
13
  end
14
+
15
+ it 'should get a fan event and should provide the user resource' do
16
+ fan_events = @sc.Event.find(:all,:params => {:type => 'Fan'})
17
+ fan_events.first.user.username.should_not be nil
18
+ end
14
19
  end
@@ -31,7 +31,8 @@ describe "Soundcloud::Models::Track" do
31
31
  track = @sc.Track.new
32
32
  track.title = 'API Test 1'
33
33
  track.sharing = 'private'
34
- track.set_asset_data(test_track_file)
34
+ # track.set_asset_data(test_track_file)
35
+ track.asset_data = test_track_file
35
36
  track.save
36
37
 
37
38
  track.destroy
@@ -63,16 +64,15 @@ describe "Soundcloud::Models::Track" do
63
64
  @test_track_1.is_favorite?.should be false
64
65
  end
65
66
 
66
- it 'should be able to download a track' do
67
- track = @sc.Track.find(:one, :from => '/users/api-test-2/tracks/track1-2')
68
- track.download
67
+ it 'should be able to download a private track' do
68
+ track = @sc.Track.find(:one, :from => '/users/api-test-2/tracks/track3-1')
69
+ track.download_url
69
70
  end
70
71
 
71
- it 'should be able to download a track (unauthenticated)' do
72
+ it 'should be able to download a public track (unauthenticated)' do
72
73
  usc = Soundcloud.register({:site => soundcloud_site})
73
74
  track = usc.Track.find(:one, :from => '/users/api-test-2/tracks/track1-2')
74
- # File.open('/tmp/sc-track', 'w') {|f| f.write( track.download ) }
75
- track.download
75
+ track.download_url
76
76
  end
77
77
 
78
78
  it 'should find tracks with a bpm <= 90' do
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: soundcloud-ruby-api-wrapper
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.6
4
+ version: 0.1.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Johannes Wagener
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-05-25 00:00:00 -07:00
12
+ date: 2009-05-27 00:00:00 -07:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency