scrobbler-ng 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (156) hide show
  1. data/.gitignore +11 -0
  2. data/MIT-LICENSE +19 -0
  3. data/README.rdoc +104 -0
  4. data/Rakefile +11 -0
  5. data/VERSION.yml +4 -0
  6. data/examples/album.rb +19 -0
  7. data/examples/artist.rb +13 -0
  8. data/examples/scrobble.rb +31 -0
  9. data/examples/tag.rb +11 -0
  10. data/examples/track.rb +6 -0
  11. data/examples/user.rb +14 -0
  12. data/lib/scrobbler/album.rb +165 -0
  13. data/lib/scrobbler/artist.rb +169 -0
  14. data/lib/scrobbler/auth.rb +47 -0
  15. data/lib/scrobbler/base.rb +124 -0
  16. data/lib/scrobbler/event.rb +105 -0
  17. data/lib/scrobbler/geo.rb +27 -0
  18. data/lib/scrobbler/helper/image.rb +52 -0
  19. data/lib/scrobbler/helper/streamable.rb +40 -0
  20. data/lib/scrobbler/library.rb +123 -0
  21. data/lib/scrobbler/playing.rb +49 -0
  22. data/lib/scrobbler/playlist.rb +45 -0
  23. data/lib/scrobbler/radio.rb +12 -0
  24. data/lib/scrobbler/rest.rb +47 -0
  25. data/lib/scrobbler/scrobble.rb +116 -0
  26. data/lib/scrobbler/session.rb +9 -0
  27. data/lib/scrobbler/shout.rb +21 -0
  28. data/lib/scrobbler/simpleauth.rb +60 -0
  29. data/lib/scrobbler/tag.rb +113 -0
  30. data/lib/scrobbler/track.rb +138 -0
  31. data/lib/scrobbler/user.rb +222 -0
  32. data/lib/scrobbler/venue.rb +67 -0
  33. data/lib/scrobbler.rb +34 -0
  34. data/tasks/jeweler.rake +18 -0
  35. data/tasks/rdoc.rake +7 -0
  36. data/tasks/tests.rake +13 -0
  37. data/tasks/yardoc.rake +8 -0
  38. data/test/fixtures/xml/album/info.xml +43 -0
  39. data/test/fixtures/xml/artist/fans.xml +52 -0
  40. data/test/fixtures/xml/artist/info.xml +58 -0
  41. data/test/fixtures/xml/artist/similar.xml +1004 -0
  42. data/test/fixtures/xml/artist/topalbums.xml +61 -0
  43. data/test/fixtures/xml/artist/toptags.xml +19 -0
  44. data/test/fixtures/xml/artist/toptracks.xml +62 -0
  45. data/test/fixtures/xml/auth/session.xml +7 -0
  46. data/test/fixtures/xml/auth/token.xml +3 -0
  47. data/test/fixtures/xml/event/attend.xml +3 -0
  48. data/test/fixtures/xml/event/attendees.xml +53 -0
  49. data/test/fixtures/xml/event/event.xml +35 -0
  50. data/test/fixtures/xml/event/shouts.xml +35 -0
  51. data/test/fixtures/xml/geo/events-distance-p1.xml +151 -0
  52. data/test/fixtures/xml/geo/events-lat-long.xml +167 -0
  53. data/test/fixtures/xml/geo/events-p1.xml +152 -0
  54. data/test/fixtures/xml/geo/events-p2.xml +380 -0
  55. data/test/fixtures/xml/geo/events-p3.xml +427 -0
  56. data/test/fixtures/xml/geo/top_artists-p1.xml +76 -0
  57. data/test/fixtures/xml/geo/top_tracks-p1.xml +77 -0
  58. data/test/fixtures/xml/library/albums-f30.xml +454 -0
  59. data/test/fixtures/xml/library/albums-p1.xml +754 -0
  60. data/test/fixtures/xml/library/albums-p2.xml +754 -0
  61. data/test/fixtures/xml/library/albums-p3.xml +754 -0
  62. data/test/fixtures/xml/library/albums-p4.xml +739 -0
  63. data/test/fixtures/xml/library/albums-p5.xml +754 -0
  64. data/test/fixtures/xml/library/albums-p6.xml +754 -0
  65. data/test/fixtures/xml/library/albums-p7.xml +739 -0
  66. data/test/fixtures/xml/library/albums-p8.xml +724 -0
  67. data/test/fixtures/xml/library/artists-f30.xml +334 -0
  68. data/test/fixtures/xml/library/artists-p1.xml +554 -0
  69. data/test/fixtures/xml/library/artists-p2.xml +554 -0
  70. data/test/fixtures/xml/library/artists-p3.xml +554 -0
  71. data/test/fixtures/xml/library/artists-p4.xml +554 -0
  72. data/test/fixtures/xml/library/artists-p5.xml +554 -0
  73. data/test/fixtures/xml/library/artists-p6.xml +554 -0
  74. data/test/fixtures/xml/library/artists-p7.xml +444 -0
  75. data/test/fixtures/xml/library/tracks-f30.xml +472 -0
  76. data/test/fixtures/xml/library/tracks-p1.xml +789 -0
  77. data/test/fixtures/xml/library/tracks-p10.xml +771 -0
  78. data/test/fixtures/xml/library/tracks-p11.xml +792 -0
  79. data/test/fixtures/xml/library/tracks-p12.xml +777 -0
  80. data/test/fixtures/xml/library/tracks-p13.xml +762 -0
  81. data/test/fixtures/xml/library/tracks-p14.xml +759 -0
  82. data/test/fixtures/xml/library/tracks-p15.xml +762 -0
  83. data/test/fixtures/xml/library/tracks-p16.xml +756 -0
  84. data/test/fixtures/xml/library/tracks-p17.xml +780 -0
  85. data/test/fixtures/xml/library/tracks-p18.xml +756 -0
  86. data/test/fixtures/xml/library/tracks-p19.xml +774 -0
  87. data/test/fixtures/xml/library/tracks-p2.xml +765 -0
  88. data/test/fixtures/xml/library/tracks-p20.xml +777 -0
  89. data/test/fixtures/xml/library/tracks-p21.xml +777 -0
  90. data/test/fixtures/xml/library/tracks-p22.xml +771 -0
  91. data/test/fixtures/xml/library/tracks-p23.xml +765 -0
  92. data/test/fixtures/xml/library/tracks-p24.xml +783 -0
  93. data/test/fixtures/xml/library/tracks-p25.xml +777 -0
  94. data/test/fixtures/xml/library/tracks-p26.xml +777 -0
  95. data/test/fixtures/xml/library/tracks-p27.xml +756 -0
  96. data/test/fixtures/xml/library/tracks-p28.xml +771 -0
  97. data/test/fixtures/xml/library/tracks-p29.xml +753 -0
  98. data/test/fixtures/xml/library/tracks-p3.xml +771 -0
  99. data/test/fixtures/xml/library/tracks-p30.xml +780 -0
  100. data/test/fixtures/xml/library/tracks-p31.xml +753 -0
  101. data/test/fixtures/xml/library/tracks-p32.xml +771 -0
  102. data/test/fixtures/xml/library/tracks-p33.xml +762 -0
  103. data/test/fixtures/xml/library/tracks-p34.xml +538 -0
  104. data/test/fixtures/xml/library/tracks-p4.xml +792 -0
  105. data/test/fixtures/xml/library/tracks-p5.xml +780 -0
  106. data/test/fixtures/xml/library/tracks-p6.xml +789 -0
  107. data/test/fixtures/xml/library/tracks-p7.xml +789 -0
  108. data/test/fixtures/xml/library/tracks-p8.xml +780 -0
  109. data/test/fixtures/xml/library/tracks-p9.xml +774 -0
  110. data/test/fixtures/xml/tag/similar.xml +254 -0
  111. data/test/fixtures/xml/tag/topalbums.xml +805 -0
  112. data/test/fixtures/xml/tag/topartists.xml +605 -0
  113. data/test/fixtures/xml/tag/toptags.xml +1254 -0
  114. data/test/fixtures/xml/tag/toptracks.xml +852 -0
  115. data/test/fixtures/xml/track/fans.xml +34 -0
  116. data/test/fixtures/xml/track/info.xml +53 -0
  117. data/test/fixtures/xml/track/toptags.xml +504 -0
  118. data/test/fixtures/xml/user/events.xml +401 -0
  119. data/test/fixtures/xml/user/friends.xml +30 -0
  120. data/test/fixtures/xml/user/lovedtracks.xml +678 -0
  121. data/test/fixtures/xml/user/neighbours.xml +23 -0
  122. data/test/fixtures/xml/user/playlists.xml +61 -0
  123. data/test/fixtures/xml/user/profile.xml +12 -0
  124. data/test/fixtures/xml/user/recentbannedtracks.xml +24 -0
  125. data/test/fixtures/xml/user/recentlovedtracks.xml +24 -0
  126. data/test/fixtures/xml/user/recenttracks.xml +124 -0
  127. data/test/fixtures/xml/user/systemrecs.xml +18 -0
  128. data/test/fixtures/xml/user/topalbums.xml +61 -0
  129. data/test/fixtures/xml/user/topartists.xml +41 -0
  130. data/test/fixtures/xml/user/toptags.xml +44 -0
  131. data/test/fixtures/xml/user/toptracks.xml +65 -0
  132. data/test/fixtures/xml/user/weeklyalbumchart.xml +256 -0
  133. data/test/fixtures/xml/user/weeklyartistchart.xml +220 -0
  134. data/test/fixtures/xml/user/weeklytrackchart.xml +746 -0
  135. data/test/fixtures/xml/venue/events.xml +151 -0
  136. data/test/fixtures/xml/venue/venue.xml +16 -0
  137. data/test/mocks/rest.rb +212 -0
  138. data/test/spec_helper.rb +7 -0
  139. data/test/test_helper.rb +20 -0
  140. data/test/unit/album_spec.rb +51 -0
  141. data/test/unit/artist_spec.rb +130 -0
  142. data/test/unit/auth_spec.rb +36 -0
  143. data/test/unit/event_spec.rb +109 -0
  144. data/test/unit/geo_spec.rb +148 -0
  145. data/test/unit/library_spec.rb +133 -0
  146. data/test/unit/playing_test.rb +53 -0
  147. data/test/unit/playlist_spec.rb +25 -0
  148. data/test/unit/radio_spec.rb +22 -0
  149. data/test/unit/scrobble_spec.rb +55 -0
  150. data/test/unit/scrobble_test.rb +69 -0
  151. data/test/unit/simpleauth_test.rb +45 -0
  152. data/test/unit/tag_spec.rb +101 -0
  153. data/test/unit/track_spec.rb +95 -0
  154. data/test/unit/user_spec.rb +264 -0
  155. data/test/unit/venue_spec.rb +104 -0
  156. metadata +253 -0
@@ -0,0 +1,67 @@
1
+ module Scrobbler
2
+ class Venue < Base
3
+ attr_accessor :name, :city, :country, :street, :postalcode
4
+ attr_accessor :geo_lat, :geo_long, :timezone, :url, :id
5
+
6
+ class << self
7
+ def new_from_xml(xml)
8
+ data = {}
9
+ xml.children.each do |child|
10
+ data[:name] = child.content if child.name == 'name'
11
+ data[:id] = child.content.to_i if child.name == 'id'
12
+ data[:url] = child.content if child.name == 'url'
13
+
14
+ if child.name == 'location'
15
+ child.children.each do |location_element|
16
+ data[:city] = location_element.content if location_element.name == 'city'
17
+ data[:country] = location_element.content if location_element.name == 'country'
18
+ data[:street] = location_element.content if location_element.name == 'street'
19
+ data[:postalcode] = location_element.content if location_element.name == 'postalcode'
20
+ data[:timezone] = location_element.content if location_element.name == 'timezone'
21
+
22
+ if location_element.name == 'point' || location_element.name == 'geo:point'
23
+ location_element.children.each do |geo_element|
24
+ data[:geo_lat] = geo_element.content if ['lat', 'geo:lat'].include?(geo_element.name)
25
+ data[:geo_long] = geo_element.content if ['long', 'geo:long'].include?(geo_element.name)
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
31
+
32
+ if data.has_key?(:url) && !data.has_key?(:id)
33
+ data[:id] = id_from_url(data[:url])
34
+ end
35
+
36
+ Venue.new(data[:name], data)
37
+ end
38
+
39
+ # this retrives the venue ID from
40
+ # the venue because the venue
41
+ # ID is not supplied
42
+ # in the XML apart from
43
+ # in the venue URL
44
+ def id_from_url(url)
45
+ url[url.rindex('/')+1,url.length].to_i
46
+ end
47
+
48
+ def search(venue, force=false)
49
+ get_response('venue.search', :venuematches, 'venuematches', 'venue', {'venue'=>venue}, force)
50
+ end
51
+ end
52
+
53
+ def initialize(name,data = {})
54
+ raise ArgumentError if name.empty?
55
+ @name = name
56
+ populate_data(data)
57
+ end
58
+
59
+ def events(force=false)
60
+ get_response('venue.getevents', :events, 'events', 'event', {'venue'=>@id}, force)
61
+ end
62
+
63
+ def past_events(force=false)
64
+ get_response('venue.getpastevents', :events, 'events', 'event', {'venue'=>@id}, force)
65
+ end
66
+ end
67
+ end
data/lib/scrobbler.rb ADDED
@@ -0,0 +1,34 @@
1
+
2
+ %w{uri rubygems libxml time}.each { |x| require x }
3
+ require 'digest/md5'
4
+
5
+ $: << File.expand_path(File.dirname(__FILE__))
6
+
7
+ # Load base class
8
+ require 'scrobbler/base'
9
+
10
+ # Load helper modules
11
+ require 'scrobbler/helper/image'
12
+ require 'scrobbler/helper/streamable'
13
+
14
+ require 'scrobbler/album'
15
+ require 'scrobbler/artist'
16
+ require 'scrobbler/event'
17
+ require 'scrobbler/shout'
18
+ require 'scrobbler/venue'
19
+ require 'scrobbler/geo'
20
+ require 'scrobbler/user'
21
+ require 'scrobbler/session'
22
+ require 'scrobbler/tag'
23
+ require 'scrobbler/track'
24
+
25
+ require 'scrobbler/auth'
26
+ require 'scrobbler/library'
27
+ require 'scrobbler/playlist'
28
+ require 'scrobbler/radio'
29
+
30
+ require 'scrobbler/simpleauth'
31
+ require 'scrobbler/scrobble'
32
+ require 'scrobbler/playing'
33
+
34
+ require 'scrobbler/rest'
@@ -0,0 +1,18 @@
1
+ begin
2
+ require 'jeweler'
3
+ Jeweler::Tasks.new do |s|
4
+ s.name = "scrobbler-ng"
5
+ s.summary = "A ruby library for accessing the last.fm v2 webservices"
6
+ s.email = "uwelk@xhochy.org"
7
+ s.homepage = "http://github.com/xhochy/scrobbler"
8
+ s.description = "A ruby library for accessing the last.fm v2 webservices"
9
+ s.authors = ['John Nunemaker', 'Jonathan Rudenberg', 'Uwe L. Korn']
10
+ if RUBY_PLATFORM =~ /\bjava\b/
11
+ s.add_dependency 'libxml-jruby'
12
+ else
13
+ s.add_dependency 'libxml-ruby'
14
+ end
15
+ end
16
+ rescue LoadError
17
+ puts "Jeweler not available. Install it with: sudo gem install technicalpickles-jeweler -s http://gems.github.com"
18
+ end
data/tasks/rdoc.rake ADDED
@@ -0,0 +1,7 @@
1
+ Rake::RDocTask.new do |rdoc|
2
+ rdoc.rdoc_dir = 'rdoc'
3
+ rdoc.title = 'scrobbler-ng'
4
+ rdoc.options << '--line-numbers' << '--inline-source'
5
+ rdoc.rdoc_files.include('README*')
6
+ rdoc.rdoc_files.include('lib/**/*.rb')
7
+ end
data/tasks/tests.rake ADDED
@@ -0,0 +1,13 @@
1
+ desc "Run all tests"
2
+ Spec::Rake::SpecTask.new('test:unit') do |t|
3
+ begin
4
+ require 'rcov'
5
+ t.rcov = true
6
+ t.rcov_opts = ['--exclude', '/var/lib/gems']
7
+ rescue LoadError
8
+ t.rcov = false
9
+ end
10
+ t.spec_opts << '--format' << 'html:spec.html'
11
+ t.spec_opts << '--format' << 'progress'
12
+ t.spec_files = FileList['test/unit/*_spec.rb']
13
+ end
data/tasks/yardoc.rake ADDED
@@ -0,0 +1,8 @@
1
+ begin
2
+ require 'yard'
3
+ YARD::Rake::YardocTask.new do |t|
4
+ t.files = ['lib/**/*.rb'] # optional
5
+ end
6
+ rescue LoadError
7
+ puts "YARD not available. Install it with: sudo gem install yard"
8
+ end
@@ -0,0 +1,43 @@
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <lfm status="ok">
3
+ <album>
4
+ <name>Some Hearts</name>
5
+ <artist>Carrie Underwood</artist>
6
+ <id>2317937</id>
7
+ <mbid>a33b9822-9f09-4e19-9d6e-e05af85c727b</mbid>
8
+ <url>http://www.last.fm/music/Carrie+Underwood/Some+Hearts</url>
9
+ <releasedate> 15 Nov 2005, 00:00</releasedate>
10
+ <image size="small">http://userserve-ak.last.fm/serve/34s/19874169.jpg</image>
11
+ <image size="medium">http://userserve-ak.last.fm/serve/64s/19874169.jpg</image>
12
+ <image size="large">http://userserve-ak.last.fm/serve/174s/19874169.jpg</image>
13
+ <image size="extralarge">http://userserve-ak.last.fm/serve/300x300/19874169.jpg</image>
14
+ <listeners>131312</listeners>
15
+ <playcount>2096260</playcount>
16
+ <toptags>
17
+ <tag>
18
+ <name>country</name>
19
+ <url>http://www.last.fm/tag/country</url>
20
+ </tag>
21
+ <tag>
22
+ <name>albums i own</name>
23
+ <url>http://www.last.fm/tag/albums%20i%20own</url>
24
+ </tag>
25
+ <tag>
26
+ <name>pop</name>
27
+ <url>http://www.last.fm/tag/pop</url>
28
+ </tag>
29
+ <tag>
30
+ <name>country pop</name>
31
+ <url>http://www.last.fm/tag/country%20pop</url>
32
+ </tag>
33
+ <tag>
34
+ <name>american idol</name>
35
+ <url>http://www.last.fm/tag/american%20idol</url>
36
+ </tag>
37
+ </toptags>
38
+ <wiki>
39
+ <published>Thu, 8 Jan 2009 17:10:24 +0000</published>
40
+ <summary><![CDATA[Some Hearts is the debut album from fourth-season American Idol winner Carrie Underwood, released in the United States on November 15, 2005. It has been certified seven times platinum in the U.S. (RIAA) and three times platinum in Canada (CRIA). On December 4, 2006, Some Hearts was named the number-one selling album of the year in all genres at the Billboard Music Awards. It is also the best selling debut album by a solo female country music artist in history. ]]></summary>
41
+ <content><![CDATA[Some Hearts is the debut album from fourth-season American Idol winner Carrie Underwood, released in the United States on November 15, 2005. It has been certified seven times platinum in the U.S. (RIAA) and three times platinum in Canada (CRIA). On December 4, 2006, Some Hearts was named the number-one selling album of the year in all genres at the Billboard Music Awards. It is also the best selling debut album by a solo female country music artist in history.
42
 
1
43
  As of July 3, 2008, the album is no longer present nor eligible to appear on the U.S. Billboard 200. It had a run of 136 weeks, the second-longest for any album released in 2005, behind Nickelback's All the Right Reasons. The following week, it dropped out of the Top Country Albums Chart, having had a 137 week run. It is currently active on the Pop Catalog Chart. It has sold 6,630,000 copies in the U.S. to date.
2
44
  Some Hearts was the highest selling country album in the U.S. in both 2006 and 2007. The album now certified 7x Platinum and is the best-selling debut album for a female country artist.
3
45
 
4
46
 
5
47
 
6
48
  Track listing
7
49
  1. &quot;Wasted&quot; (Troy Verges, Marv Green, Hillary Lindsey) – 4:34
8
50
  2. &quot;Don't Forget to Remember Me&quot; (Morgane Hayes, Kelley Lovelace, Ashley Gorley) – 4:00
9
51
  3. &quot;Some Hearts&quot; (Diane Warren) – 3:48
10
52
  4. &quot;Jesus, Take the Wheel&quot; (Brett James, Lindsey, Gordie Sampson) – 3:46
11
53
  5. &quot;The Night Before (Life Goes On)&quot; (Wendell Mobley, Neil Thrasher, Jimmy Olander) – 3:54
12
54
  6. &quot;Lessons Learned&quot; (Warren) – 4:09
13
55
  7. &quot;Before He Cheats&quot; (Chris Tompkins, Josh Kear) – 3:19
14
56
  8. &quot;Starts with Goodbye&quot; (Angelo, Lindsey) – 4:06
15
57
  9. &quot;I Just Can't Live a Lie&quot; (Steve Robson, Wayne Hector) – 3:59
16
58
  10. &quot;We're Young and Beautiful&quot; (Rivers Rutherford, Steve McEwan) – 3:53
17
59
  11. &quot;That's Where It Is&quot; (Melissa Peirce, Robson, Greg Becker) – 3:35
18
60
  12. &quot;Whenever You Remember&quot; (Warren) – 3:47
19
61
  13. &quot;I Ain't in Checotah Anymore&quot; (Carrie Underwood, Trey Bruce, Angelo) – 3:21
20
62
  14. &quot;Inside Your Heaven&quot; (Andreas Carlsson, Pelle Nyhlén, Savan Kotecha) – 3:45 (bonus track) ]]></content>
63
+ </wiki>
64
+ </album></lfm>
@@ -0,0 +1,52 @@
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <lfm status="ok">
3
+ <topfans artist="Metallica">
4
+ <user>
5
+ <name>Slide15</name>
6
+ <url>http://www.last.fm/user/Slide15</url>
7
+ <image size="small">http://userserve-ak.last.fm/serve/34/4477633.jpg</image>
8
+ <image size="medium">http://userserve-ak.last.fm/serve/64/4477633.jpg</image>
9
+ <image size="large">http://userserve-ak.last.fm/serve/126/4477633.jpg</image>
10
+ <weight>265440672</weight>
11
+ </user>
12
+ <user>
13
+ <name>Air_Force</name>
14
+ <url>http://www.last.fm/user/Air_Force</url>
15
+ <image size="small">http://userserve-ak.last.fm/serve/34/8191119.jpg</image>
16
+ <image size="medium">http://userserve-ak.last.fm/serve/64/8191119.jpg</image>
17
+ <image size="large">http://userserve-ak.last.fm/serve/126/8191119.jpg</image>
18
+ <weight>233280000</weight>
19
+ </user>
20
+ <user>
21
+ <name>Evile9</name>
22
+ <url>http://www.last.fm/user/Evile9</url>
23
+ <image size="small">http://userserve-ak.last.fm/serve/34/18665765.jpg</image>
24
+ <image size="medium">http://userserve-ak.last.fm/serve/64/18665765.jpg</image>
25
+ <image size="large">http://userserve-ak.last.fm/serve/126/18665765.jpg</image>
26
+ <weight>224640448</weight>
27
+ </user>
28
+ <user>
29
+ <name>thy_satan</name>
30
+ <url>http://www.last.fm/user/thy_satan</url>
31
+ <image size="small">http://userserve-ak.last.fm/serve/34/1832263.jpg</image>
32
+ <image size="medium">http://userserve-ak.last.fm/serve/64/1832263.jpg</image>
33
+ <image size="large">http://userserve-ak.last.fm/serve/126/1832263.jpg</image>
34
+ <weight>176333328</weight>
35
+ </user>
36
+ <user>
37
+ <name>Aiham</name>
38
+ <url>http://www.last.fm/user/Aiham</url>
39
+ <image size="small">http://userserve-ak.last.fm/serve/34/1209256.jpg</image>
40
+ <image size="medium">http://userserve-ak.last.fm/serve/64/1209256.jpg</image>
41
+ <image size="large">http://userserve-ak.last.fm/serve/126/1209256.jpg</image>
42
+ <weight>153124992</weight>
43
+ </user>
44
+ <user>
45
+ <name>Quugel</name>
46
+ <url>http://www.last.fm/user/Quugel</url>
47
+ <image size="small">http://userserve-ak.last.fm/serve/34/2614780.png</image>
48
+ <image size="medium">http://userserve-ak.last.fm/serve/64/2614780.png</image>
49
+ <image size="large">http://userserve-ak.last.fm/serve/126/2614780.png</image>
50
+ <weight>141551040</weight>
51
+ </user>
52
+ </topfans></lfm>
@@ -0,0 +1,58 @@
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <lfm status="ok">
3
+ <artist>
4
+ <name>Cher</name>
5
+ <mbid>bfcc6d75-a6a5-4bc6-8282-47aec8531818</mbid>
6
+ <url>http://www.last.fm/music/Cher</url>
7
+ <image size="small">http://userserve-ak.last.fm/serve/34/9137697.jpg</image>
8
+ <image size="medium">http://userserve-ak.last.fm/serve/64/9137697.jpg</image>
9
+ <image size="large">http://userserve-ak.last.fm/serve/126/9137697.jpg</image>
10
+ <streamable>1</streamable>
11
+ <stats>
12
+ <listeners>383775</listeners>
13
+ <playcount>3141583</playcount>
14
+ </stats>
15
+
16
+ <similar>
17
+ <artist>
18
+ <name>Sonny &amp; Cher</name>
19
+ <url>http://www.last.fm/music/Sonny%2B%2526%2BCher</url>
20
+ <image size="small">http://userserve-ak.last.fm/serve/34/4987379.jpg</image>
21
+ <image size="medium">http://userserve-ak.last.fm/serve/64/4987379.jpg></image>
22
+ <image size="large">http://userserve-ak.last.fm/serve/126/4987379.jpg</image>
23
+ </artist>
24
+ <artist>
25
+ <name>Cyndi Lauper</name>
26
+ <url>http://www.last.fm/music/Cyndi+Lauper</url>
27
+ <image size="small">http://userserve-ak.last.fm/serve/34/6967243.jpg</image>
28
+ <image size="medium">http://userserve-ak.last.fm/serve/64/6967243.jpg></image>
29
+ <image size="large">http://userserve-ak.last.fm/serve/126/6967243.jpg</image>
30
+ </artist>
31
+ <artist>
32
+ <name>Madonna</name>
33
+ <url>http://www.last.fm/music/Madonna</url>
34
+ <image size="small">http://userserve-ak.last.fm/serve/34/12913295.jpg</image>
35
+ <image size="medium">http://userserve-ak.last.fm/serve/64/12913295.jpg></image>
36
+ <image size="large">http://userserve-ak.last.fm/serve/126/12913295.jpg</image>
37
+ </artist>
38
+ <artist>
39
+ <name>Tina Turner</name>
40
+ <url>http://www.last.fm/music/Tina+Turner</url>
41
+ <image size="small">http://userserve-ak.last.fm/serve/34/2480149.jpg</image>
42
+ <image size="medium">http://userserve-ak.last.fm/serve/64/2480149.jpg></image>
43
+ <image size="large">http://userserve-ak.last.fm/serve/126/2480149.jpg</image>
44
+ </artist>
45
+ <artist>
46
+ <name>Céline Dion</name>
47
+ <url>http://www.last.fm/music/C%C3%A9line+Dion</url>
48
+ <image size="small">http://userserve-ak.last.fm/serve/34/11218127.jpg</image>
49
+ <image size="medium">http://userserve-ak.last.fm/serve/64/11218127.jpg></image>
50
+ <image size="large">http://userserve-ak.last.fm/serve/126/11218127.jpg</image>
51
+ </artist>
52
+ </similar>
53
+ <bio>
54
+ <published>Fri, 5 Dec 2008 19:55:12 +0000</published>
55
+ <summary><![CDATA[Cher (born Cherilyn Sarkisian on May 20, 1946, later adopted by Gilbert LaPierre.) is an American singer, actress, songwriter, author and entertainer. Among her many career accomplishments in music, television and film, she has won an Academy Award, a Grammy Award, an Emmy Award and three Golden Globe Awards among others. Cher first rose to prominence in 1965 as one half of the pop/rock duo Sonny &amp; Cher.]]></summary>
56
+ <content><![CDATA[Cher (born Cherilyn Sarkisian on May 20, 1946, later adopted by Gilbert LaPierre.) is an American singer, actress, songwriter, author and entertainer. Among her many career accomplishments in music, television and film, she has won an Academy Award, a Grammy Award, an Emmy Award and three Golden Globe Awards among others.
57
 
1
58
  Cher first rose to prominence in 1965 as one half of the pop/rock duo Sonny &amp; Cher. She also established herself as a solo recording artist, releasing 25 albums, contributing to numerous compilations, and tallying 34 Billboard Top 40 entries over her career, both solo and with Sonny. These include eighteen Top 10 singles and five number one singles (four solo). Cher has had 16 top ten hits in the UK between 1965 and 2003, four of which reached number one (two solo, one with Sonny, one as part of a charity single).
2
59
 
3
60
  She became a television star in the 1970s and a film actress in the 1980s. In 1987, she won the Academy Award for Best Actress for her role in the romantic comedy Moonstruck.
4
61
 
5
62
  In a career surpassing 40 years, Cher has been described as an enduring pop icon and one of the most popular female artists in music history. Since her debut in 1964, Cher has sold as a solo artist over 100 million records worldwide and an estimated 70 million singles and with duo Sonny and Cher over 75 million records becoming one of the biggest-selling artists of all time.
6
63
 
7
64
 
8
65
 
9
66
  During 2007, in the seventh volume of Chrome Hearts, Cher once again confirmed that she is working on her twenty-sixth studio album. No recordings have taken place as of yet, and no release date had been scheduled.
10
67
 
11
68
  It is rumoured that Cher will collaborate with Timbaland in a song for his next album Shock Value II, which will also feature Gwen Stefani, Madonna, Dido and Christina Aguilera. This album is expected to be released in November 2008.
12
69
 
13
70
  On February 7, 2008 Cher, at 61, announced that she had reached a deal to perform 200 shows over three years live at the Colosseum at Caesars Palace in Las Vegas. Her new show, entitled Cher at the Colosseum, will debut on May 6, 2008. [36] The show reportedly includes 18 dancers, 4 aerielists, and multiple costumes designed by Bob Mackie. Choreography will be directed by Doriana Sanchez who also worked with Cher on her past three major tours. Her show will perform four nights a week for a month, and a second leg of the show will continue in August. Cher will share the stage on a rotating basis with contemporaries Bette Midler (whose The Showgirl Must Go On opened on February 20, 2008) and Elton John (whose The Red Piano which opened in 2004, will continues its run of about 50 shows a year).
14
71
 
15
72
  On February 10, 2008, Cher made a brief appearance at the Grammy Awards, introducing a performance by Tina Turner and Beyonce Knowles.
16
73
 
17
74
  Los Angeles]]></content>
75
+ </bio>
76
+ </artist></lfm>