firstfm 0.2.3 → 0.3.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.
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: