firstfm 0.2.3 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
data/VERSION.yml CHANGED
@@ -1,5 +1,5 @@
1
1
  ---
2
2
  :major: 0
3
- :minor: 2
4
- :patch: 3
3
+ :minor: 3
4
+ :patch: 0
5
5
  :build:
data/firstfm.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "firstfm"
8
- s.version = "0.2.3"
8
+ s.version = "0.3.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Aleksandr Lossenko"]
12
- s.date = "2012-02-04"
12
+ s.date = "2012-04-25"
13
13
  s.description = "Firstfm is a ruby wrapper for the Last.fm APIs ( http://www.last.fm/api ). My main focus is to import events from Last.FM, but with time I will try to add support for all API methods."
14
14
  s.email = "aleksandr.lossenko@gmail.com"
15
15
  s.extra_rdoc_files = [
@@ -38,6 +38,7 @@ Gem::Specification.new do |s|
38
38
  "test/fixtures/events.xml",
39
39
  "test/fixtures/geo_event.xml",
40
40
  "test/fixtures/geo_events.xml",
41
+ "test/fixtures/geo_get_metro_artist_chart.xml",
41
42
  "test/fixtures/get_images.xml",
42
43
  "test/fixtures/top_tracks.xml",
43
44
  "test/fixtures/tracks.xml",
data/lib/firstfm/geo.rb CHANGED
@@ -23,6 +23,66 @@ module Firstfm
23
23
 
24
24
  end
25
25
 
26
+ def self.get_top_artists(params = {})
27
+ country = params[:country]
28
+ page = params[:page] || 1
29
+ limit = params[:limit] || 50
30
+
31
+ response = get("/2.0/", {:query => {
32
+ :method => 'geo.gettopartists',
33
+ :country => country,
34
+ :page => page,
35
+ :limit => limit,
36
+ :api_key => Firstfm::CONFIG['api_key']
37
+ }})
38
+
39
+ artists_array = (response and response['lfm'] and response['lfm']['topartists'] and response['lfm']['topartists']['artist']) || []
40
+ artists = Artist.init_from_array(artists_array)
41
+ WillPaginate::Collection.create(page, limit) do |pager|
42
+ pager.replace artists
43
+ pager.total_entries = response['lfm']['topartists']['total'].to_i rescue 0
44
+ end
45
+ end
46
+
47
+ def self.get_metro_artist_chart(params = {})
48
+ get_generic_artist_chart 'geo.getmetroartistchart', params
49
+ end
50
+
51
+ def self.get_metro_hype_artist_chart(params = {})
52
+ get_generic_artist_chart 'geo.getmetrohypeartistchart', params
53
+ end
54
+
55
+ def self.get_metro_unique_artist_chart(params = {})
56
+ get_generic_artist_chart 'geo.getmetrouniqueartistchart', params
57
+ end
58
+
59
+ def self.get_generic_artist_chart(method, params = {})
60
+ metro = params[:metro]
61
+ country = params[:country]
62
+ start_timestamp = params[:start]
63
+ end_timestamp = params[:end]
64
+ page = params[:page] || 1
65
+ limit = params[:limit] || 50
66
+
67
+ response = get("/2.0/", {:query => {
68
+ :method => method,
69
+ :country => country,
70
+ :metro => metro,
71
+ :start => start_timestamp,
72
+ :end => end_timestamp,
73
+ :page => page,
74
+ :limit => limit,
75
+ :api_key => Firstfm::CONFIG['api_key']
76
+ }})
77
+
78
+ artists_array = (response and response['lfm'] and response['lfm']['topartists'] and response['lfm']['topartists']['artist']) || []
79
+ artists = Artist.init_from_array(artists_array)
80
+ WillPaginate::Collection.create(page, limit) do |pager|
81
+ pager.replace artists
82
+ pager.total_entries = response['lfm']['topartists']['total'].to_i rescue 0
83
+ end
84
+ end
85
+
26
86
  end
27
87
 
28
88
  end
@@ -0,0 +1,29 @@
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <lfm status="ok">
3
+ <topartists metro="Madrid" page="1" perPage="50" totalPages="10" total="500">
4
+ <artist rank="1">
5
+ <name>Coldplay</name>
6
+ <listeners>558</listeners>
7
+ <mbid>cc197bad-dc9c-440d-a5b5-d52ba2e14234</mbid>
8
+ <url>http://www.last.fm/music/Coldplay</url>
9
+ <streamable>1</streamable>
10
+ <image size="small">http://userserve-ak.last.fm/serve/34/5854.jpg</image>
11
+ <image size="medium">http://userserve-ak.last.fm/serve/64/5854.jpg</image>
12
+ <image size="large">http://userserve-ak.last.fm/serve/126/5854.jpg</image>
13
+ <image size="extralarge">http://userserve-ak.last.fm/serve/252/5854.jpg</image>
14
+ <image size="mega">http://userserve-ak.last.fm/serve/500/5854/Coldplay.jpg</image>
15
+ </artist>
16
+ <artist rank="2">
17
+ <name>Adele</name>
18
+ <listeners>552</listeners>
19
+ <mbid>1de93a63-3a9f-443a-ba8a-a43b5fe0121e</mbid>
20
+ <url>http://www.last.fm/music/Adele</url>
21
+ <streamable>1</streamable>
22
+ <image size="small">http://userserve-ak.last.fm/serve/34/74021366.jpg</image>
23
+ <image size="medium">http://userserve-ak.last.fm/serve/64/74021366.jpg</image>
24
+ <image size="large">http://userserve-ak.last.fm/serve/126/74021366.jpg</image>
25
+ <image size="extralarge">http://userserve-ak.last.fm/serve/252/74021366.jpg</image>
26
+ <image size="mega">http://userserve-ak.last.fm/serve/_/74021366/Adele+smile.jpg</image>
27
+ </artist>
28
+ </topartists>
29
+ </lfm>
data/test/test_geo.rb CHANGED
@@ -31,4 +31,84 @@ class TestGeo < Test::Unit::TestCase
31
31
  assert_equal "La Boite", event.venue.name
32
32
  end
33
33
 
34
+ def test_should_get_metro_artist_chart
35
+ FakeWeb.register_uri(:get, %r|http://ws.audioscrobbler.com/|, :body => File.read(File.dirname(__FILE__) + "/fixtures/geo_get_metro_artist_chart.xml"))
36
+ artists = Firstfm::Geo.get_metro_artist_chart
37
+ assert_equal 2, artists.size
38
+ artist1 = artists.first
39
+ artist2 = artists.last
40
+
41
+ assert_equal "Coldplay", artist1.name
42
+ assert_equal "cc197bad-dc9c-440d-a5b5-d52ba2e14234", artist1.mbid
43
+ assert_equal "http://www.last.fm/music/Coldplay", artist1.url
44
+ assert_equal 558, artist1.listeners
45
+ assert artist1.streamable
46
+
47
+ assert_equal "Adele", artist2.name
48
+ assert_equal "1de93a63-3a9f-443a-ba8a-a43b5fe0121e", artist2.mbid
49
+ assert_equal "http://www.last.fm/music/Adele", artist2.url
50
+ assert_equal 552, artist2.listeners
51
+ assert artist2.streamable
52
+ end
53
+
54
+ def test_should_get_metro_hype_artist_chart
55
+ FakeWeb.register_uri(:get, %r|http://ws.audioscrobbler.com/|, :body => File.read(File.dirname(__FILE__) + "/fixtures/geo_get_metro_artist_chart.xml"))
56
+ artists = Firstfm::Geo.get_metro_hype_artist_chart
57
+ assert_equal 2, artists.size
58
+ artist1 = artists.first
59
+ artist2 = artists.last
60
+
61
+ assert_equal "Coldplay", artist1.name
62
+ assert_equal "cc197bad-dc9c-440d-a5b5-d52ba2e14234", artist1.mbid
63
+ assert_equal "http://www.last.fm/music/Coldplay", artist1.url
64
+ assert_equal 558, artist1.listeners
65
+ assert artist1.streamable
66
+
67
+ assert_equal "Adele", artist2.name
68
+ assert_equal "1de93a63-3a9f-443a-ba8a-a43b5fe0121e", artist2.mbid
69
+ assert_equal "http://www.last.fm/music/Adele", artist2.url
70
+ assert_equal 552, artist2.listeners
71
+ assert artist2.streamable
72
+ end
73
+
74
+ def test_should_get_metro_unique_artist_chart
75
+ FakeWeb.register_uri(:get, %r|http://ws.audioscrobbler.com/|, :body => File.read(File.dirname(__FILE__) + "/fixtures/geo_get_metro_artist_chart.xml"))
76
+ artists = Firstfm::Geo.get_metro_unique_artist_chart
77
+ assert_equal 2, artists.size
78
+ artist1 = artists.first
79
+ artist2 = artists.last
80
+
81
+ assert_equal "Coldplay", artist1.name
82
+ assert_equal "cc197bad-dc9c-440d-a5b5-d52ba2e14234", artist1.mbid
83
+ assert_equal "http://www.last.fm/music/Coldplay", artist1.url
84
+ assert_equal 558, artist1.listeners
85
+ assert artist1.streamable
86
+
87
+ assert_equal "Adele", artist2.name
88
+ assert_equal "1de93a63-3a9f-443a-ba8a-a43b5fe0121e", artist2.mbid
89
+ assert_equal "http://www.last.fm/music/Adele", artist2.url
90
+ assert_equal 552, artist2.listeners
91
+ assert artist2.streamable
92
+ end
93
+
94
+ def test_should_get_top_artists
95
+ FakeWeb.register_uri(:get, %r|http://ws.audioscrobbler.com/|, :body => File.read(File.dirname(__FILE__) + "/fixtures/geo_get_metro_artist_chart.xml"))
96
+ artists = Firstfm::Geo.get_top_artists
97
+ assert_equal 2, artists.size
98
+ artist1 = artists.first
99
+ artist2 = artists.last
100
+
101
+ assert_equal "Coldplay", artist1.name
102
+ assert_equal "cc197bad-dc9c-440d-a5b5-d52ba2e14234", artist1.mbid
103
+ assert_equal "http://www.last.fm/music/Coldplay", artist1.url
104
+ assert_equal 558, artist1.listeners
105
+ assert artist1.streamable
106
+
107
+ assert_equal "Adele", artist2.name
108
+ assert_equal "1de93a63-3a9f-443a-ba8a-a43b5fe0121e", artist2.mbid
109
+ assert_equal "http://www.last.fm/music/Adele", artist2.url
110
+ assert_equal 552, artist2.listeners
111
+ assert artist2.streamable
112
+ end
113
+
34
114
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: firstfm
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.3
4
+ version: 0.3.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-02-04 00:00:00.000000000 Z
12
+ date: 2012-04-25 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: httparty
16
- requirement: &70316559616040 !ruby/object:Gem::Requirement
16
+ requirement: &70148196165520 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ~>
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '0.8'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *70316559616040
24
+ version_requirements: *70148196165520
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: crack
27
- requirement: &70316559615440 !ruby/object:Gem::Requirement
27
+ requirement: &70148196164960 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ~>
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: '0.3'
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *70316559615440
35
+ version_requirements: *70148196164960
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: will_paginate
38
- requirement: &70316559614840 !ruby/object:Gem::Requirement
38
+ requirement: &70148195673580 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ~>
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: '3.0'
44
44
  type: :runtime
45
45
  prerelease: false
46
- version_requirements: *70316559614840
46
+ version_requirements: *70148195673580
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: chronic
49
- requirement: &70316559614300 !ruby/object:Gem::Requirement
49
+ requirement: &70148195673060 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ~>
@@ -54,10 +54,10 @@ dependencies:
54
54
  version: '0.6'
55
55
  type: :runtime
56
56
  prerelease: false
57
- version_requirements: *70316559614300
57
+ version_requirements: *70148195673060
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: rake
60
- requirement: &70316559613740 !ruby/object:Gem::Requirement
60
+ requirement: &70148195672500 !ruby/object:Gem::Requirement
61
61
  none: false
62
62
  requirements:
63
63
  - - ! '>='
@@ -65,10 +65,10 @@ dependencies:
65
65
  version: '0'
66
66
  type: :development
67
67
  prerelease: false
68
- version_requirements: *70316559613740
68
+ version_requirements: *70148195672500
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: bundler
71
- requirement: &70316559629560 !ruby/object:Gem::Requirement
71
+ requirement: &70148195671960 !ruby/object:Gem::Requirement
72
72
  none: false
73
73
  requirements:
74
74
  - - ! '>='
@@ -76,10 +76,10 @@ dependencies:
76
76
  version: '0'
77
77
  type: :development
78
78
  prerelease: false
79
- version_requirements: *70316559629560
79
+ version_requirements: *70148195671960
80
80
  - !ruby/object:Gem::Dependency
81
81
  name: jeweler
82
- requirement: &70316559629000 !ruby/object:Gem::Requirement
82
+ requirement: &70148195671260 !ruby/object:Gem::Requirement
83
83
  none: false
84
84
  requirements:
85
85
  - - ! '>='
@@ -87,10 +87,10 @@ dependencies:
87
87
  version: '0'
88
88
  type: :development
89
89
  prerelease: false
90
- version_requirements: *70316559629000
90
+ version_requirements: *70148195671260
91
91
  - !ruby/object:Gem::Dependency
92
92
  name: fakeweb
93
- requirement: &70316559628480 !ruby/object:Gem::Requirement
93
+ requirement: &70148195670580 !ruby/object:Gem::Requirement
94
94
  none: false
95
95
  requirements:
96
96
  - - ! '>='
@@ -98,7 +98,7 @@ dependencies:
98
98
  version: '0'
99
99
  type: :development
100
100
  prerelease: false
101
- version_requirements: *70316559628480
101
+ version_requirements: *70148195670580
102
102
  description: Firstfm is a ruby wrapper for the Last.fm APIs ( http://www.last.fm/api
103
103
  ). My main focus is to import events from Last.FM, but with time I will try to add
104
104
  support for all API methods.
@@ -130,6 +130,7 @@ files:
130
130
  - test/fixtures/events.xml
131
131
  - test/fixtures/geo_event.xml
132
132
  - test/fixtures/geo_events.xml
133
+ - test/fixtures/geo_get_metro_artist_chart.xml
133
134
  - test/fixtures/get_images.xml
134
135
  - test/fixtures/top_tracks.xml
135
136
  - test/fixtures/tracks.xml
@@ -155,7 +156,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
155
156
  version: '0'
156
157
  segments:
157
158
  - 0
158
- hash: -1914032172643315318
159
+ hash: -2622509673387367243
159
160
  required_rubygems_version: !ruby/object:Gem::Requirement
160
161
  none: false
161
162
  requirements: