echonest-ruby-api 0.7.0 → 0.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,59 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: http://developer.echonest.com/api/v4/genre/profile?api_key=BNOAEBT3IZYZI6WXI&format=json&name=folk%20rock
6
+ body:
7
+ encoding: US-ASCII
8
+ string: ''
9
+ headers:
10
+ Accept-Encoding:
11
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
12
+ Accept:
13
+ - '*/*'
14
+ User-Agent:
15
+ - Ruby
16
+ response:
17
+ status:
18
+ code: 200
19
+ message: OK
20
+ headers:
21
+ Date:
22
+ - Thu, 18 Dec 2014 02:52:19 GMT
23
+ Content-Type:
24
+ - application/json; charset=utf-8
25
+ Transfer-Encoding:
26
+ - chunked
27
+ Vary:
28
+ - Accept-Encoding
29
+ X-Request-Id:
30
+ - PBbxhmaBRS6OugGjjBOgAQ
31
+ X-Worker-Node:
32
+ - 0c0ba:19427
33
+ X-Ratelimit-Remaining:
34
+ - '18'
35
+ Server:
36
+ - TornadoServer/3.1
37
+ X-Ratelimit-Limit:
38
+ - '20'
39
+ X-Api-Key:
40
+ - BNOAEBT3IZYZI6WXI
41
+ Cache-Control:
42
+ - max-age=86400
43
+ Access-Control-Allow-Origin:
44
+ - '*'
45
+ X-Ratelimit-Used:
46
+ - '2'
47
+ Connection:
48
+ - Keep-alive
49
+ Keep-Alive:
50
+ - timeout=15, max=100
51
+ Via:
52
+ - 1.1 ID-0000627501223746 uproxy-3
53
+ body:
54
+ encoding: UTF-8
55
+ string: '{"response": {"status": {"version": "4.2", "code": 0, "message": "Success"},
56
+ "genres": [{"name": "folk rock"}]}}'
57
+ http_version:
58
+ recorded_at: Thu, 18 Dec 2014 02:52:19 GMT
59
+ recorded_with: VCR 2.9.3
@@ -0,0 +1,59 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: http://developer.echonest.com/api/v4/genre/search?api_key=BNOAEBT3IZYZI6WXI&format=json&name=folk%20rock
6
+ body:
7
+ encoding: US-ASCII
8
+ string: ''
9
+ headers:
10
+ Accept-Encoding:
11
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
12
+ Accept:
13
+ - '*/*'
14
+ User-Agent:
15
+ - Ruby
16
+ response:
17
+ status:
18
+ code: 200
19
+ message: OK
20
+ headers:
21
+ Date:
22
+ - Thu, 18 Dec 2014 02:58:41 GMT
23
+ Content-Type:
24
+ - application/json; charset=utf-8
25
+ Transfer-Encoding:
26
+ - chunked
27
+ Vary:
28
+ - Accept-Encoding
29
+ X-Request-Id:
30
+ - doVHTVmmRLWutqL39Ibnbg
31
+ X-Worker-Node:
32
+ - 962d4:23274
33
+ X-Ratelimit-Remaining:
34
+ - '17'
35
+ Server:
36
+ - TornadoServer/3.1
37
+ X-Ratelimit-Limit:
38
+ - '20'
39
+ X-Api-Key:
40
+ - BNOAEBT3IZYZI6WXI
41
+ Cache-Control:
42
+ - max-age=86400
43
+ Access-Control-Allow-Origin:
44
+ - '*'
45
+ X-Ratelimit-Used:
46
+ - '3'
47
+ Connection:
48
+ - Keep-alive
49
+ Keep-Alive:
50
+ - timeout=15, max=100
51
+ Via:
52
+ - 1.1 ID-0000627501223746 uproxy-2
53
+ body:
54
+ encoding: UTF-8
55
+ string: '{"response": {"status": {"version": "4.2", "code": 0, "message": "Success"},
56
+ "start": 0, "genres": [{"name": "folk rock"}], "total": 1}}'
57
+ http_version:
58
+ recorded_at: Thu, 18 Dec 2014 02:58:41 GMT
59
+ recorded_with: VCR 2.9.3
@@ -0,0 +1,70 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: http://developer.echonest.com/api/v4/genre/similar?api_key=BNOAEBT3IZYZI6WXI&format=json&name=folk%20rock
6
+ body:
7
+ encoding: US-ASCII
8
+ string: ''
9
+ headers:
10
+ Accept-Encoding:
11
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
12
+ Accept:
13
+ - '*/*'
14
+ User-Agent:
15
+ - Ruby
16
+ response:
17
+ status:
18
+ code: 200
19
+ message: OK
20
+ headers:
21
+ Date:
22
+ - Thu, 18 Dec 2014 02:58:41 GMT
23
+ Content-Type:
24
+ - application/json; charset=utf-8
25
+ Transfer-Encoding:
26
+ - chunked
27
+ Vary:
28
+ - Accept-Encoding
29
+ X-Request-Id:
30
+ - EqhJ+djOS3yrOsfpCYjnng
31
+ X-Worker-Node:
32
+ - 0c0ba:19426
33
+ X-Ratelimit-Remaining:
34
+ - '19'
35
+ Server:
36
+ - TornadoServer/3.1
37
+ X-Ratelimit-Limit:
38
+ - '20'
39
+ X-Api-Key:
40
+ - BNOAEBT3IZYZI6WXI
41
+ Cache-Control:
42
+ - max-age=86400
43
+ Access-Control-Allow-Origin:
44
+ - '*'
45
+ X-Ratelimit-Used:
46
+ - '1'
47
+ Connection:
48
+ - Keep-alive
49
+ Keep-Alive:
50
+ - timeout=15, max=100
51
+ Via:
52
+ - 1.1 ID-0000627501223746 uproxy-2
53
+ body:
54
+ encoding: UTF-8
55
+ string: '{"response": {"status": {"version": "4.2", "code": 0, "message": "Success"},
56
+ "start": 0, "genres": [{"name": "singer-songwriter", "similarity": 0.70833299999999999},
57
+ {"name": "mellow gold", "similarity": 0.60763900000000004}, {"name": "traditional
58
+ folk", "similarity": 0.5}, {"name": "roots rock", "similarity": 0.45833299999999999},
59
+ {"name": "folk", "similarity": 0.42708299999999999}, {"name": "soft rock",
60
+ "similarity": 0.42013899999999998}, {"name": "country rock", "similarity":
61
+ 0.38888899999999998}, {"name": "british folk", "similarity": 0.36805599999999999},
62
+ {"name": "folk-pop", "similarity": 0.36111100000000002}, {"name": "folk christmas",
63
+ "similarity": 0.23958299999999999}, {"name": "classic rock", "similarity":
64
+ 0.190972}, {"name": "rock", "similarity": 0.17361099999999999}, {"name": "album
65
+ rock", "similarity": 0.17013900000000001}, {"name": "psychedelic rock", "similarity":
66
+ 0.16319400000000001}, {"name": "british blues", "similarity": 0.125}], "total":
67
+ 17}}'
68
+ http_version:
69
+ recorded_at: Thu, 18 Dec 2014 02:58:41 GMT
70
+ recorded_with: VCR 2.9.3
@@ -0,0 +1,66 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: http://developer.echonest.com/api/v4/artist/similar?api_key=BNOAEBT3IZYZI6WXI&format=json&name=Weezer&results=10
6
+ body:
7
+ encoding: US-ASCII
8
+ string: ''
9
+ headers:
10
+ Accept-Encoding:
11
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
12
+ Accept:
13
+ - "*/*"
14
+ User-Agent:
15
+ - Ruby
16
+ response:
17
+ status:
18
+ code: 200
19
+ message: OK
20
+ headers:
21
+ Date:
22
+ - Tue, 11 Nov 2014 02:35:10 GMT
23
+ Content-Type:
24
+ - application/json; charset=utf-8
25
+ Transfer-Encoding:
26
+ - chunked
27
+ Vary:
28
+ - Accept-Encoding
29
+ X-Request-Id:
30
+ - DO3eFGEYQpyngza8OtSZ4w
31
+ X-Worker-Node:
32
+ - 322a7:4365
33
+ X-Ratelimit-Remaining:
34
+ - '19'
35
+ Server:
36
+ - TornadoServer/3.1
37
+ X-Ratelimit-Limit:
38
+ - '20'
39
+ X-Api-Key:
40
+ - BNOAEBT3IZYZI6WXI
41
+ Cache-Control:
42
+ - max-age=86400
43
+ Access-Control-Allow-Origin:
44
+ - "*"
45
+ X-Ratelimit-Used:
46
+ - '1'
47
+ Connection:
48
+ - Keep-alive
49
+ Keep-Alive:
50
+ - timeout=15, max=100
51
+ Via:
52
+ - 1.1 ID-0000627501223746 uproxy-3
53
+ body:
54
+ encoding: UTF-8
55
+ string: '{"response": {"status": {"version": "4.2", "code": 0, "message": "Success"},
56
+ "artists": [{"id": "ARQOST01187B9AC91A", "name": "Rivers Cuomo"}, {"id": "ARBMR171187B989A5E",
57
+ "name": "The Rentals"}, {"id": "ARP7ILI1187B9AE9F7", "name": "Phantom Planet"},
58
+ {"id": "AR6OJYP1187B9AE997", "name": "Jimmy Eat World"}, {"id": "ARDBSFT1187B9AC9C1",
59
+ "name": "Fountains of Wayne"}, {"id": "ARMR7TU1187FB37128", "name": "that
60
+ dog."}, {"id": "ARBAN8S1187FB4D22F", "name": "Ben Folds Five"}, {"id": "ARM454O1187B9B72B0",
61
+ "name": "Superdrag"}, {"id": "ARH9ZEH1187B98E01F", "name": "Harvey Danger"},
62
+ {"id": "ARXDFN01187B9AE80E", "name": "The Presidents of the United States
63
+ of America"}]}}'
64
+ http_version:
65
+ recorded_at: Tue, 11 Nov 2014 02:35:09 GMT
66
+ recorded_with: VCR 2.9.3
@@ -0,0 +1,66 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: http://developer.echonest.com/api/v4/artist/suggest?api_key=BNOAEBT3IZYZI6WXI&format=json&name=Weezer
6
+ body:
7
+ encoding: US-ASCII
8
+ string: ''
9
+ headers:
10
+ Accept-Encoding:
11
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
12
+ Accept:
13
+ - "*/*"
14
+ User-Agent:
15
+ - Ruby
16
+ response:
17
+ status:
18
+ code: 200
19
+ message: OK
20
+ headers:
21
+ Date:
22
+ - Mon, 01 Dec 2014 11:18:28 GMT
23
+ Content-Type:
24
+ - application/json; charset=utf-8
25
+ Transfer-Encoding:
26
+ - chunked
27
+ Vary:
28
+ - Accept-Encoding
29
+ X-Request-Id:
30
+ - BPbKUDVjTxqqVNFViXHnNw
31
+ X-Worker-Node:
32
+ - 89619:11853
33
+ X-Ratelimit-Remaining:
34
+ - '19'
35
+ Server:
36
+ - TornadoServer/3.1
37
+ X-Ratelimit-Limit:
38
+ - '20'
39
+ X-Api-Key:
40
+ - BNOAEBT3IZYZI6WXI
41
+ Cache-Control:
42
+ - max-age=86400
43
+ Access-Control-Allow-Origin:
44
+ - "*"
45
+ X-Ratelimit-Used:
46
+ - '1'
47
+ Connection:
48
+ - Keep-alive
49
+ Keep-Alive:
50
+ - timeout=15, max=100
51
+ Via:
52
+ - 1.1 ID-0000627501223746 uproxy-2
53
+ body:
54
+ encoding: UTF-8
55
+ string: '{"response": {"status": {"version": "4.2", "code": 0, "message": "Success"},
56
+ "artists": [{"id": "AR633SY1187B9AC3B9", "name": "Weezer"}, {"id": "ARRLJLF13221695F30",
57
+ "name": "Weezer, Hayley Williams"}, {"id": "ARHVIPZ122CC3B2537", "name": "Weezer
58
+ Tribute"}, {"id": "ARGGYKM13365906CDC", "name": "Weezer/Hayley Williams"},
59
+ {"id": "ARFLKGR13C1C2A6C75", "name": "Weezer Rasca"}, {"id": "AROXBRK148E394961D",
60
+ "name": "Jane Weezer"}, {"id": "ARTHPBI13A23CD07FD", "name": "Weezer / Hayley
61
+ Williams"}, {"id": "ARWHDKF12AF7D9BEBF", "name": "Grease Weezer"}, {"id":
62
+ "ARIVGRW134198DDE27", "name": "Matt Sharp (of Weezer"}, {"id": "ARIAWPS13C1C298E1A",
63
+ "name": "Weezer Rascal"}]}}'
64
+ http_version:
65
+ recorded_at: Mon, 01 Dec 2014 11:18:28 GMT
66
+ recorded_with: VCR 2.9.3
@@ -3,6 +3,7 @@ require 'echonest-ruby-api/artist'
3
3
  require 'echonest-ruby-api/song'
4
4
  require 'echonest-ruby-api/error'
5
5
  require 'echonest-ruby-api/playlist'
6
+ require 'echonest-ruby-api/genre'
6
7
 
7
8
  module Echonest
8
9
 
@@ -52,11 +52,11 @@ module Echonest
52
52
  Video.new(title: v[:title], site: v[:site], url: v[:url], date_found: v[:date_found], image_url: v[:image_url])
53
53
  end
54
54
  end
55
-
55
+
56
56
  def urls
57
57
  get_response(name: @name)[:urls]
58
58
  end
59
-
59
+
60
60
  def familiarity
61
61
  response = get_response(name: @name)
62
62
  response[entity_name.to_sym][__method__.to_sym]
@@ -95,6 +95,24 @@ module Echonest
95
95
  artists
96
96
  end
97
97
 
98
+ def similar(options = { results: 20 })
99
+ artists = []
100
+ response = get('artist/similar', {name: @name, results: options[:results]})
101
+ response[:artists].each do |a|
102
+ artists << a
103
+ end
104
+ return artists
105
+ end
106
+
107
+ def suggest(options = {})
108
+ options = {name: @name}.merge(options)
109
+ artists = []
110
+ get_response(options)[:artists].each do |a|
111
+ artists << Artist.new(@api_key, a[:name], a[:foreign_ids], a[:id])
112
+ end
113
+ artists
114
+ end
115
+
98
116
  def top_hottt(options = {})
99
117
  artists = []
100
118
  get_response(options)[:artists].each do |a|
@@ -23,20 +23,6 @@ module Echonest
23
23
  "#{ entity_name }/#{ calling_method }"
24
24
  end
25
25
 
26
- # Gets the base URI for all API calls
27
- #
28
- # Returns a String
29
- def self.base_uri
30
- "http://developer.echonest.com/api/v#{ Base.version }/"
31
- end
32
-
33
- # The current version of the Echonest API to be supported.
34
- #
35
- # Returns a Fixnum
36
- def self.version
37
- 4
38
- end
39
-
40
26
  # Performs a simple HTTP get on an API endpoint.
41
27
  #
42
28
  # Examples:
@@ -51,21 +37,7 @@ module Echonest
51
37
  #
52
38
  # Returns a response as a Hash
53
39
  def get(endpoint, options = {})
54
- options.merge!(api_key: @api_key,
55
- format: "json")
56
-
57
- httparty_options = { query_string_normalizer: HTTParty::Request::NON_RAILS_QUERY_STRING_NORMALIZER,
58
- query: options }
59
-
60
- response = HTTParty.get("#{ Base.base_uri }#{ endpoint }", httparty_options)
61
- json = MultiJson.load(response.body, symbolize_keys: true)
62
- response_code = json[:response][:status][:code]
63
-
64
- if response_code.eql?(0)
65
- json[:response]
66
- else
67
- raise Echonest::Error.new(response_code, response), "Error code #{ response_code }"
68
- end
40
+ Base.get_api_endpoint(@api_key, endpoint, options)
69
41
  end
70
42
 
71
43
  # Cross-platform way of finding an executable in the $PATH.
@@ -82,5 +54,37 @@ module Echonest
82
54
  return nil
83
55
  end
84
56
 
57
+ # Gets the base URI for all API calls
58
+ #
59
+ # Returns a String
60
+ def self.base_uri
61
+ "http://developer.echonest.com/api/v#{version}/"
62
+ end
63
+
64
+ # Gets an arbitrary Echonest endpoint
65
+ def self.get_api_endpoint(api_key, endpoint, options = {})
66
+ options.merge!(api_key: api_key,
67
+ format: "json")
68
+ httparty_options = { query_string_normalizer: HTTParty::Request::NON_RAILS_QUERY_STRING_NORMALIZER,
69
+ query: options }
70
+
71
+ response = HTTParty.get("#{ base_uri }#{ endpoint }", httparty_options)
72
+ json = MultiJson.load(response.body, symbolize_keys: true)
73
+ response_code = json[:response][:status][:code]
74
+
75
+ if response_code.eql?(0)
76
+ json[:response]
77
+ else
78
+ error = Echonest::Error.new(response_code, response)
79
+ raise error, "Error code #{response_code}: #{error.description}"
80
+ end
81
+ end
82
+
83
+ # The current version of the Echonest API to be supported.
84
+ #
85
+ # Returns a Fixnum
86
+ def self.version
87
+ 4
88
+ end
85
89
  end
86
90
  end