echonest-ruby-api 0.6.0 → 0.7.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.
- 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
|