echonest-ruby-api 0.6.0 → 0.7.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -13
- data/Gemfile +4 -3
- data/Guardfile +3 -3
- data/README.md +2 -0
- data/echonest-ruby-api.gemspec +0 -2
- data/fixtures/vcr_cassettes/news.yml +66 -0
- data/fixtures/vcr_cassettes/songs.yml +32 -28
- data/fixtures/vcr_cassettes/songs_more.yml +71 -0
- data/fixtures/vcr_cassettes/ten_news_articles.yml +293 -0
- data/fixtures/vcr_cassettes/ten_videos.yml +85 -0
- data/fixtures/vcr_cassettes/top_hottt.yml +91 -0
- data/fixtures/vcr_cassettes/urls.yml +58 -0
- data/fixtures/vcr_cassettes/videos.yml +58 -0
- data/lib/echonest-ruby-api/artist.rb +33 -2
- data/lib/echonest-ruby-api/version.rb +1 -1
- data/lib/echonest-ruby-api/video.rb +12 -0
- data/spec/artist_spec.rb +121 -71
- data/spec/spec_helper.rb +2 -0
- metadata +26 -47
- checksums.yaml.gz.sig +0 -0
- data.tar.gz.sig +0 -0
- metadata.gz.sig +0 -2
@@ -0,0 +1,85 @@
|
|
1
|
+
---
|
2
|
+
http_interactions:
|
3
|
+
- request:
|
4
|
+
method: get
|
5
|
+
uri: http://developer.echonest.com/api/v4/artist/video?api_key=BNOAEBT3IZYZI6WXI&format=json&name=Weezer&results=10
|
6
|
+
body:
|
7
|
+
encoding: US-ASCII
|
8
|
+
string: ''
|
9
|
+
headers: {}
|
10
|
+
response:
|
11
|
+
status:
|
12
|
+
code: 200
|
13
|
+
message: OK
|
14
|
+
headers:
|
15
|
+
Date:
|
16
|
+
- Tue, 25 Mar 2014 17:51:04 GMT
|
17
|
+
Content-Type:
|
18
|
+
- application/json; charset=utf-8
|
19
|
+
Content-Length:
|
20
|
+
- '3006'
|
21
|
+
Vary:
|
22
|
+
- Accept-Encoding
|
23
|
+
X-Request-Id:
|
24
|
+
- MAyICk1ET5GlgjjVQx8UtQ
|
25
|
+
Etag:
|
26
|
+
- ! '"6e6c084e73cbd1b42076bf7dd1da50f49b40f49d"'
|
27
|
+
X-Worker-Node:
|
28
|
+
- 7cbef:11396
|
29
|
+
X-Ratelimit-Remaining:
|
30
|
+
- '19'
|
31
|
+
Server:
|
32
|
+
- TornadoServer/3.1
|
33
|
+
X-Ratelimit-Limit:
|
34
|
+
- '20'
|
35
|
+
X-Api-Key:
|
36
|
+
- BNOAEBT3IZYZI6WXI
|
37
|
+
Cache-Control:
|
38
|
+
- max-age=86400
|
39
|
+
Access-Control-Allow-Origin:
|
40
|
+
- ! '*'
|
41
|
+
X-Ratelimit-Used:
|
42
|
+
- '1'
|
43
|
+
Connection:
|
44
|
+
- Keep-alive
|
45
|
+
Keep-Alive:
|
46
|
+
- timeout=15, max=100
|
47
|
+
Via:
|
48
|
+
- 1.1 ID-0000627501223746 uproxy-3
|
49
|
+
body:
|
50
|
+
encoding: US-ASCII
|
51
|
+
string: ! '{"response": {"status": {"version": "4.2", "code": 0, "message":
|
52
|
+
"Success"}, "start": 0, "total": 744, "video": [{"title": "Weezer - I Just
|
53
|
+
Threw Out The Love of My Dreams", "url": "http://www.youtube.com/watch?v=CFXOas-fCq8&feature=youtube_gdata_player",
|
54
|
+
"site": "youtube.com", "date_found": "2014-03-22T00:00:00", "image_url": "http://i.ytimg.com/vi/CFXOas-fCq8/default.jpg",
|
55
|
+
"id": "611289c4d72f6e507694c75f4552f9b2"}, {"title": "Weezer- Everyone", "url":
|
56
|
+
"http://www.youtube.com/watch?v=iZKC4pHw1zc&feature=youtube_gdata_player",
|
57
|
+
"site": "youtube.com", "date_found": "2014-03-08T00:00:00", "image_url": "http://i.ytimg.com/vi/iZKC4pHw1zc/default.jpg",
|
58
|
+
"id": "3f763e82869488809411e63f4cc031b6"}, {"title": "Weezer - Smile", "url":
|
59
|
+
"http://www.youtube.com/watch?v=YUeKEB41OCM&feature=youtube_gdata_player",
|
60
|
+
"site": "youtube.com", "date_found": "2014-03-08T00:00:00", "image_url": "http://i.ytimg.com/vi/YUeKEB41OCM/default.jpg",
|
61
|
+
"id": "cd47f4d58add3b4ddb2a00c1b7c851c9"}, {"title": "Weezer - Beverly Hills",
|
62
|
+
"url": "http://www.youtube.com/watch?v=U4vSDCdAwPE&feature=youtube_gdata_player",
|
63
|
+
"site": "youtube.com", "date_found": "2014-03-08T00:00:00", "image_url": "http://i.ytimg.com/vi/U4vSDCdAwPE/default.jpg",
|
64
|
+
"id": "bd22637570143ef73ebbb0817485e7c6"}, {"title": "Weezer - Hash Pipe",
|
65
|
+
"url": "http://www.youtube.com/watch?v=aDG_qive-uk&feature=youtube_gdata_player",
|
66
|
+
"site": "youtube.com", "date_found": "2014-03-08T00:00:00", "image_url": "http://i.ytimg.com/vi/aDG_qive-uk/default.jpg",
|
67
|
+
"id": "5614b2e3f6933379c2e862090404ae04"}, {"title": "Everybody Get Dangerous
|
68
|
+
- Weezer", "url": "http://www.youtube.com/watch?v=q15RYYK7wMI&feature=youtube_gdata_player",
|
69
|
+
"site": "youtube.com", "date_found": "2014-03-08T00:00:00", "image_url": "http://i.ytimg.com/vi/q15RYYK7wMI/default.jpg",
|
70
|
+
"id": "5f0dfa0255f408ccff9e83ed59569949"}, {"title": "Everybody Get Dangerous
|
71
|
+
- Weezer", "url": "http://www.youtube.com/watch?v=kBaoxmYha3k&feature=youtube_gdata_player",
|
72
|
+
"site": "youtube.com", "date_found": "2014-03-05T00:00:00", "image_url": "http://i.ytimg.com/vi/kBaoxmYha3k/default.jpg",
|
73
|
+
"id": "e177249d64da400ac9943d50de4995a8"}, {"title": "Weezer - Perfect Situation",
|
74
|
+
"url": "http://www.youtube.com/watch?v=TgcK8jDFadE&feature=youtube_gdata_player",
|
75
|
+
"site": "youtube.com", "date_found": "2014-03-05T00:00:00", "image_url": "http://i.ytimg.com/vi/TgcK8jDFadE/default.jpg",
|
76
|
+
"id": "f555e9de148787cf45c67a5f7334e0eb"}, {"title": "weezer- the greatest
|
77
|
+
man that ever lived (with lyrics)", "url": "http://www.youtube.com/watch?v=A60grS9QKg0&feature=youtube_gdata_player",
|
78
|
+
"site": "youtube.com", "date_found": "2014-03-05T00:00:00", "image_url": "http://i.ytimg.com/vi/A60grS9QKg0/default.jpg",
|
79
|
+
"id": "38aedba9bf15272dc5d167da6c8cb370"}, {"title": "Weezer - Simple Pages",
|
80
|
+
"url": "http://www.youtube.com/watch?v=m9EqvOqz4ko&feature=youtube_gdata_player",
|
81
|
+
"site": "youtube.com", "date_found": "2014-03-05T00:00:00", "image_url": "http://i.ytimg.com/vi/m9EqvOqz4ko/default.jpg",
|
82
|
+
"id": "488384dd01dc3d820a89d1f381727347"}]}}'
|
83
|
+
http_version:
|
84
|
+
recorded_at: Tue, 25 Mar 2014 17:50:37 GMT
|
85
|
+
recorded_with: VCR 2.8.0
|
@@ -0,0 +1,91 @@
|
|
1
|
+
---
|
2
|
+
http_interactions:
|
3
|
+
- request:
|
4
|
+
method: get
|
5
|
+
uri: http://developer.echonest.com/api/v4/artist/top_hottt?api_key=BNOAEBT3IZYZI6WXI&format=json
|
6
|
+
body:
|
7
|
+
encoding: US-ASCII
|
8
|
+
string: ''
|
9
|
+
headers: {}
|
10
|
+
response:
|
11
|
+
status:
|
12
|
+
code: 200
|
13
|
+
message: !binary |-
|
14
|
+
T0s=
|
15
|
+
headers:
|
16
|
+
!binary "RGF0ZQ==":
|
17
|
+
- !binary |-
|
18
|
+
RnJpLCAwNyBNYXIgMjAxNCAwMzoyNzowNCBHTVQ=
|
19
|
+
!binary "Q29udGVudC1UeXBl":
|
20
|
+
- !binary |-
|
21
|
+
YXBwbGljYXRpb24vanNvbjsgY2hhcnNldD11dGYtOA==
|
22
|
+
!binary "Q29udGVudC1MZW5ndGg=":
|
23
|
+
- !binary |-
|
24
|
+
ODU0
|
25
|
+
!binary "VmFyeQ==":
|
26
|
+
- !binary |-
|
27
|
+
QWNjZXB0LUVuY29kaW5n
|
28
|
+
!binary "WC1SZXF1ZXN0LUlk":
|
29
|
+
- !binary |-
|
30
|
+
MDJabVNaSmFRYXl4UlJ5S3JpcFBsQQ==
|
31
|
+
!binary "RXRhZw==":
|
32
|
+
- !binary |-
|
33
|
+
IjUzZTFlN2JiZTY5NzIyYTZlZGU2MmQ5MGI1Yzg3NmUwZWUzZGNjNWMi
|
34
|
+
!binary "WC1Xb3JrZXItTm9kZQ==":
|
35
|
+
- !binary |-
|
36
|
+
NzQ2ZTE6MjY4OTg=
|
37
|
+
!binary "WC1SYXRlbGltaXQtUmVtYWluaW5n":
|
38
|
+
- !binary |-
|
39
|
+
MTk=
|
40
|
+
!binary "U2VydmVy":
|
41
|
+
- !binary |-
|
42
|
+
VG9ybmFkb1NlcnZlci8zLjE=
|
43
|
+
!binary "WC1SYXRlbGltaXQtTGltaXQ=":
|
44
|
+
- !binary |-
|
45
|
+
MjA=
|
46
|
+
!binary "WC1BcGktS2V5":
|
47
|
+
- !binary |-
|
48
|
+
Qk5PQUVCVDNJWllaSTZXWEk=
|
49
|
+
!binary "Q2FjaGUtQ29udHJvbA==":
|
50
|
+
- !binary |-
|
51
|
+
bWF4LWFnZT04NjQwMA==
|
52
|
+
!binary "QWNjZXNzLUNvbnRyb2wtQWxsb3ctT3JpZ2lu":
|
53
|
+
- !binary |-
|
54
|
+
Kg==
|
55
|
+
!binary "WC1SYXRlbGltaXQtVXNlZA==":
|
56
|
+
- !binary |-
|
57
|
+
MQ==
|
58
|
+
!binary "Q29ubmVjdGlvbg==":
|
59
|
+
- !binary |-
|
60
|
+
S2VlcC1hbGl2ZQ==
|
61
|
+
!binary "S2VlcC1BbGl2ZQ==":
|
62
|
+
- !binary |-
|
63
|
+
dGltZW91dD0xNSwgbWF4PTEwMA==
|
64
|
+
!binary "Vmlh":
|
65
|
+
- !binary |-
|
66
|
+
MS4xIElELTAwMDA2Mjc1MDEyMjM3NDYgdXByb3h5LTI=
|
67
|
+
body:
|
68
|
+
encoding: ASCII-8BIT
|
69
|
+
string: !binary |-
|
70
|
+
eyJyZXNwb25zZSI6IHsic3RhdHVzIjogeyJ2ZXJzaW9uIjogIjQuMiIsICJj
|
71
|
+
b2RlIjogMCwgIm1lc3NhZ2UiOiAiU3VjY2VzcyJ9LCAiYXJ0aXN0cyI6IFt7
|
72
|
+
Im5hbWUiOiAiS2F0eSBQZXJyeSIsICJpZCI6ICJBUjBJVlRMMTE4N0I5QUQ1
|
73
|
+
MjAifSwgeyJuYW1lIjogIkF2aWNpaSIsICJpZCI6ICJBUldMQUVFMTIyQkNG
|
74
|
+
Q0EyNDUifSwgeyJuYW1lIjogIkJleW9uY8OpIiwgImlkIjogIkFSNjVLN0Ex
|
75
|
+
MTg3RkI0REFBNCJ9LCB7Im5hbWUiOiAiUGhhcnJlbGwiLCAiaWQiOiAiQVJX
|
76
|
+
WFNQTzEyNDFCOUM2QjFDIn0sIHsibmFtZSI6ICJNaWxleSBDeXJ1cyIsICJp
|
77
|
+
ZCI6ICJBUllBVkJTMTE4N0ZCNUI0NkMifSwgeyJuYW1lIjogIkltYWdpbmUg
|
78
|
+
RHJhZ29ucyIsICJpZCI6ICJBUlJWUkZQMTI2RkUwMjUzMjcifSwgeyJuYW1l
|
79
|
+
IjogIkVtaW5lbSIsICJpZCI6ICJBUlRIOTA0MTE4N0ZCNDNFMUYifSwgeyJu
|
80
|
+
YW1lIjogIlBpdGJ1bGwiLCAiaWQiOiAiQVJLOUJIRTExODdGQjNBQzlEIn0s
|
81
|
+
IHsibmFtZSI6ICJCZWNrIiwgImlkIjogIkFSQzJYUjExMTg3RkI1Q0M5NSJ9
|
82
|
+
LCB7Im5hbWUiOiAiT25lUmVwdWJsaWMiLCAiaWQiOiAiQVI3M1M0RzExODdC
|
83
|
+
OUEwM0MyIn0sIHsibmFtZSI6ICJEYWZ0IFB1bmsiLCAiaWQiOiAiQVJGOEhU
|
84
|
+
UTExODdCOUFFNjkzIn0sIHsibmFtZSI6ICJTaGFraXJhIiwgImlkIjogIkFS
|
85
|
+
NlBKOFIxMTg3RkI1QUQ3MCJ9LCB7Im5hbWUiOiAiTG9yZGUiLCAiaWQiOiAi
|
86
|
+
QVJVWEFLVzEzRDYxMEIwQTlCIn0sIHsibmFtZSI6ICJFbGxpZSBHb3VsZGlu
|
87
|
+
ZyIsICJpZCI6ICJBUktUVEpWMTI1OTJDREEwN0YifSwgeyJuYW1lIjogIk9u
|
88
|
+
ZSBEaXJlY3Rpb24iLCAiaWQiOiAiQVJaSEZBWTEzMDcwOEVFMzY2In1dfX0=
|
89
|
+
http_version:
|
90
|
+
recorded_at: Fri, 07 Mar 2014 03:27:07 GMT
|
91
|
+
recorded_with: VCR 2.8.0
|
@@ -0,0 +1,58 @@
|
|
1
|
+
---
|
2
|
+
http_interactions:
|
3
|
+
- request:
|
4
|
+
method: get
|
5
|
+
uri: http://developer.echonest.com/api/v4/artist/urls?api_key=BNOAEBT3IZYZI6WXI&format=json&name=Weezer
|
6
|
+
body:
|
7
|
+
encoding: US-ASCII
|
8
|
+
string: ''
|
9
|
+
headers: {}
|
10
|
+
response:
|
11
|
+
status:
|
12
|
+
code: 200
|
13
|
+
message: OK
|
14
|
+
headers:
|
15
|
+
Date:
|
16
|
+
- Tue, 25 Mar 2014 19:27:58 GMT
|
17
|
+
Content-Type:
|
18
|
+
- application/json; charset=utf-8
|
19
|
+
Content-Length:
|
20
|
+
- '411'
|
21
|
+
Vary:
|
22
|
+
- Accept-Encoding
|
23
|
+
X-Request-Id:
|
24
|
+
- 9+GeAlcQTCKxVobTmu+hOQ
|
25
|
+
Etag:
|
26
|
+
- ! '"d08d0b34bc126745b7819958c8c509f0693588cd"'
|
27
|
+
X-Worker-Node:
|
28
|
+
- 7cbef:23004
|
29
|
+
X-Ratelimit-Remaining:
|
30
|
+
- '19'
|
31
|
+
Server:
|
32
|
+
- TornadoServer/3.1
|
33
|
+
X-Ratelimit-Limit:
|
34
|
+
- '20'
|
35
|
+
X-Api-Key:
|
36
|
+
- BNOAEBT3IZYZI6WXI
|
37
|
+
Cache-Control:
|
38
|
+
- max-age=86400
|
39
|
+
Access-Control-Allow-Origin:
|
40
|
+
- ! '*'
|
41
|
+
X-Ratelimit-Used:
|
42
|
+
- '1'
|
43
|
+
Connection:
|
44
|
+
- Keep-alive
|
45
|
+
Keep-Alive:
|
46
|
+
- timeout=15, max=100
|
47
|
+
Via:
|
48
|
+
- 1.1 ID-0000627501223746 uproxy-2
|
49
|
+
body:
|
50
|
+
encoding: US-ASCII
|
51
|
+
string: ! '{"response": {"status": {"version": "4.2", "code": 0, "message":
|
52
|
+
"Success"}, "urls": {"official_url": "http://www.weezer.com", "lastfm_url":
|
53
|
+
"http://www.last.fm/music/Weezer", "twitter_url": "https://twitter.com/Weezer",
|
54
|
+
"myspace_url": "http://www.myspace.com/weezer", "wikipedia_url": "http://en.wikipedia.org/wiki/Weezer",
|
55
|
+
"mb_url": "http://musicbrainz.org/artist/6fe07aa5-fec0-4eca-a456-f29bff451b04.html"}}}'
|
56
|
+
http_version:
|
57
|
+
recorded_at: Tue, 25 Mar 2014 19:27:31 GMT
|
58
|
+
recorded_with: VCR 2.8.0
|
@@ -0,0 +1,58 @@
|
|
1
|
+
---
|
2
|
+
http_interactions:
|
3
|
+
- request:
|
4
|
+
method: get
|
5
|
+
uri: http://developer.echonest.com/api/v4/artist/video?api_key=BNOAEBT3IZYZI6WXI&format=json&name=Weezer&results=1
|
6
|
+
body:
|
7
|
+
encoding: US-ASCII
|
8
|
+
string: ''
|
9
|
+
headers: {}
|
10
|
+
response:
|
11
|
+
status:
|
12
|
+
code: 200
|
13
|
+
message: OK
|
14
|
+
headers:
|
15
|
+
Date:
|
16
|
+
- Tue, 25 Mar 2014 17:51:04 GMT
|
17
|
+
Content-Type:
|
18
|
+
- application/json; charset=utf-8
|
19
|
+
Content-Length:
|
20
|
+
- '422'
|
21
|
+
Vary:
|
22
|
+
- Accept-Encoding
|
23
|
+
X-Request-Id:
|
24
|
+
- 6kvvBucfQjOHDAAr7D9bpQ
|
25
|
+
Etag:
|
26
|
+
- ! '"d9db9d4a1e07cec93621ece5d32ff9673ed0b225"'
|
27
|
+
X-Worker-Node:
|
28
|
+
- 962d4:14760
|
29
|
+
X-Ratelimit-Remaining:
|
30
|
+
- '18'
|
31
|
+
Server:
|
32
|
+
- TornadoServer/3.1
|
33
|
+
X-Ratelimit-Limit:
|
34
|
+
- '20'
|
35
|
+
X-Api-Key:
|
36
|
+
- BNOAEBT3IZYZI6WXI
|
37
|
+
Cache-Control:
|
38
|
+
- max-age=86400
|
39
|
+
Access-Control-Allow-Origin:
|
40
|
+
- ! '*'
|
41
|
+
X-Ratelimit-Used:
|
42
|
+
- '2'
|
43
|
+
Connection:
|
44
|
+
- Keep-alive
|
45
|
+
Keep-Alive:
|
46
|
+
- timeout=15, max=100
|
47
|
+
Via:
|
48
|
+
- 1.1 ID-0000627501223746 uproxy-2
|
49
|
+
body:
|
50
|
+
encoding: US-ASCII
|
51
|
+
string: ! '{"response": {"status": {"version": "4.2", "code": 0, "message":
|
52
|
+
"Success"}, "start": 0, "total": 744, "video": [{"title": "Weezer - I Just
|
53
|
+
Threw Out The Love of My Dreams", "url": "http://www.youtube.com/watch?v=CFXOas-fCq8&feature=youtube_gdata_player",
|
54
|
+
"site": "youtube.com", "date_found": "2014-03-22T00:00:00", "image_url": "http://i.ytimg.com/vi/CFXOas-fCq8/default.jpg",
|
55
|
+
"id": "611289c4d72f6e507694c75f4552f9b2"}]}}'
|
56
|
+
http_version:
|
57
|
+
recorded_at: Tue, 25 Mar 2014 17:50:37 GMT
|
58
|
+
recorded_with: VCR 2.8.0
|
@@ -3,6 +3,7 @@ require "bundler/setup"
|
|
3
3
|
require_relative 'base'
|
4
4
|
require_relative 'blog'
|
5
5
|
require_relative 'biography'
|
6
|
+
require_relative 'video'
|
6
7
|
require_relative 'foreign_id'
|
7
8
|
|
8
9
|
module Echonest
|
@@ -26,6 +27,7 @@ module Echonest
|
|
26
27
|
end
|
27
28
|
end
|
28
29
|
|
30
|
+
# Stuff from blogspot, etc
|
29
31
|
def blogs(options = { results: 1 })
|
30
32
|
response = get_response(results: options[:results], name: @name)
|
31
33
|
|
@@ -34,6 +36,27 @@ module Echonest
|
|
34
36
|
end
|
35
37
|
end
|
36
38
|
|
39
|
+
# This appears to be from more "reputable" sources?
|
40
|
+
def news(options = { results: 1 })
|
41
|
+
response = get_response(results: options[:results], name: @name)
|
42
|
+
|
43
|
+
response[:news].collect do |b|
|
44
|
+
Blog.new(name: b[:name], site: b[:site], url: b[:url])
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
def video(options = { results: 1 })
|
49
|
+
response = get_response(results: options[:results], name: @name)
|
50
|
+
|
51
|
+
response[:video].collect do |v|
|
52
|
+
Video.new(title: v[:title], site: v[:site], url: v[:url], date_found: v[:date_found], image_url: v[:image_url])
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
def urls
|
57
|
+
get_response(name: @name)[:urls]
|
58
|
+
end
|
59
|
+
|
37
60
|
def familiarity
|
38
61
|
response = get_response(name: @name)
|
39
62
|
response[entity_name.to_sym][__method__.to_sym]
|
@@ -72,9 +95,17 @@ module Echonest
|
|
72
95
|
artists
|
73
96
|
end
|
74
97
|
|
75
|
-
def
|
98
|
+
def top_hottt(options = {})
|
99
|
+
artists = []
|
100
|
+
get_response(options)[:artists].each do |a|
|
101
|
+
artists << Artist.new(@api_key, a[:name], a[:foreign_ids], a[:id])
|
102
|
+
end
|
103
|
+
artists
|
104
|
+
end
|
105
|
+
|
106
|
+
def songs(options = { results: 15 })
|
76
107
|
songs = []
|
77
|
-
get_response(name: @name)[:songs].each do |s|
|
108
|
+
get_response(results: options[:results], name: @name)[:songs].each do |s|
|
78
109
|
songs << { s[:id] => s[:title] }
|
79
110
|
end
|
80
111
|
songs
|
@@ -0,0 +1,12 @@
|
|
1
|
+
module Echonest
|
2
|
+
class Video
|
3
|
+
attr_accessor :title, :site, :url, :date_found, :image_url
|
4
|
+
def initialize(options = {})
|
5
|
+
@title = options[:title]
|
6
|
+
@site = options[:site]
|
7
|
+
@url = options[:url]
|
8
|
+
@date_found = options[:date_found]
|
9
|
+
@image_url = options[:image_url]
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
data/spec/artist_spec.rb
CHANGED
@@ -17,14 +17,12 @@ describe Echonest::Artist do
|
|
17
17
|
end
|
18
18
|
|
19
19
|
describe '#entity_name' do
|
20
|
-
|
21
20
|
it 'should always return artist' do
|
22
21
|
VCR.use_cassette('entity_name') do
|
23
22
|
a = Echonest::Artist.new('Weezer', '12345')
|
24
23
|
a.entity_name.should eql 'artist'
|
25
24
|
end
|
26
25
|
end
|
27
|
-
|
28
26
|
end
|
29
27
|
|
30
28
|
describe '#biographies' do
|
@@ -70,6 +68,53 @@ describe Echonest::Artist do
|
|
70
68
|
|
71
69
|
end
|
72
70
|
|
71
|
+
describe '#news' do
|
72
|
+
|
73
|
+
it 'should download a specified number of news articles' do
|
74
|
+
VCR.use_cassette('ten_news_articles') do
|
75
|
+
create_valid_artist
|
76
|
+
@a.news(results: 10).count.should be 10
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
it 'should return one news article by default' do
|
81
|
+
VCR.use_cassette('news') do
|
82
|
+
create_valid_artist
|
83
|
+
@a.news.count.should be 1
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
end
|
88
|
+
|
89
|
+
describe '#videos' do
|
90
|
+
|
91
|
+
it 'should download a specified number of video streams' do
|
92
|
+
VCR.use_cassette('ten_videos') do
|
93
|
+
create_valid_artist
|
94
|
+
@a.video(results: 10).count.should be 10
|
95
|
+
end
|
96
|
+
end
|
97
|
+
|
98
|
+
it 'should return one video by default' do
|
99
|
+
VCR.use_cassette('videos') do
|
100
|
+
create_valid_artist
|
101
|
+
@a.video.count.should be 1
|
102
|
+
end
|
103
|
+
end
|
104
|
+
|
105
|
+
end
|
106
|
+
|
107
|
+
describe '#urls' do
|
108
|
+
|
109
|
+
it 'should return a hash of urls' do
|
110
|
+
VCR.use_cassette('urls') do
|
111
|
+
create_valid_artist
|
112
|
+
@a.urls.should be_a Hash
|
113
|
+
end
|
114
|
+
end
|
115
|
+
|
116
|
+
end
|
117
|
+
|
73
118
|
describe '#familiarity' do
|
74
119
|
|
75
120
|
it 'should allow us to find out how familiar an artist is' do
|
@@ -103,11 +148,9 @@ describe Echonest::Artist do
|
|
103
148
|
@a.hotttnesss(type: 'mainstream').should be_a Float
|
104
149
|
end
|
105
150
|
end
|
106
|
-
|
107
151
|
end
|
108
152
|
|
109
153
|
describe '#images' do
|
110
|
-
|
111
154
|
it 'should allow us to get an array of urls' do
|
112
155
|
VCR.use_cassette('images') do
|
113
156
|
create_valid_artist
|
@@ -139,86 +182,103 @@ describe Echonest::Artist do
|
|
139
182
|
end
|
140
183
|
end
|
141
184
|
|
142
|
-
end
|
143
|
-
|
144
|
-
describe '#list_genres' do
|
185
|
+
end # /images
|
145
186
|
|
187
|
+
describe '#list_genres', vcr: {cassette_name: 'list_genres'} do
|
146
188
|
it 'should return an array of acceptable genres' do
|
147
|
-
|
148
|
-
|
149
|
-
@a.list_genres.should be_a Array
|
150
|
-
end
|
189
|
+
create_valid_artist
|
190
|
+
@a.list_genres.should be_a Array
|
151
191
|
end
|
152
192
|
|
153
193
|
it 'should return an array in the correct format' do
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
g[:name].should be_a String
|
158
|
-
end
|
194
|
+
create_valid_artist
|
195
|
+
@a.list_genres.each do |g|
|
196
|
+
g[:name].should be_a String
|
159
197
|
end
|
160
198
|
end
|
161
|
-
|
162
199
|
end
|
163
200
|
|
164
|
-
describe '#search' do
|
201
|
+
describe '#search', vcr: {cassette_name: 'search'} do
|
165
202
|
it 'should return an Array of artists' do
|
166
|
-
|
167
|
-
|
168
|
-
@a.search.should be_a Array
|
169
|
-
end
|
203
|
+
create_valid_artist
|
204
|
+
@a.search.should be_a Array
|
170
205
|
end
|
171
206
|
|
172
207
|
it 'should return an Artist object for each result' do
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
k.class.should be Echonest::Artist
|
177
|
-
end
|
208
|
+
create_valid_artist
|
209
|
+
@a.search.each do |k|
|
210
|
+
k.class.should be Echonest::Artist
|
178
211
|
end
|
179
212
|
end
|
180
213
|
|
181
214
|
it 'should fill in id of each returned artist' do
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
k.id.should_not be_nil
|
186
|
-
end
|
215
|
+
create_valid_artist
|
216
|
+
@a.search.each do |k|
|
217
|
+
k.id.should_not be_nil
|
187
218
|
end
|
188
219
|
end
|
189
220
|
|
190
|
-
|
191
|
-
|
221
|
+
context 'with bucket', vcr: {cassette_name: 'search_2'} do
|
222
|
+
it 'should search the specified bucket' do
|
192
223
|
create_valid_artist
|
193
224
|
results = @a.search(bucket: "id:musicbrainz")
|
194
225
|
foreign_id = results.first.foreign_ids.first
|
195
226
|
foreign_id.catalog.should eq("musicbrainz")
|
196
227
|
end
|
197
228
|
end
|
198
|
-
end
|
229
|
+
end # /search
|
199
230
|
|
200
|
-
describe '#
|
231
|
+
describe '#top_hottt', vcr: {cassette_name: 'top_hottt'} do
|
232
|
+
it 'should return an Array of artists' do
|
233
|
+
create_valid_artist
|
234
|
+
@a.top_hottt.should be_a Array
|
235
|
+
end
|
201
236
|
|
202
|
-
it 'should return an
|
203
|
-
|
204
|
-
|
205
|
-
|
237
|
+
it 'should return an Artist object for each result' do
|
238
|
+
create_valid_artist
|
239
|
+
@a.top_hottt.each do |k|
|
240
|
+
k.class.should be Echonest::Artist
|
206
241
|
end
|
207
242
|
end
|
208
243
|
|
209
|
-
it 'should
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
k.should be_a Hash
|
214
|
-
end
|
244
|
+
it 'should fill in id of each returned artist' do
|
245
|
+
create_valid_artist
|
246
|
+
@a.top_hottt.each do |k|
|
247
|
+
k.id.should_not be_nil
|
215
248
|
end
|
216
249
|
end
|
217
250
|
|
251
|
+
it 'should only make one network request' do
|
252
|
+
create_valid_artist
|
253
|
+
@a.expects(:get_response).times(1).returns({:artists=>[]})
|
254
|
+
artists = @a.top_hottt
|
255
|
+
artists.should eq([])
|
256
|
+
end
|
257
|
+
|
258
|
+
end # /top_hottt
|
259
|
+
|
260
|
+
describe '#songs', vcr: {cassette_name: 'songs'} do
|
261
|
+
it 'should return an Array of a Hash of songs' do
|
262
|
+
create_valid_artist
|
263
|
+
@a.songs.should be_a Array
|
264
|
+
end
|
265
|
+
|
266
|
+
it 'should return a valid hash for each song' do
|
267
|
+
create_valid_artist
|
268
|
+
@a.songs.each do |k|
|
269
|
+
k.should be_a Hash
|
270
|
+
end
|
271
|
+
end
|
272
|
+
it 'should be able to fetch more than the default amount' do
|
273
|
+
VCR.use_cassette('songs_more') do
|
274
|
+
@a = Echonest::Artist.new('BNOAEBT3IZYZI6WXI', 'Bob Marley')
|
275
|
+
songs = @a.songs(results: 20)
|
276
|
+
songs.size.should be > 15
|
277
|
+
end
|
278
|
+
end
|
218
279
|
end
|
219
280
|
|
220
281
|
describe "#profile" do
|
221
|
-
|
222
282
|
it 'should return an artist profile given an id' do
|
223
283
|
VCR.use_cassette('profile') do
|
224
284
|
@a = Echonest::Artist.new('BNOAEBT3IZYZI6WXI', nil, nil, 'ARH6W4X1187B99274F')
|
@@ -227,45 +287,35 @@ describe Echonest::Artist do
|
|
227
287
|
artist.name.should eq "Radiohead"
|
228
288
|
end
|
229
289
|
end
|
230
|
-
|
231
290
|
end
|
232
291
|
|
233
|
-
describe '#terms' do
|
234
|
-
|
292
|
+
describe '#terms', vcr: {cassette_name: 'terms'} do
|
235
293
|
it 'should return an array of hashes of terms' do
|
236
|
-
|
237
|
-
|
238
|
-
@a.terms.should be_a Array
|
239
|
-
end
|
294
|
+
create_valid_artist_with_id
|
295
|
+
@a.terms.should be_a Array
|
240
296
|
end
|
241
297
|
|
242
298
|
it 'should return valid hash for each term' do
|
243
|
-
|
244
|
-
|
245
|
-
|
246
|
-
k.should be_a Hash
|
247
|
-
end
|
299
|
+
create_valid_artist_with_id
|
300
|
+
@a.terms.each do |k|
|
301
|
+
k.should be_a Hash
|
248
302
|
end
|
249
303
|
end
|
250
304
|
|
251
305
|
it 'should return modern rock for Radiohead' do
|
252
|
-
|
253
|
-
|
254
|
-
@a.terms.map{|t| t[:name]}.should include("modern rock")
|
255
|
-
end
|
306
|
+
create_valid_artist_with_id
|
307
|
+
@a.terms.map{|t| t[:name]}.should include("modern rock")
|
256
308
|
end
|
257
309
|
|
258
310
|
it 'should work even when artist has both name and id' do
|
259
311
|
# If we try, echonest will respond with error:
|
260
312
|
# 'limit - Only one of \"name\" or \"id\" is allowed'
|
261
|
-
|
262
|
-
|
263
|
-
|
264
|
-
|
265
|
-
|
266
|
-
}.to_not raise_error
|
267
|
-
end
|
313
|
+
create_valid_artist_with_id
|
314
|
+
@a.name = "Weezer"
|
315
|
+
expect {
|
316
|
+
@a.terms
|
317
|
+
}.to_not raise_error
|
268
318
|
end
|
319
|
+
end # /terms
|
269
320
|
|
270
|
-
end
|
271
321
|
end
|