shortwave 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (105) hide show
  1. data/.document +5 -0
  2. data/.gitignore +10 -0
  3. data/.gitmodules +3 -0
  4. data/LICENSE +20 -0
  5. data/README.rdoc +74 -0
  6. data/Rakefile +133 -0
  7. data/VERSION +1 -0
  8. data/lib/shortwave.rb +12 -0
  9. data/lib/shortwave/authentication.rb +107 -0
  10. data/lib/shortwave/facade.rb +3 -0
  11. data/lib/shortwave/facade/build/facade_builder.rb +199 -0
  12. data/lib/shortwave/facade/build/facade_template.erb +17 -0
  13. data/lib/shortwave/facade/lastfm.rb +878 -0
  14. data/lib/shortwave/facade/remote.rb +86 -0
  15. data/lib/shortwave/model/album.rb +33 -0
  16. data/lib/shortwave/model/artist.rb +62 -0
  17. data/lib/shortwave/model/base_model.rb +112 -0
  18. data/lib/shortwave/model/chart_dates.rb +15 -0
  19. data/lib/shortwave/model/comparison.rb +15 -0
  20. data/lib/shortwave/model/event.rb +55 -0
  21. data/lib/shortwave/model/group.rb +26 -0
  22. data/lib/shortwave/model/location.rb +45 -0
  23. data/lib/shortwave/model/playlist.rb +36 -0
  24. data/lib/shortwave/model/shout.rb +21 -0
  25. data/lib/shortwave/model/tag.rb +47 -0
  26. data/lib/shortwave/model/track.rb +71 -0
  27. data/lib/shortwave/model/user.rb +70 -0
  28. data/lib/shortwave/model/venue.rb +37 -0
  29. data/lib/shortwave/model/weekly_charts.rb +31 -0
  30. data/lib/shortwave/providers.rb +161 -0
  31. data/shortwave.gemspec +178 -0
  32. data/test/authentication_test.rb +64 -0
  33. data/test/build/build_test.rb +25 -0
  34. data/test/build/data/intro.yml +2 -0
  35. data/test/build/data/screens/album_addTags.html +1238 -0
  36. data/test/build/data/screens/intro_truncated.html +426 -0
  37. data/test/build/data/screens/tasteometer_compare.html +1274 -0
  38. data/test/build/data/screens/user_getLovedTracks.html +1278 -0
  39. data/test/build/data/screens/venue_search.html +1261 -0
  40. data/test/build/facade_builder_test.rb +23 -0
  41. data/test/build/parameter_test.rb +43 -0
  42. data/test/build/remote_method_test.rb +47 -0
  43. data/test/build/ruby_class_test.rb +12 -0
  44. data/test/build/ruby_method_test.rb +137 -0
  45. data/test/helper.rb +35 -0
  46. data/test/model/album_test.rb +62 -0
  47. data/test/model/artist_test.rb +103 -0
  48. data/test/model/chart_dates_test.rb +11 -0
  49. data/test/model/comparison_test.rb +18 -0
  50. data/test/model/data/album_info.xml +38 -0
  51. data/test/model/data/album_search.xml +210 -0
  52. data/test/model/data/artist_info.xml +58 -0
  53. data/test/model/data/artist_search.xml +109 -0
  54. data/test/model/data/artist_shouts.xml +546 -0
  55. data/test/model/data/artist_top_fans.xml +405 -0
  56. data/test/model/data/event_info.xml +47 -0
  57. data/test/model/data/group_members.xml +242 -0
  58. data/test/model/data/group_weekly_album_chart.xml +1754 -0
  59. data/test/model/data/group_weekly_artist_chart.xml +604 -0
  60. data/test/model/data/group_weekly_track_chart.xml +1005 -0
  61. data/test/model/data/location_events.xml +383 -0
  62. data/test/model/data/ok.xml +2 -0
  63. data/test/model/data/playlist_fetch.xml +227 -0
  64. data/test/model/data/tag_search.xml +110 -0
  65. data/test/model/data/tag_similar.xml +254 -0
  66. data/test/model/data/tag_top_albums.xml +805 -0
  67. data/test/model/data/tag_top_artists.xml +605 -0
  68. data/test/model/data/tag_top_tags.xml +1254 -0
  69. data/test/model/data/tag_top_tracks.xml +843 -0
  70. data/test/model/data/tag_weekly_chart_list.xml +57 -0
  71. data/test/model/data/tasteometer_compare.xml +54 -0
  72. data/test/model/data/track_info.xml +53 -0
  73. data/test/model/data/track_search.xml +195 -0
  74. data/test/model/data/user_chartlist.xml +90 -0
  75. data/test/model/data/user_info.xml +16 -0
  76. data/test/model/data/user_neighbours.xml +484 -0
  77. data/test/model/data/user_playlists.xml +17 -0
  78. data/test/model/data/user_recent_tracks.xml +124 -0
  79. data/test/model/data/user_recommended_artists.xml +454 -0
  80. data/test/model/data/user_shouts.xml +9 -0
  81. data/test/model/data/user_weekly_artist_chart.xml +478 -0
  82. data/test/model/data/venue_events.xml +556 -0
  83. data/test/model/data/venue_past_events.xml +1778 -0
  84. data/test/model/data/venue_search.xml +355 -0
  85. data/test/model/event_test.rb +63 -0
  86. data/test/model/group_test.rb +45 -0
  87. data/test/model/location_test.rb +25 -0
  88. data/test/model/playlist_test.rb +51 -0
  89. data/test/model/shout_test.rb +23 -0
  90. data/test/model/tag_test.rb +39 -0
  91. data/test/model/track_test.rb +67 -0
  92. data/test/model/user_test.rb +125 -0
  93. data/test/model/venue_test.rb +60 -0
  94. data/test/provider/album_provider_test.rb +26 -0
  95. data/test/provider/artist_provider_test.rb +25 -0
  96. data/test/provider/group_provider_test.rb +9 -0
  97. data/test/provider/location_provider_test.rb +9 -0
  98. data/test/provider/playlist_provider_test.rb +12 -0
  99. data/test/provider/tag_provider_test.rb +24 -0
  100. data/test/provider/track_provider_test.rb +26 -0
  101. data/test/provider/user_provider_test.rb +11 -0
  102. data/test/provider/venue_provider_test.rb +15 -0
  103. data/test/provider_test_helper.rb +27 -0
  104. data/test/remote_test.rb +26 -0
  105. metadata +209 -0
@@ -0,0 +1,1278 @@
1
+ <!DOCTYPE HTML>
2
+ <html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head profile="http://purl.org/uF/2008/03/">
3
+
4
+
5
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
6
+ <title>user.getLovedTracks Web Service – Last.fm</title>
7
+ <meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7">
8
+
9
+ <link rel="search" type="application/opensearchdescription+xml" href="http://cdn.last.fm/opensearch_desc.xml" title="Last.fm">
10
+ <meta name="description" content="The world’s largest online music catalogue, with free music streaming, videos, photos, lyrics, charts, artist biographies, concerts and internet radio.">
11
+ <meta http-equiv="content-language" content="en">
12
+ <meta name="robots" content="NOODP">
13
+
14
+ <link rel="icon" href="http://cdn.last.fm/flatness/favicon.2.ico">
15
+ <link rel="icon" type="image/png" href="http://cdn.last.fm/flatness/favicon.2.png">
16
+ <link rel="apple-touch-icon" href="http://cdn.last.fm/flatness/apple-touch-icon.png">
17
+
18
+
19
+
20
+ <link type="text/html" rel="alternate" hreflang="de" href="http://www.lastfm.de/api/show?service=329">
21
+ <link type="text/html" rel="alternate" hreflang="es" href="http://www.lastfm.es/api/show?service=329">
22
+ <link type="text/html" rel="alternate" hreflang="fr" href="http://www.lastfm.fr/api/show?service=329">
23
+ <link type="text/html" rel="alternate" hreflang="it" href="http://www.lastfm.it/api/show?service=329">
24
+ <link type="text/html" rel="alternate" hreflang="ja" href="http://www.lastfm.jp/api/show?service=329">
25
+ <link type="text/html" rel="alternate" hreflang="pl" href="http://www.lastfm.pl/api/show?service=329">
26
+ <link type="text/html" rel="alternate" hreflang="pt" href="http://www.lastfm.com.br/api/show?service=329">
27
+ <link type="text/html" rel="alternate" hreflang="ru" href="http://www.lastfm.ru/api/show?service=329">
28
+ <link type="text/html" rel="alternate" hreflang="sv" href="http://www.lastfm.se/api/show?service=329">
29
+ <link type="text/html" rel="alternate" hreflang="tr" href="http://www.lastfm.com.tr/api/show?service=329">
30
+ <link type="text/html" rel="alternate" hreflang="cn" href="http://cn.last.fm/api/show?service=329">
31
+
32
+
33
+ <!--[if LT IE 7]>
34
+ <style type="text/css">
35
+ .transparent_png {
36
+ behavior: url('/pngbehavior2.htc');
37
+ }
38
+ </style>
39
+ <![endif]-->
40
+ <link rel="stylesheet" href="user_getLovedTracks_files/main.css" type="text/css">
41
+ <link rel="stylesheet" href="user_getLovedTracks_files/components.css" type="text/css">
42
+ <link rel="stylesheet" href="user_getLovedTracks_files/dialog.css" type="text/css">
43
+ <link rel="stylesheet" href="user_getLovedTracks_files/typeahead.css" type="text/css">
44
+ <link rel="stylesheet" href="user_getLovedTracks_files/console.css" type="text/css">
45
+
46
+ <script type="text/javascript" src="user_getLovedTracks_files/prototype.js"></script>
47
+ <script type="text/javascript" src="user_getLovedTracks_files/scriptaculous.js"></script>
48
+ <script type="text/javascript" src="user_getLovedTracks_files/ufo.js"></script>
49
+
50
+ <!-- Create our namespace -->
51
+ <script type="text/javascript" src="user_getLovedTracks_files/LFM.js"></script>
52
+
53
+
54
+ <script type="text/javascript" src="user_getLovedTracks_files/console.js"></script>
55
+
56
+ <script type="text/javascript">
57
+
58
+ LFM.set("config", { FOD_TRACKING: false });
59
+
60
+ LFM.set("Session", {"cookieHost":".last.fm","host":"www.last.fm","staticHost":"http:\/\/cdn.last.fm","formtoken":"51819edea1f52c2f11ed0387d0c1ea5b2e05dafb","location":"gb","language":"en","loggedIn":true,"subscriber":false,"userURL":"\/user\/knaveofdiamonds","libraryURL":"\/user\/knaveofdiamonds\/library","userName":"knaveofdiamonds","prefersClient":false});
61
+
62
+
63
+
64
+ LFM.set("String", {
65
+ toRedStr: "Simply Red",
66
+ toBlackStr: "Paint it Black",
67
+
68
+ okText: "OK",
69
+ cancelText: "Cancel",
70
+ clickToEditText: "Click to edit",
71
+ savingText: "Saving…",
72
+ loadingText: "Loading…",
73
+ deletingText: "Deleting…",
74
+ thereWasAnError: "There was an error.",
75
+ dialogLoadError: "There was an error loading this dialog.",
76
+ fileTooBig: "Sorry, the file is too big.",
77
+ noFile: "Please choose a file.",
78
+ uploadCancelled: "Upload Cancelled.",
79
+ deleteMessageTitle: "Delete Message",
80
+ deleteMessagePrompt: "Are you sure you want to delete this message?",
81
+ deleteFriendPrompt: "Are you sure you want to delete this friend?",
82
+ deleteImage: "Are you sure you want to delete this image?",
83
+ deleteButtonText: "Delete",
84
+ done: "Done",
85
+
86
+
87
+ backText: "Back",
88
+
89
+ yesText: "Yes",
90
+ noText: "No",
91
+
92
+ saveText: "Save",
93
+ saveTitle: "Add to profile",
94
+
95
+ sendText: "Send",
96
+ sendTitle: "Share with friends",
97
+
98
+ addTitle: "Add to library",
99
+
100
+ tagTitle: "Add tags",
101
+
102
+ playlistTitle: "Add to playlist",
103
+
104
+ obsessionTitle: "Personalise your obsession",
105
+
106
+ befriendTitle: "Add a friend",
107
+
108
+ joinTitle: "Join this group",
109
+
110
+ loved: "Loved",
111
+
112
+ RemoveFromLibraryTitle: "Remove from library",
113
+
114
+ uploadImageTitle: "Upload Image",
115
+ uploadVideoTitle: "Upload Video",
116
+
117
+ usernoteTitle: "Add a note",
118
+
119
+ flageventTitle: "Flag for review",
120
+
121
+ setLocationTitle: "Set your Location",
122
+
123
+ newWindowTooltip: "This link will open in a new window",
124
+ unloadWarningMessage: "This will stop Radio Playback",
125
+ trackLoved: "You loved this track",
126
+ playbackStopped: "Playback stopped",
127
+ loadingTrackInfo: "Loading track information",
128
+ errorLoadingTrackInfo: "Error loading track information",
129
+
130
+ uploadMessages: {
131
+ mayTakeLonger: "Sorry, this may take slightly longer than usual. Hold on a couple of seconds.",
132
+ uploading: "Uploading…",
133
+ endUploading: "Done",
134
+ progressDisplay: "PERCENTUPLOADED% complete (TRANSFERRATE kb/s) – TIMEREMAINING seconds remaining",
135
+ progressComplete: "100% complete",
136
+ failedRetrying: "Failed retrying upload, bailed.",
137
+ processingMedia: "Processing media…",
138
+ unsupportedFormat: "Sorry, the file you uploaded isn’t encoded in a supported format. Please try again.",
139
+ uploadError: "There was an error uploading your video, please verify that the file you are uploading is not too large or of an incorrect format and try again."
140
+ }
141
+ });
142
+
143
+ LFM.set("Element", {
144
+ icon_loved_indicator: "<img class=\"loved_indicator_icon transparent_png\" width=\"11\" height=\"9\" src=\"http:\/\/cdn.last.fm\/flatness\/global\/icon_loved_indicator.2.png\" \/>",
145
+ icon_tag: "<img class=\"tag_icon transparent_png\" width=\"14\" height=\"14\" src=\"http:\/\/cdn.last.fm\/flatness\/global\/icon_tag3.png\" \/>",
146
+ icon_dismiss: "<img class=\"dismiss_icon transparent_png\" width=\"13\" height=\"13\" src=\"http:\/\/cdn.last.fm\/flatness\/global\/icon_delete.2.png\" \/>",
147
+ icon_play: "<img class=\"play_icon transparent_png\" width=\"17\" height=\"17\" alt=\"Play\" src=\"http:\/\/cdn.last.fm\/flatness\/global\/icon_play.png\" \/>"
148
+ }); </script>
149
+
150
+ <script type="text/javascript" src="user_getLovedTracks_files/components.js"></script>
151
+ <script type="text/javascript" src="user_getLovedTracks_files/flash.js"></script>
152
+ <script type="text/javascript" src="user_getLovedTracks_files/dialog.js"></script>
153
+ <script type="text/javascript" src="user_getLovedTracks_files/typeahead.js"></script>
154
+
155
+ <script type="text/javascript">
156
+
157
+ document.observe("dom:loaded", function () {
158
+ if (typeof ieHover !== 'undefined') {
159
+ ieHover.setUp();
160
+ }
161
+ });
162
+
163
+ </script>
164
+
165
+ </head><body class="a-show">
166
+
167
+
168
+
169
+ <!-- SiteCatalyst code version: H.16.
170
+ Copyright 1997-2008 Omniture, Inc. More info available at
171
+ http://www.omniture.com -->
172
+
173
+ <script>var s = false, s_gi = false;</script>
174
+ <script src="user_getLovedTracks_files/omniture-core.js"></script>
175
+ <script>
176
+
177
+ /* You may give each page an identifying name, server, and channel on
178
+ the next lines. */
179
+ if (s) {
180
+ s.pageName="Api/Show/";
181
+ s.server="";
182
+ s.channel="";
183
+ s.pageType="other";
184
+
185
+ s.prop1="api"; // namespace
186
+ s.prop2="show"; // controller
187
+ s.prop3=""; // action
188
+
189
+
190
+
191
+
192
+ s.prop10="lfm"; // logged in/out
193
+
194
+ s.prop12="last.fm"; // url extension
195
+
196
+ s.prop13=""; // Member user id
197
+
198
+ s.prop14=""; // Ad source
199
+ s.prop15=""; // Ad id
200
+ s.prop16=""; // Ad size
201
+ s.prop18=s.getTimeParting('h',0,2009); // Set hour
202
+ s.prop19=s.getTimeParting('d',0,2009); // Set day
203
+
204
+
205
+
206
+
207
+
208
+ s.prop32 = ""; // TODO: 1st day of visit
209
+ s.prop33 = "en";
210
+
211
+
212
+
213
+ /* Success Events */
214
+ s.events="";
215
+
216
+ /* E-commerce Variables */
217
+ // s.campaign="";
218
+ s.state="";
219
+ s.zip="";
220
+ s.products="";
221
+ s.purchaseID="";
222
+ s.eVar1="";
223
+ s.eVar2 = s.pageName; // Page name
224
+ s.eVar3="";
225
+
226
+
227
+ s.eVar10="lfm"; // logged in/out
228
+
229
+
230
+
231
+
232
+
233
+ s.eVar26=""; // OnClick Location
234
+ s.eVar27=""; // Download Platform
235
+ s.eVar28=""; // Buy/Download Location
236
+
237
+ s.eVar29=""; // TODO: 1st day of visit
238
+ s.eVar30=s.prop12; // url extension
239
+
240
+ s.eVar31=s.getNewRepeat(); // new/repeat visitor
241
+ s.eVar32=s.getDaysSinceLastVisit(); // Days since last visit
242
+
243
+ s.eVar33=""; // Ad source
244
+ s.eVar34=""; // Ad id
245
+ s.eVar35=""; // Ad size
246
+
247
+ s.eVar36=""; // Member user id
248
+
249
+ s.eVar37=s.prop33; // User language
250
+
251
+ s.eVar38="< 10,000"; // User scrobbles < 10,000
252
+
253
+
254
+ // Set vars to pass with exit/download/custom links called by s.tl()
255
+ // * Click location
256
+ s.linkTrackVars="eVar26";
257
+
258
+ /************* DO NOT ALTER ANYTHING BELOW THIS LINE ! **************/
259
+ var s_code = s.t(); if (s_code) document.write(s_code);
260
+ }
261
+
262
+ </script>
263
+ <script type="text/javascript"><!--
264
+ if(navigator.appVersion.indexOf('MSIE')>=0)document.write(unescape('%3C')+'\!-'+'-')
265
+ //--></script>
266
+ <!--/DO NOT REMOVE/-->
267
+ <!-- End SiteCatalyst code version: H.11. -->
268
+
269
+ <script type="text/javascript" src="user_getLovedTracks_files/quant.js"></script>
270
+ <script type="text/javascript">
271
+
272
+ var _qoptions = {
273
+ labels: "LastFM"
274
+ };
275
+ var _qacct="p-51jhoCdjGFIVU";
276
+ quantserve();
277
+
278
+ </script>
279
+ <noscript> <a href="http://www.quantcast.com/p-51jhoCdjGFIVU"
280
+ target="_blank"><img
281
+ src="http://pixel.quantserve.com/pixel/p-51jhoCdjGFIVU.gif?labels=LastFM"
282
+ height="1" width="1" alt="" /></a>
283
+ </noscript>
284
+ <div id="page" class="">
285
+ <div class="fixed full">
286
+
287
+
288
+
289
+
290
+
291
+
292
+
293
+
294
+
295
+
296
+ <div id="header" class="clearit">
297
+ <div id="headerWrapper">
298
+ <h1><a href="http://www.last.fm/home" id="lastfmLogo">
299
+ <img src="user_getLovedTracks_files/logo.png" alt="Last.fm" width="103" height="50">
300
+ <img src="user_getLovedTracks_files/logo_black.png" style="display: none;" alt="Last.fm" width="103" height="50">
301
+ <span>Last.fm</span>
302
+ </a></h1>
303
+ <ul id="primaryNav" class="clearit">
304
+ <li id="musicNav">
305
+ <a href="http://www.last.fm/music">Music</a>
306
+ </li>
307
+ <li id="videosNav">
308
+ <a href="http://www.last.fm/videos">Videos</a>
309
+ </li>
310
+ <li id="listenNav">
311
+ <a href="http://www.last.fm/listen">Radio</a>
312
+ </li>
313
+ <li id="eventsNav">
314
+ <a href="http://www.last.fm/events">Events</a>
315
+ </li>
316
+ <li id="chartsNav">
317
+ <a href="http://www.last.fm/charts">Charts</a>
318
+ </li>
319
+ <li>
320
+ <form id="siteSearch" method="get" action="/search">
321
+
322
+ <select name="m" id="siteSearchSelect">
323
+ <option value="all">Music</option>
324
+ <option value="event">Event</option>
325
+ <option value="tag">Tag</option>
326
+ <option value="user">User</option>
327
+ <option value="group">Group</option>
328
+ <option value="label">Label</option>
329
+ </select>
330
+ <input class="hint" id="siteSearchBox" placeholder="Search" autosave="fm.last.searchhistory" results="5" name="q" size="16" type="text"><input value="1" name="placeholder" type="hidden">
331
+
332
+ <input class="submit" value="" title="Go" id="siteSearchSubmit" type="submit">
333
+ </form>
334
+ </li>
335
+ </ul>
336
+
337
+ <div class="withDropDown toggle" id="idBadger">
338
+ <a href="http://www.last.fm/user/knaveofdiamonds" id="idBadgerUser" title="Roland Swingler, United Kingdom"><span class="userImage"><img alt="" src="user_getLovedTracks_files/10636291.jpg" width="16" height="16"></span> <span>knaveofdiamonds</span></a><a href="http://www.last.fm/user/knaveofdiamonds" id="idBadgerDropper" title="Roland Swingler, United Kingdom">▼</a>
339
+ <ul style="display: none; position: absolute; z-index: 999999;" id="idBadgerDropDown">
340
+ <li><a href="http://www.last.fm/home">Home</a></li>
341
+ <li><a href="http://www.last.fm/user/knaveofdiamonds" title="Roland Swingler, United Kingdom">Profile</a></li>
342
+ <li><a href="http://www.last.fm/home/recs">Recommended</a></li>
343
+ <li><a href="http://www.last.fm/user/knaveofdiamonds/library" title="">Library</a></li>
344
+ <li><a href="http://www.last.fm/user/knaveofdiamonds/events" title="">Events</a></li>
345
+ <li><a href="http://www.last.fm/settings">Settings</a></li>
346
+ </ul>
347
+ </div>
348
+ <div id="headLinks">
349
+ <p>
350
+ <a href="http://www.last.fm/login/logout">Log out</a> | <a href="http://www.last.fm/inbox">Inbox</a> |
351
+ <a href="#" title="Switch Colour Style" id="colourToggle">Paint it Black</a> |
352
+ <script>
353
+ $('colourToggle').observe('click', function (e) {
354
+ e.stop();
355
+ LFM.Display.colourToggle(e.element(), LFM.String.toRedStr, LFM.String.toBlackStr);
356
+ });
357
+ </script>
358
+ <a href="http://www.last.fm/help">Help</a>
359
+ |
360
+ <img src="user_getLovedTracks_files/globe.gif" id="langToggleFlag" alt="Change language">
361
+ <a class="toggle" href="http://www.last.fm/api/show?service=329&amp;change=language" title="Click here to change your language" rel="nofollow" id="headerLangToggle">English</a>
362
+
363
+ </p>
364
+ </div>
365
+ </div><!-- #headerWrapper -->
366
+ </div>
367
+
368
+ <script>
369
+ LFM.Display.setupHeader(); new LFM.Activityfeed.DeleteListener();
370
+ </script>
371
+ <!-- Adserving start -->
372
+
373
+ <div style="display: none;" id="LastAd_Skin" class="LastAd">
374
+ <div align="center">
375
+ <script type="text/javascript">
376
+ if(typeof writeSkin == 'function') writeSkin();
377
+ </script>
378
+ </div>
379
+ </div>
380
+ <script>
381
+ $("LastAd_Skin").hide();
382
+ </script>
383
+ <!-- Adserving end --><div id="content">
384
+ <div class="fullWidth">
385
+
386
+
387
+ <style type="text/css">
388
+
389
+ body {
390
+ padding:0px 0px 0px 20px;
391
+ color:#000;
392
+ text-align:left;
393
+ }
394
+
395
+ a,a:link,a:visited {
396
+ text-decoration:none;
397
+ color:#D01F3C;
398
+ }
399
+
400
+ #content a:hover {
401
+ background-color:#D01F3C;
402
+ color:#FFF;
403
+ }
404
+
405
+ p.sampleurl a {
406
+ word-wrap:break-word;
407
+ text-wrap:unrestricted;
408
+ }
409
+
410
+ a.auth:hover {
411
+ background-color:#FFF;
412
+ color:#000;
413
+ }
414
+
415
+ a.auth {
416
+ color:#000;
417
+ }
418
+
419
+ a.cancel,a.cancel:link,a.cancel:active,a.cancel:visited,a.cancel:hover {
420
+ text-decoration:underline;
421
+ text-underline:solid #D01F3C;
422
+ text-underline-style:solid;
423
+ }
424
+
425
+ ul {
426
+ list-style-type:none;
427
+ padding:0px 0px 0px 10px;
428
+ margin:2px 0px 2px 0px;
429
+ }
430
+
431
+ #main p {
432
+ line-height:1.3em;
433
+ }
434
+
435
+ li {
436
+ padding:0px 0px 0px 0px;
437
+ margin:0px 0px 0px 0px;
438
+ }
439
+
440
+ #content h1,h2,h3 {
441
+ font-family:Helvetica,"Helvetica Neue",Arial,sans-serif;
442
+ font-size:14px;
443
+ color:#000;
444
+ clear:none;
445
+ margin-top:10px;
446
+ }
447
+
448
+ dd {
449
+ margin:5px 0px 5px 20px;
450
+ }
451
+
452
+ ol {
453
+ margin:5px 0px 5px 20px;
454
+ list-style-type:decimal;
455
+ }
456
+
457
+ #content h1 {
458
+ padding-bottom:2px;
459
+ margin:8px 0 10px 0px;
460
+ }
461
+
462
+ h4 {
463
+ color:#000;
464
+ margin-top:5px;
465
+ }
466
+
467
+ .wstesttitle {
468
+ border-bottom:1px solid #CCC;
469
+ font-weight:Bold;
470
+ }
471
+
472
+ .wstestpass {
473
+ background:#C1FFC1;
474
+ padding:10px;
475
+ border:1px dotted #CCC;
476
+ }
477
+
478
+ #grant {
479
+ clear: both;
480
+ float:left;
481
+ padding-left:0;
482
+ padding-right:10px;
483
+ margin-left:0px;
484
+ }
485
+
486
+ #apigroup ul {
487
+ padding-left:0px;
488
+ padding-top:4px;
489
+ }
490
+
491
+ h2 {
492
+ color:#D01F3C;
493
+ margin-bottom:10px;
494
+ margin-top:12px;
495
+ font-size:16px;
496
+ }
497
+
498
+ #leftcol h2{
499
+ color:#000;
500
+ }
501
+
502
+ #leftcol {
503
+ float:left;
504
+ padding:20px 20px 20px 20px;
505
+ background-color:#F0F0F0;
506
+ margin-bottom:20px;
507
+ }
508
+
509
+ ul.wspanel {
510
+ padding-left:0px;
511
+ }
512
+
513
+ .wspanel li.package {
514
+ margin-top:5px;
515
+ }
516
+
517
+ .param {
518
+ font-style:italic;
519
+ font-weight:bold;
520
+ }
521
+
522
+ #main {
523
+ padding:0px 0 0 20px;
524
+ margin:0px 0 0 220px;
525
+ }
526
+
527
+ #wsdescriptor {
528
+ padding-top:0px;
529
+ }
530
+
531
+ textarea {
532
+ width:auto;
533
+ margin-bottom:10px;
534
+ }
535
+
536
+ p {
537
+ padding:8px 2px 2px 0px;
538
+ margin:2px;
539
+ }
540
+
541
+ .wsdescription {
542
+ padding:10px 10px 10px 10px;
543
+ margin-top:5px;
544
+ background:#ffd;
545
+ border:1px dotted #CCC;
546
+ }
547
+
548
+ #wstitle {
549
+ padding-bottom:4px;
550
+ padding-left:55px;
551
+ background-image:url(http://cdn.last.fm/webclient/lastfmlogo.jpg);
552
+ background-repeat:no-repeat;
553
+ background-position: 0 0;
554
+ }
555
+
556
+ .feeds td.feed {
557
+ color:#666;
558
+ width:100%;
559
+ }
560
+
561
+ #blurb {
562
+ background-color:#F0F0F0;
563
+ width:500px;
564
+ padding:10px;
565
+ padding-bottom:20px;
566
+ font-size:16px;
567
+ line-height:1.4em;
568
+ }
569
+
570
+ #apigroup {
571
+ float:right;
572
+ width:260px;
573
+ padding:0px 30px;
574
+ }
575
+
576
+ #build {
577
+ clear:right;
578
+ margin-top:15px;
579
+ }
580
+
581
+ .title {
582
+ border-bottom:1px solid #CCC;
583
+ }
584
+
585
+ #methods {
586
+ clear:left;
587
+ }
588
+
589
+ #apigroup h2 {
590
+ margin-top:6px;
591
+ margin-bottom:6px;
592
+ }
593
+
594
+ ul#apps {
595
+ padding-left:0px;
596
+ }
597
+
598
+ ul#apps li.item {
599
+ cursor:pointer;
600
+ float:left;
601
+ line-height:14px;
602
+ overflow:hidden;
603
+ padding:0px;
604
+ width:260px;
605
+ }
606
+
607
+ ul#apps li.item p.basic {
608
+ width:250px;
609
+ color:#000;
610
+ font-weight:bold;
611
+ }
612
+
613
+ ul#apps li.item a:hover {
614
+ background-color:#F0F0F0;
615
+ }
616
+
617
+ h2.package {
618
+ color:#000;
619
+ }
620
+
621
+ #methods .col {
622
+ float:left;
623
+ width:260px;
624
+ }
625
+
626
+ div.appsimage {
627
+ overflow:hidden;
628
+ width:240px;
629
+ height:100px;
630
+ }
631
+
632
+ ul#apps a.itemlink {
633
+ color:#333;
634
+ display:block;
635
+ height:190px;
636
+ padding:10px;
637
+ padding-top:0px;
638
+ margin-bottom:10px;
639
+ position:relative;
640
+ text-decoration:none;
641
+ width:250px;
642
+ }
643
+
644
+ #content h1.header a,#content h1.header a:hover,#content h1.header a:visited{
645
+ color:#000;
646
+ text-decoration:none;
647
+ background-color:#FFFFFF;
648
+ }
649
+
650
+ ul#apps p.itemdesc {
651
+ width:250px;
652
+ }
653
+
654
+ ul#apps li.item a {
655
+ width:260px;
656
+ }
657
+
658
+ #intro {
659
+ margin-top:5px;
660
+ }
661
+
662
+
663
+ td.feed .title {
664
+ color:#000;
665
+ border-bottom:none;
666
+ }
667
+
668
+ .feeds td {
669
+ width:100px;
670
+ border-bottom: 1px solid #F0F0F0;
671
+ margin:0px;
672
+ }
673
+
674
+ h3.feed {
675
+ color:#D01F3C;
676
+ border-bottom: 1px solid #CCC;
677
+ padding-bottom:5px;
678
+ }
679
+
680
+ .feeds {
681
+ }
682
+
683
+ .feeds .last td{
684
+ border-bottom:none;
685
+ }
686
+ #wstitle h1 {
687
+ font-size:24px;
688
+ line-height:1.0 em;
689
+ font-family:Helvetica,"Helvetica Neue",Arial,sans-serif;
690
+ margin-bottom:2px;
691
+ }
692
+
693
+ #content h1 {
694
+ padding-top:6px;
695
+ font-size:24px;
696
+ }
697
+
698
+ #wsurl {
699
+ padding:4px 0 0 10px;
700
+ }
701
+
702
+ #sample {
703
+ overflow:hidden;
704
+ }
705
+
706
+ ul.stations {
707
+ margin-left:20px;
708
+ }
709
+
710
+ ul.stations li {
711
+ list-style-type:disc;
712
+ margin-left:8px;
713
+ padding:2px 0 0 5px;
714
+ }
715
+
716
+ ul.stationpanel li {
717
+ padding:4px 0 4px 0;
718
+ }
719
+
720
+ pre {
721
+ background-color:#F0F0F0;
722
+ padding:10px;
723
+ line-height:1.2em;
724
+ margin:5px 0 5px 0;
725
+ }
726
+
727
+ textarea:hover {
728
+ }
729
+
730
+ button {
731
+ font-size:12px;
732
+ }
733
+
734
+ td {
735
+ padding:5px 0 5px 5px;
736
+ }
737
+
738
+ table.ws {
739
+ text-align:left;
740
+ }
741
+
742
+ table.ws td,table.ws th,table.ws tr {
743
+ padding:3px;
744
+ }
745
+
746
+ .highlight {
747
+ }
748
+
749
+ #footer {
750
+ padding:10px 0 0 0px;
751
+ margin:20px 0 40px 240px;
752
+ width:700px;
753
+ color:#666;
754
+ border-top:1px solid #CCC;
755
+ }
756
+
757
+ </style>
758
+ <div id="leftcol">
759
+ <h2>API Doc</h2>
760
+
761
+ <ul class="wspanel">
762
+ <li><a href="http://www.last.fm/api/intro">Overview</a></li>
763
+ <li><a href="http://www.last.fm/api/authentication">User Authentication</a></li>
764
+ <li><a href="http://www.last.fm/api/submissions">Submissions</a></li>
765
+ <li><a href="http://www.last.fm/api/radio">Radio API</a></li>
766
+ <li><a href="http://www.last.fm/api/playlists">Playlists</a></li>
767
+ <li><a href="http://www.last.fm/api/downloads">Downloads</a></li>
768
+ <li><a href="http://www.last.fm/api/rest">REST requests</a></li>
769
+ <li><a href="http://www.last.fm/api/xmlrpc">XML-RPC requests</a></li>
770
+ </ul>
771
+
772
+ <h2>API Methods</h2>
773
+ <ul class="wspanel">
774
+ <li class="package"><b>Album</b></li>
775
+ <ul>
776
+ <li><a href="http://www.last.fm/api/show/?service=302">album.addTags</a></li>
777
+ <li><a href="http://www.last.fm/api/show/?service=290">album.getInfo</a></li>
778
+ <li><a href="http://www.last.fm/api/show/?service=317">album.getTags</a></li>
779
+ <li><a href="http://www.last.fm/api/show/?service=314">album.removeTag</a></li>
780
+ <li><a href="http://www.last.fm/api/show/?service=357">album.search</a></li>
781
+ </ul>
782
+ <li class="package"><b>Artist</b></li>
783
+ <ul>
784
+ <li><a href="http://www.last.fm/api/show/?service=303">artist.addTags</a></li>
785
+ <li><a href="http://www.last.fm/api/show/?service=117">artist.getEvents</a></li>
786
+ <li><a href="http://www.last.fm/api/show/?service=407">artist.getImages</a></li>
787
+ <li><a href="http://www.last.fm/api/show/?service=267">artist.getInfo</a></li>
788
+ <li><a href="http://www.last.fm/api/show/?service=397">artist.getShouts</a></li>
789
+ <li><a href="http://www.last.fm/api/show/?service=119">artist.getSimilar</a></li>
790
+ <li><a href="http://www.last.fm/api/show/?service=318">artist.getTags</a></li>
791
+ <li><a href="http://www.last.fm/api/show/?service=287">artist.getTopAlbums</a></li>
792
+ <li><a href="http://www.last.fm/api/show/?service=310">artist.getTopFans</a></li>
793
+ <li><a href="http://www.last.fm/api/show/?service=288">artist.getTopTags</a></li>
794
+ <li><a href="http://www.last.fm/api/show/?service=277">artist.getTopTracks</a></li>
795
+ <li><a href="http://www.last.fm/api/show/?service=315">artist.removeTag</a></li>
796
+ <li><a href="http://www.last.fm/api/show/?service=272">artist.search</a></li>
797
+ <li><a href="http://www.last.fm/api/show/?service=306">artist.share</a></li>
798
+ <li><a href="http://www.last.fm/api/show/?service=408">artist.shout</a></li>
799
+ </ul>
800
+ <li class="package"><b>Auth</b></li>
801
+ <ul>
802
+ <li><a href="http://www.last.fm/api/show/?service=266">auth.getMobileSession</a></li>
803
+ <li><a href="http://www.last.fm/api/show/?service=125">auth.getSession</a></li>
804
+ <li><a href="http://www.last.fm/api/show/?service=265">auth.getToken</a></li>
805
+ <li><a href="http://www.last.fm/api/show/?service=133">auth.getWebSession</a></li>
806
+ </ul>
807
+ <li class="package"><b>Event</b></li>
808
+ <ul>
809
+ <li><a href="http://www.last.fm/api/show/?service=307">event.attend</a></li>
810
+ <li><a href="http://www.last.fm/api/show/?service=391">event.getAttendees</a></li>
811
+ <li><a href="http://www.last.fm/api/show/?service=292">event.getInfo</a></li>
812
+ <li><a href="http://www.last.fm/api/show/?service=399">event.getShouts</a></li>
813
+ <li><a href="http://www.last.fm/api/show/?service=350">event.share</a></li>
814
+ <li><a href="http://www.last.fm/api/show/?service=409">event.shout</a></li>
815
+ </ul>
816
+ <li class="package"><b>Geo</b></li>
817
+ <ul>
818
+ <li><a href="http://www.last.fm/api/show/?service=270">geo.getEvents</a></li>
819
+ <li><a href="http://www.last.fm/api/show/?service=297">geo.getTopArtists</a></li>
820
+ <li><a href="http://www.last.fm/api/show/?service=298">geo.getTopTracks</a></li>
821
+ </ul>
822
+ <li class="package"><b>Group</b></li>
823
+ <ul>
824
+ <li><a href="http://www.last.fm/api/show/?service=379">group.getMembers</a></li>
825
+ <li><a href="http://www.last.fm/api/show/?service=293">group.getWeeklyAlbumChart</a></li>
826
+ <li><a href="http://www.last.fm/api/show/?service=294">group.getWeeklyArtistChart</a></li>
827
+ <li><a href="http://www.last.fm/api/show/?service=295">group.getWeeklyChartList</a></li>
828
+ <li><a href="http://www.last.fm/api/show/?service=296">group.getWeeklyTrackChart</a></li>
829
+ </ul>
830
+ <li class="package"><b>Library</b></li>
831
+ <ul>
832
+ <li><a href="http://www.last.fm/api/show/?service=370">library.addAlbum</a></li>
833
+ <li><a href="http://www.last.fm/api/show/?service=371">library.addArtist</a></li>
834
+ <li><a href="http://www.last.fm/api/show/?service=372">library.addTrack</a></li>
835
+ <li><a href="http://www.last.fm/api/show/?service=321">library.getAlbums</a></li>
836
+ <li><a href="http://www.last.fm/api/show/?service=322">library.getArtists</a></li>
837
+ <li><a href="http://www.last.fm/api/show/?service=323">library.getTracks</a></li>
838
+ </ul>
839
+ <li class="package"><b>Playlist</b></li>
840
+ <ul>
841
+ <li><a href="http://www.last.fm/api/show/?service=337">playlist.addTrack</a></li>
842
+ <li><a href="http://www.last.fm/api/show/?service=365">playlist.create</a></li>
843
+ <li><a href="http://www.last.fm/api/show/?service=271">playlist.fetch</a></li>
844
+ </ul>
845
+ <li class="package"><b>Radio</b></li>
846
+ <ul>
847
+ <li><a href="http://www.last.fm/api/show/?service=256">radio.getPlaylist</a></li>
848
+ <li><a href="http://www.last.fm/api/show/?service=160">radio.tune</a></li>
849
+ </ul>
850
+ <li class="package"><b>Tag</b></li>
851
+ <ul>
852
+ <li><a href="http://www.last.fm/api/show/?service=311">tag.getSimilar</a></li>
853
+ <li><a href="http://www.last.fm/api/show/?service=283">tag.getTopAlbums</a></li>
854
+ <li><a href="http://www.last.fm/api/show/?service=284">tag.getTopArtists</a></li>
855
+ <li><a href="http://www.last.fm/api/show/?service=276">tag.getTopTags</a></li>
856
+ <li><a href="http://www.last.fm/api/show/?service=285">tag.getTopTracks</a></li>
857
+ <li><a href="http://www.last.fm/api/show/?service=358">tag.getWeeklyArtistChart</a></li>
858
+ <li><a href="http://www.last.fm/api/show/?service=359">tag.getWeeklyChartList</a></li>
859
+ <li><a href="http://www.last.fm/api/show/?service=273">tag.search</a></li>
860
+ </ul>
861
+ <li class="package"><b>Tasteometer</b></li>
862
+ <ul>
863
+ <li><a href="http://www.last.fm/api/show/?service=258">tasteometer.compare</a></li>
864
+ </ul>
865
+ <li class="package"><b>Track</b></li>
866
+ <ul>
867
+ <li><a href="http://www.last.fm/api/show/?service=304">track.addTags</a></li>
868
+ <li><a href="http://www.last.fm/api/show/?service=261">track.ban</a></li>
869
+ <li><a href="http://www.last.fm/api/show/?service=356">track.getInfo</a></li>
870
+ <li><a href="http://www.last.fm/api/show/?service=319">track.getSimilar</a></li>
871
+ <li><a href="http://www.last.fm/api/show/?service=320">track.getTags</a></li>
872
+ <li><a href="http://www.last.fm/api/show/?service=312">track.getTopFans</a></li>
873
+ <li><a href="http://www.last.fm/api/show/?service=289">track.getTopTags</a></li>
874
+ <li><a href="http://www.last.fm/api/show/?service=260">track.love</a></li>
875
+ <li><a href="http://www.last.fm/api/show/?service=316">track.removeTag</a></li>
876
+ <li><a href="http://www.last.fm/api/show/?service=286">track.search</a></li>
877
+ <li><a href="http://www.last.fm/api/show/?service=305">track.share</a></li>
878
+ </ul>
879
+ <li class="package"><b>User</b></li>
880
+ <ul>
881
+ <li><a href="http://www.last.fm/api/show/?service=291">user.getEvents</a></li>
882
+ <li><a href="http://www.last.fm/api/show/?service=263">user.getFriends</a></li>
883
+ <li><a href="http://www.last.fm/api/show/?service=344">user.getInfo</a></li>
884
+ <li><a href="http://www.last.fm/api/show/?service=329">user.getLovedTracks</a></li>
885
+ <li><a href="http://www.last.fm/api/show/?service=264">user.getNeighbours</a></li>
886
+ <li><a href="http://www.last.fm/api/show/?service=343">user.getPastEvents</a></li>
887
+ <li><a href="http://www.last.fm/api/show/?service=313">user.getPlaylists</a></li>
888
+ <li><a href="http://www.last.fm/api/show/?service=278">user.getRecentTracks</a></li>
889
+ <li><a href="http://www.last.fm/api/show/?service=388">user.getRecommendedArtists</a></li>
890
+ <li><a href="http://www.last.fm/api/show/?service=375">user.getRecommendedEvents</a></li>
891
+ <li><a href="http://www.last.fm/api/show/?service=401">user.getShouts</a></li>
892
+ <li><a href="http://www.last.fm/api/show/?service=299">user.getTopAlbums</a></li>
893
+ <li><a href="http://www.last.fm/api/show/?service=300">user.getTopArtists</a></li>
894
+ <li><a href="http://www.last.fm/api/show/?service=123">user.getTopTags</a></li>
895
+ <li><a href="http://www.last.fm/api/show/?service=301">user.getTopTracks</a></li>
896
+ <li><a href="http://www.last.fm/api/show/?service=279">user.getWeeklyAlbumChart</a></li>
897
+ <li><a href="http://www.last.fm/api/show/?service=281">user.getWeeklyArtistChart</a></li>
898
+ <li><a href="http://www.last.fm/api/show/?service=280">user.getWeeklyChartList</a></li>
899
+ <li><a href="http://www.last.fm/api/show/?service=282">user.getWeeklyTrackChart</a></li>
900
+ <li><a href="http://www.last.fm/api/show/?service=411">user.shout</a></li>
901
+ </ul>
902
+ <li class="package"><b>Venue</b></li>
903
+ <ul>
904
+ <li><a href="http://www.last.fm/api/show/?service=394">venue.getEvents</a></li>
905
+ <li><a href="http://www.last.fm/api/show/?service=395">venue.getPastEvents</a></li>
906
+ <li><a href="http://www.last.fm/api/show/?service=396">venue.search</a></li>
907
+ </ul>
908
+ </ul>
909
+ </div> <div id="main">
910
+ <div id="wstitle">
911
+ <h1 class="header"><a href="http://www.last.fm/api">Last.fm Web Services</a></h1>
912
+ <a href="http://www.last.fm/api/intro">API</a> | <a href="http://www.last.fm/api/feeds">Feeds</a> | <a href="http://www.last.fm/api/account">Your API Account</a>
913
+ </div> <h1>user.getLovedTracks</h1>
914
+ <div class="wsdescription">
915
+ Get the last 50 tracks loved by a user.
916
+ </div>
917
+ <p class="sampleurl">
918
+ e.g. <a href="http://ws.audioscrobbler.com/2.0/?method=user.getlovedtracks&amp;user=rj&amp;api_key=b25b959554ed76058ac220b7b2e0a026">http://ws.audioscrobbler.com/2.0/?method=user.getlovedtracks&amp;user=rj&amp;api_key=b25b959554ed76058a...</a>
919
+ </p>
920
+ <div id="wsdescriptor">
921
+ <h2>Params</h2>
922
+ <span class="param">user</span> (Required) : The user name to fetch the loved tracks for.<br>
923
+ <span class="param">api_key</span> (Required) : A Last.fm API key.<br>
924
+ <h2>Auth</h2>
925
+
926
+ This service does <b>not</b> require authentication.
927
+ <h2>Sample Response</h2>
928
+ <script type="text/javascript">
929
+
930
+ function showWSExcerptSubmit() {
931
+ $('updateexcerpt').style.display = 'block';
932
+ }
933
+
934
+ function hideWSExcerptSubmit() {
935
+ $('updateexcerpt').style.display = 'none';
936
+ }
937
+
938
+ function showWSExcerptSuccess() {
939
+ $('success').style.display = 'block';
940
+ }
941
+
942
+ function updateExcerpt(excerpt,service) {
943
+ new Ajax.Request('/api/updateExcerpt', {
944
+ method: 'post',
945
+ parameters: 'excerpt='+encodeURIComponent(excerpt.value)+'&service='+service.value,
946
+ onSuccess: onUpdateExcerpt
947
+ });
948
+ }
949
+
950
+ function onUpdateExcerpt(response) {
951
+ if(response.responseText) {
952
+ hideWSExcerptSubmit();
953
+ showWSExcerptSuccess();
954
+ $('excerpt').onblur();
955
+ }
956
+ }
957
+
958
+ </script>
959
+ <div id="sample"><pre>&lt;lovedtracks user="RJ"&gt;
960
+ &lt;track&gt;
961
+ &lt;name&gt;The Glass Prison&lt;/name&gt;
962
+ &lt;mbid/&gt;
963
+ &lt;url&gt;www.last.fm/music/Dream+Theater/_/The+Glass+Prison&lt;/url&gt;
964
+ &lt;date uts="1216371514"&gt;18 Jul 2008, 08:58&lt;/date&gt;
965
+ &lt;artist&gt;
966
+ &lt;name&gt;Dream Theater&lt;/name&gt;
967
+ &lt;mbid&gt;28503ab7-8bf2-4666-a7bd-2644bfc7cb1d&lt;/mbid&gt;
968
+ &lt;url&gt;http://www.last.fm/music/Dream+Theater&lt;/url&gt;
969
+ &lt;/artist&gt;
970
+ &lt;image size="small"&gt;...&lt;/image&gt;
971
+ &lt;image size="medium"&gt;...&lt;/image&gt;
972
+ &lt;image size="large"&gt;...&lt;/image&gt;
973
+ &lt;/track&gt;
974
+ ...
975
+ &lt;/lovedtracks&gt;</pre></div>
976
+
977
+ <h2>Other Formats</h2>
978
+ Also available as a feed in <b>rss</b> format <p>
979
+ e.g. <a href="http://ws.audioscrobbler.com/2.0/user/rj/lovedtracks.rss">http://ws.audioscrobbler.com/2.0/user/rj/lovedtracks.rss</a><br>
980
+ </p>
981
+ <h2>Errors</h2>
982
+ <ul>
983
+ <li><span class="param">2</span> : Invalid service -This service does not exist</li>
984
+ <li><span class="param">3</span> : Invalid Method - No method with that name in this package</li>
985
+ <li><span class="param">4</span> : Authentication Failed - You do not have permissions to access the service</li>
986
+ <li><span class="param">5</span> : Invalid format - This service doesn't exist in that format</li>
987
+ <li><span class="param">6</span> : Invalid parameters - Your request is missing a required parameter</li>
988
+ <li><span class="param">7</span> : Invalid resource specified</li>
989
+ <li><span class="param">9</span> : Invalid session key - Please re-authenticate</li>
990
+ <li><span class="param">10</span> : Invalid API key - You must be granted a valid key by last.fm</li>
991
+ <li><span class="param">11</span> : Service Offline - This service is temporarily offline. Try again later.</li>
992
+ <li><span class="param">12</span> : Subscription Error - The user needs to be subscribed in order to do that</li>
993
+ <li><span class="param">13</span> : Invalid method signature supplied</li>
994
+ <li><span class="param">18</span> : This user has no free radio plays left. Subscription required.</li>
995
+ </ul>
996
+ </div>
997
+ </div>
998
+ </div>
999
+ </div>
1000
+
1001
+ <div id="LastFooter">
1002
+
1003
+ <div id="footer_ads" style="visibility: visible;" class="clearit">
1004
+ <div class="footer_ad_wrapper">
1005
+
1006
+ <!-- Adserving start -->
1007
+
1008
+ <div style="display: none;" id="LastAd_Footer1" class="LastAd">
1009
+ <div align="center">
1010
+ <script type="text/javascript">
1011
+ if ($("footer_ads")) $("footer_ads").show();
1012
+ if(typeof writeFooter1 == 'function') writeFooter1();
1013
+ </script>
1014
+ </div>
1015
+ </div>
1016
+ <script>
1017
+ $("LastAd_Footer1").hide();
1018
+ </script>
1019
+ <!-- Adserving end --> <!-- Adserving start -->
1020
+
1021
+ <div style="display: none;" id="LastAd_Footer2" class="LastAd">
1022
+ <div align="center">
1023
+ <script type="text/javascript">
1024
+ if ($("footer_ads")) $("footer_ads").show();
1025
+ if(typeof writeFooter2 == 'function') writeFooter2();
1026
+ </script>
1027
+ </div>
1028
+ </div>
1029
+ <script>
1030
+ $("LastAd_Footer2").hide();
1031
+ </script>
1032
+ <!-- Adserving end --> <!-- Adserving start -->
1033
+
1034
+ <div style="display: none;" id="LastAd_Footer3" class="LastAd">
1035
+ <div align="center">
1036
+ <script type="text/javascript">
1037
+ if ($("footer_ads")) $("footer_ads").show();
1038
+ if(typeof writeFooter3 == 'function') writeFooter3();
1039
+ </script>
1040
+ </div>
1041
+ </div>
1042
+ <script>
1043
+ $("LastAd_Footer3").hide();
1044
+ </script>
1045
+ <!-- Adserving end --> <!-- Adserving start -->
1046
+
1047
+ <div style="display: none;" id="LastAd_Footer4" class="LastAd last">
1048
+ <div align="center">
1049
+ <script type="text/javascript">
1050
+ if ($("footer_ads")) $("footer_ads").show();
1051
+ if(typeof writeFooter4 == 'function') writeFooter4();
1052
+ </script>
1053
+ </div>
1054
+ </div>
1055
+ <script>
1056
+ $("LastAd_Footer4").hide();
1057
+ </script>
1058
+ <!-- Adserving end -->
1059
+ </div><!-- .footer_ad_wrapper -->
1060
+ </div><!-- #footer_ads -->
1061
+
1062
+ <ul id="footerStuff" class="clearit">
1063
+ <li><div id="footerMessage">
1064
+ <h3>What’s New</h3>
1065
+ <div class="bbcode">It’s here. Welcome to the new Last.fm! <a href="http://blog.last.fm/2008/07/17/lastfm-the-next-generation">Read all about it on our blog</a>.</div>
1066
+ </div><!-- #footerMessage --></li>
1067
+
1068
+ <li><p id="uploadYourMusic">
1069
+ <strong>Do you make music? Upload it!</strong><br><a href="http://www.last.fm/uploadmusic?accountType=artist">Artists</a> or <a href="http://www.last.fm/uploadmusic?accountType=label">Labels</a>
1070
+ </p></li>
1071
+ </ul><!-- #footerStuff -->
1072
+
1073
+ <div id="footer_content">
1074
+ <ul id="footerLinks" class="clearit">
1075
+ <li class="first">
1076
+ <dl>
1077
+ <dt>Learn About Us</dt>
1078
+ <dd><a href="http://www.last.fm/about/contact">Contact</a></dd>
1079
+ <dd><a href="http://www.last.fm/about">About Us</a></dd>
1080
+ <dd><a href="http://www.last.fm/about/team">Team</a></dd>
1081
+ <dd><a href="http://www.last.fm/about/jobs">Jobs</a></dd>
1082
+ <dd><a href="http://www.last.fm/resources">Media Kit</a></dd>
1083
+ <dd><a href="http://www.last.fm/advertise">Advertise</a></dd>
1084
+ </dl>
1085
+ </li>
1086
+ <li>
1087
+ <dl>
1088
+ <dt>Get Help</dt>
1089
+ <dd><a href="http://www.last.fm/help/faq">FAQ</a></dd>
1090
+ <dd><a href="http://www.last.fm/forum/21713">Website Support</a></dd>
1091
+ <dd><a href="http://www.last.fm/forum/34905">Scrobbler Support</a></dd>
1092
+ <dd><a href="http://www.last.fm/group/Last.fm+for+iPhone+and+iPod+Touch">iPhone Support</a></dd>
1093
+ </dl>
1094
+ </li>
1095
+
1096
+ <li>
1097
+ <dl>
1098
+ <dt>Join In</dt>
1099
+ <dd><a href="http://www.last.fm/users">Find People</a></dd>
1100
+ <dd><a href="http://www.last.fm/users/groups">Find Groups</a></dd>
1101
+ <dd><a href="http://www.last.fm/forum">Forums</a></dd>
1102
+ <dd><a href="http://www.last.fm/help/guidelines">Community Guidelines</a></dd>
1103
+ <dd><a href="http://www.last.fm/about/moderators">Moderators</a></dd>
1104
+ <dd><a href="http://www.last.fm/promotions">Contests &amp; Promotions</a></dd>
1105
+ </dl>
1106
+ </li>
1107
+ <li class="last">
1108
+ <dl>
1109
+ <dt>Do More</dt>
1110
+ <dd><a href="http://www.last.fm/download">Last.fm Scrobbler</a></dd>
1111
+ <dd><a href="http://www.last.fm/download#content_ipod">iPod Scrobbler</a></dd>
1112
+ <dd><a href="http://www.last.fm/download#content_iphone">iPhone App</a></dd>
1113
+ <dd><a href="http://build.last.fm/">More Apps</a></dd>
1114
+ <dd><a href="http://www.last.fm/music/+free-music-downloads">Free Music Downloads</a></dd>
1115
+ <dd><a href="http://www.last.fm/hardware">Hardware</a></dd>
1116
+ <dd><a href="http://www.last.fm/widgets">Widgets</a></dd> <dd><a href="http://www.last.fm/tools/charts">Chart Images</a></dd>
1117
+ <dd><a href="http://www.last.fm/subscribe">Subscribe</a></dd>
1118
+ <dd><a href="http://www.last.fm/api">API</a></dd>
1119
+ </dl>
1120
+ </li>
1121
+ </ul><!-- #footerLinks -->
1122
+
1123
+ <div id="justCantGetEnough" class="clearit">
1124
+ <blockquote>“You've got a friend in Last.fm”</blockquote>
1125
+ <p>
1126
+ <strong>More Last.fm Sites:</strong>
1127
+ <a href="http://blog.last.fm/">Blog</a>
1128
+ | <a href="http://musicmanager.last.fm/">Music Manager</a>
1129
+ | <a href="http://build.last.fm/">Build</a>
1130
+ | <a href="http://playground.last.fm/">Playground</a>
1131
+ | <a href="http://www.last.fm/bestof/2008">Best of 2008</a>
1132
+ </p>
1133
+ </div>
1134
+
1135
+ <div id="legalities">
1136
+ <div id="cbsi_f">
1137
+ <form>
1138
+ <script language="javascript">
1139
+ document.write("<div><label class=\"rb_visit_txt\" for=\"cbsi_footer_menu\">Visit other Sites</label><select name=\"cbsi_footer_menu\" id=\"cbsi_footer_menu\" class=\"rb_visit_sel\"><option value=\"\">Select Site</option><option value=\"http://www.bnet.com\">BNET</option><option value=\"http://www.cbscares.com\">CBS Cares</option><option value=\"http://www.cbssports.com/cbscollegesports/\">CBS College Sports</option><option value=\"http://www.cbsradio.com/streaming/\">CBS Radio</option><option value=\"http://www.cbs.com\">CBS.com</option><option value=\"http://www.cbsnews.com\">CBSNews.com</option><option value=\"http://www.cbssports.com\">CBSSports.com</option><option value=\"http://www.chow.com\">CHOW</option><option value=\"http://www.cnet.com\">CNET</option><option value=\"http://www.cnetcontentsolutions.com\">CNET Content Solutions</option><option value=\"http://www.gamespot.com\">GameSpot</option><option value=\"http://www.cnetnetworks.com/advertise/media-kit/international.html?tag=ft\">International</option><option value=\"http://www.last.fm\">Last.fm</option><option value=\"http://www.maxpreps.com\">MaxPreps</option><option value=\"http://www.metacritic.com\">Metacritic.com</option><option value=\"http://moneywatch.bnet.com\">Moneywatch</option><option value=\"http://www.mp3.com\">MP3.com</option><option value=\"http://www.mysimon.com\">mySimon</option><option value=\"http://www.ncaa.com\">NCAA</option><option value=\"http://www.search.com\">Search.com</option><option value=\"http://www.shopper.com\">Shopper.com</option><option value=\"http://www.sho.com\">Showtime</option><option value=\"http://www.techrepublic.com\">TechRepublic</option><option value=\"http://www.theinsider.com\">The Insider</option><option value=\"http://www.tv.com\">TV.com</option><option value=\"http://www.urbanbaby.com\">UrbanBaby.com</option><option value=\"http://www.zdnet.com\">ZDNet</option></select><input type=\"button\" class=\"rb_visit_go\" value=\"Go\" onClick=\"window.location=document.getElementById('cbsi_footer_menu').options[document.getElementById('cbsi_footer_menu').selectedIndex].value;\" /></div>");
1140
+ </script><div><label class="rb_visit_txt" for="cbsi_footer_menu">Visit other Sites</label><select name="cbsi_footer_menu" id="cbsi_footer_menu" class="rb_visit_sel"><option value="">Select Site</option><option value="http://www.bnet.com">BNET</option><option value="http://www.cbscares.com">CBS Cares</option><option value="http://www.cbssports.com/cbscollegesports/">CBS College Sports</option><option value="http://www.cbsradio.com/streaming/">CBS Radio</option><option value="http://www.cbs.com">CBS.com</option><option value="http://www.cbsnews.com">CBSNews.com</option><option value="http://www.cbssports.com">CBSSports.com</option><option value="http://www.chow.com">CHOW</option><option value="http://www.cnet.com">CNET</option><option value="http://www.cnetcontentsolutions.com">CNET Content Solutions</option><option value="http://www.gamespot.com">GameSpot</option><option value="http://www.cnetnetworks.com/advertise/media-kit/international.html?tag=ft">International</option><option value="http://www.last.fm">Last.fm</option><option value="http://www.maxpreps.com">MaxPreps</option><option value="http://www.metacritic.com">Metacritic.com</option><option value="http://moneywatch.bnet.com">Moneywatch</option><option value="http://www.mp3.com">MP3.com</option><option value="http://www.mysimon.com">mySimon</option><option value="http://www.ncaa.com">NCAA</option><option value="http://www.search.com">Search.com</option><option value="http://www.shopper.com">Shopper.com</option><option value="http://www.sho.com">Showtime</option><option value="http://www.techrepublic.com">TechRepublic</option><option value="http://www.theinsider.com">The Insider</option><option value="http://www.tv.com">TV.com</option><option value="http://www.urbanbaby.com">UrbanBaby.com</option><option value="http://www.zdnet.com">ZDNet</option></select><input class="rb_visit_go" value="Go" onclick="window.location=document.getElementById('cbsi_footer_menu').options[document.getElementById('cbsi_footer_menu').selectedIndex].value;" type="button"></div>
1141
+ </form>
1142
+ <noscript> <a href="http://www.bnet.com">BNET</a> | <a
1143
+ href="http://www.cbscares.com">CBS Cares</a> | <a
1144
+ href="http://www.cbssports.com/cbscollegesports/">CBS College
1145
+ Sports</a> | <a href="http://www.cbsradio.com/streaming/">CBS Radio</a>
1146
+ | <a href="http://www.cbs.com">CBS.com</a> | <a
1147
+ href="http://www.cbsnews.com">CBSNews.com</a> | <a
1148
+ href="http://www.cbssports.com">CBSSports.com</a> | <a
1149
+ href="http://www.chow.com">CHOW</a> | <a
1150
+ href="http://www.cnet.com">CNET</a> | <a
1151
+ href="http://www.cnetcontentsolutions.com">CNET Content Solutions</a> |
1152
+ <a href="http://www.gamespot.com">GameSpot</a> | <a
1153
+ href="http://www.cnetnetworks.com/advertise/media-kit/international.html?tag=ft">International</a>
1154
+ | <a href="http://www.last.fm">Last.fm</a> | <a
1155
+ href="http://www.maxpreps.com">MaxPreps</a> | <a
1156
+ href="http://www.metacritic.com">Metacritic.com</a> | <a
1157
+ href="http://moneywatch.bnet.com">Moneywatch</a> | <a
1158
+ href="http://www.mp3.com">MP3.com</a> | <a
1159
+ href="http://www.mysimon.com">mySimon</a> | <a
1160
+ href="http://www.ncaa.com">NCAA</a> | <a
1161
+ href="http://www.search.com">Search.com</a> | <a
1162
+ href="http://www.shopper.com">Shopper.com</a> | <a
1163
+ href="http://www.sho.com">Showtime</a> | <a
1164
+ href="http://www.techrepublic.com">TechRepublic</a> | <a
1165
+ href="http://www.theinsider.com">The Insider</a> | <a
1166
+ href="http://www.tv.com">TV.com</a> | <a
1167
+ href="http://www.urbanbaby.com">UrbanBaby.com</a> | <a
1168
+ href="http://www.zdnet.com">ZDNet</a> </noscript>
1169
+ <p id="cbsi_f_pop">
1170
+ Popular on CBS sites: <a href="http://www.cnet.com/apple-iphone.html">iPhone 3G</a> | <a href="http://fantasynews.cbssports.com/fantasyfootball">Fantasy Football</a> | <a href="http://moneywatch.bnet.com/">Moneywatch</a> | <a href="http://download.cnet.com/windows/antivirus-software/">Antivirus Software</a> | <a href="http://www.chow.com/recipes">Recipes</a> | <a href="http://www.gamespot.com/pc/strategy/spore/index.html">Spore</a><!-- cbth:100 -->
1171
+ </p>
1172
+ </div> <p id="copy">
1173
+ © 2009 Last.fm Ltd. All rights reserved. |
1174
+ <a href="http://www.last.fm/legal/terms" target="_blank">Terms of Use</a>
1175
+ and <a href="http://www.last.fm/legal/privacy" target="_blank">Privacy Policy</a> | <span class="date">Updated November 21, 2008</span><br>
1176
+
1177
+ </p>
1178
+ </div><!-- #legalities -->
1179
+
1180
+ </div>
1181
+ </div><!-- #LastFooter -->
1182
+
1183
+ <ul id="langSelector" style="display: none; visibility: hidden; position: absolute; z-index: 999999;" class="js">
1184
+
1185
+
1186
+ <li><a href="http://www.lastfm.de/api/show?service=329&amp;setlang=de" class="icon"><img src="user_getLovedTracks_files/de.gif"> <span>Deutsch</span></a></li>
1187
+ <li><a href="http://www.lastfm.es/api/show?service=329&amp;setlang=es" class="icon"><img src="user_getLovedTracks_files/es.gif"> <span>Español</span></a></li>
1188
+ <li><a href="http://www.lastfm.fr/api/show?service=329&amp;setlang=fr" class="icon"><img src="user_getLovedTracks_files/fr.gif"> <span>Français</span></a></li>
1189
+ <li><a href="http://www.lastfm.it/api/show?service=329&amp;setlang=it" class="icon"><img src="user_getLovedTracks_files/it.gif"> <span>Italiano</span></a></li>
1190
+ <li><a href="http://www.lastfm.jp/api/show?service=329&amp;setlang=jp" class="icon"><img src="user_getLovedTracks_files/jp.gif"> <span>日本語</span></a></li>
1191
+ <li><a href="http://www.lastfm.pl/api/show?service=329&amp;setlang=pl" class="icon"><img src="user_getLovedTracks_files/pl.gif"> <span>Polski</span></a></li>
1192
+ <li><a href="http://www.lastfm.com.br/api/show?service=329&amp;setlang=pt" class="icon"><img src="user_getLovedTracks_files/pt.gif"> <span>Português</span></a></li>
1193
+ <li><a href="http://www.lastfm.ru/api/show?service=329&amp;setlang=ru" class="icon"><img src="user_getLovedTracks_files/ru.gif"> <span>Руccкий</span></a></li>
1194
+ <li><a href="http://www.lastfm.se/api/show?service=329&amp;setlang=sv" class="icon"><img src="user_getLovedTracks_files/se.gif"> <span>Svenska</span></a></li>
1195
+ <li><a href="http://www.lastfm.com.tr/api/show?service=329&amp;setlang=tr" class="icon"><img src="user_getLovedTracks_files/tr.gif"> <span>Türkçe</span></a></li>
1196
+ <li><a href="http://cn.last.fm/api/show?service=329&amp;setlang=zh" class="icon"><img src="user_getLovedTracks_files/zh.gif"> <span>简体中文</span></a></li>
1197
+
1198
+ </ul>
1199
+
1200
+ <script>
1201
+
1202
+ $("langSelector").className = "js";
1203
+ LFM.set("Page", {
1204
+ navDropDown: new LFM.Display.DropDown(
1205
+ "headerLangToggle",
1206
+ "headerLangToggle",
1207
+ "langSelector",
1208
+ {
1209
+ align: "right",
1210
+ onShow: function (dropdown) {
1211
+ dropdown.ddbody.setStyle({
1212
+ top: (dropdown.ddbody.getStyle("top").toPixels() + 3) + "px"
1213
+ });
1214
+ }
1215
+ }
1216
+ )
1217
+ });
1218
+
1219
+ </script>
1220
+ <div id="multiButtonMenu" style="display: none;">
1221
+ <div>
1222
+ <ul class="lfmDropDownBody">
1223
+ <li class="mAddToLibrary"><a href="#">Add to my Library</a></li>
1224
+ <li class="mAddToFriends"><a href="#">Add to Friends</a></li>
1225
+
1226
+ <!-- <li class="save"><a href="#">Bookmark</a></li> -->
1227
+ <li class="mSend"><a href="#">Share</a></li>
1228
+
1229
+ <li class="mLove"><a href="#">Love track</a></li>
1230
+ <li class="mUnlove"><a href="#">Unlove track</a></li>
1231
+ <li class="mBan"><a href="#">Ban track from radio</a></li>
1232
+ <li class="mUnban"><a href="#">Unban track from radio</a></li>
1233
+
1234
+
1235
+ <li class="mAddTags"><a href="#">Add tags</a></li>
1236
+ <li class="mAddToPlaylist"><a href="#">Add to playlist</a></li>
1237
+ <li class="mMessage"><a href="#">Send a message</a></li>
1238
+ <li class="mEditDetails"><a href="#">Edit Details</a></li>
1239
+ <li class="mMessageAll"><a href="#">Message All Users</a></li>
1240
+ <li class="mEditPermissions"><a href="#">Edit Permissions</a></li>
1241
+ <li class="mAbdicate"><a href="#">Abdicate</a></li>
1242
+ <li class="mLeave"><a href="#">Leave Group</a></li>
1243
+
1244
+ <li class="mRemoveFromLibrary"><a href="#">Remove from your Library</a></li>
1245
+
1246
+ <li class="mLoading"><a href="#">&nbsp;</a></li>
1247
+ </ul>
1248
+ </div>
1249
+ </div>
1250
+
1251
+
1252
+ <script type="text/javascript" src="user_getLovedTracks_files/dw.js"></script>
1253
+ <script type="text/javascript">
1254
+ DW.pageParams = {
1255
+ siteid: '190',
1256
+ ptid: '',
1257
+ onid: ''
1258
+ };
1259
+ DW.clear();
1260
+ </script>
1261
+ <noscript>
1262
+ <img src="http://dw.com.com/clear/c.gif?ts=1242847030&amp;sid=" />
1263
+ </noscript>
1264
+
1265
+
1266
+ <script src="user_getLovedTracks_files/1361.js"></script>
1267
+
1268
+ <script>
1269
+
1270
+ LFM.Button.MultiButton.setup();
1271
+ LFM.Display.setMinHeight();
1272
+
1273
+ </script>
1274
+
1275
+ </div>
1276
+ </div>
1277
+
1278
+ </body></html>