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,1261 @@
1
+ <!DOCTYPE html>
2
+ <html xmlns="http://www.w3.org/1999/xhtml" lang="en">
3
+ <head profile="http://purl.org/uF/2008/03/">
4
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
5
+ <title>venue.search Web Service – Last.fm</title>
6
+ <meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" />
7
+
8
+ <link rel="search" type="application/opensearchdescription+xml" href="http://cdn.last.fm/opensearch_desc.xml" title="Last.fm" />
9
+ <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."/>
10
+ <meta http-equiv="content-language" content="en" />
11
+ <meta name="robots" content="NOODP" />
12
+
13
+ <link rel="icon" href="http://cdn.last.fm/flatness/favicon.2.ico" />
14
+ <link rel="icon" type="image/png" href="http://cdn.last.fm/flatness/favicon.2.png" />
15
+ <link rel="apple-touch-icon" href="http://cdn.last.fm/flatness/apple-touch-icon.png" />
16
+
17
+
18
+
19
+ <link type="text/html" rel="alternate" hreflang="de" href="http://www.lastfm.de/api/show?service=396" />
20
+ <link type="text/html" rel="alternate" hreflang="es" href="http://www.lastfm.es/api/show?service=396" />
21
+ <link type="text/html" rel="alternate" hreflang="fr" href="http://www.lastfm.fr/api/show?service=396" />
22
+ <link type="text/html" rel="alternate" hreflang="it" href="http://www.lastfm.it/api/show?service=396" />
23
+ <link type="text/html" rel="alternate" hreflang="ja" href="http://www.lastfm.jp/api/show?service=396" />
24
+ <link type="text/html" rel="alternate" hreflang="pl" href="http://www.lastfm.pl/api/show?service=396" />
25
+ <link type="text/html" rel="alternate" hreflang="pt" href="http://www.lastfm.com.br/api/show?service=396" />
26
+ <link type="text/html" rel="alternate" hreflang="ru" href="http://www.lastfm.ru/api/show?service=396" />
27
+ <link type="text/html" rel="alternate" hreflang="sv" href="http://www.lastfm.se/api/show?service=396" />
28
+ <link type="text/html" rel="alternate" hreflang="tr" href="http://www.lastfm.com.tr/api/show?service=396" />
29
+ <link type="text/html" rel="alternate" hreflang="cn" href="http://cn.last.fm/api/show?service=396" />
30
+
31
+
32
+ <!--[if LT IE 7]>
33
+ <style type="text/css">
34
+ .transparent_png {
35
+ behavior: url('/pngbehavior2.htc');
36
+ }
37
+ </style>
38
+ <![endif]-->
39
+ <link rel="stylesheet" href="http://cdn.last.fm/css/release-lastfm/130860/main.css" type="text/css" />
40
+ <link rel="stylesheet" href="http://cdn.last.fm/css/release-lastfm/130860/components.css" type="text/css" />
41
+ <link rel="stylesheet" href="http://cdn.last.fm/css/release-lastfm/130860/dialog.css" type="text/css" />
42
+ <link rel="stylesheet" href="http://cdn.last.fm/css/release-lastfm/130860/form/typeahead.css" type="text/css" />
43
+ <link rel="stylesheet" href="http://cdn.last.fm/css/release-lastfm/130860/dev/console.css" type="text/css" />
44
+
45
+ <script type="text/javascript" src="http://cdn.last.fm/javascript/release-lastfm/130861/lib/prototype.js"></script>
46
+ <script type="text/javascript" src="http://cdn.last.fm/javascript/release-lastfm/130861/lib/scriptaculous.js"></script>
47
+ <script type="text/javascript" src="http://cdn.last.fm/javascript/release-lastfm/130861/lib/ufo.js"></script>
48
+
49
+ <!-- Create our namespace -->
50
+ <script type="text/javascript" src="http://cdn.last.fm/javascript/release-lastfm/130861/LFM.js"></script>
51
+
52
+
53
+ <script type="text/javascript" src="http://cdn.last.fm/javascript/release-lastfm/130861/console.js"></script>
54
+
55
+ <script type="text/javascript">
56
+
57
+ LFM.set("config", { FOD_TRACKING: false });
58
+
59
+ 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});
60
+
61
+
62
+
63
+ LFM.set("String", {
64
+ toRedStr: "Simply Red",
65
+ toBlackStr: "Paint it Black",
66
+
67
+ okText: "OK",
68
+ cancelText: "Cancel",
69
+ clickToEditText: "Click to edit",
70
+ savingText: "Saving…",
71
+ loadingText: "Loading…",
72
+ deletingText: "Deleting…",
73
+ thereWasAnError: "There was an error.",
74
+ dialogLoadError: "There was an error loading this dialog.",
75
+ fileTooBig: "Sorry, the file is too big.",
76
+ noFile: "Please choose a file.",
77
+ uploadCancelled: "Upload Cancelled.",
78
+ deleteMessageTitle: "Delete Message",
79
+ deleteMessagePrompt: "Are you sure you want to delete this message?",
80
+ deleteFriendPrompt: "Are you sure you want to delete this friend?",
81
+ deleteImage: "Are you sure you want to delete this image?",
82
+ deleteButtonText: "Delete",
83
+ done: "Done",
84
+
85
+
86
+ backText: "Back",
87
+
88
+ yesText: "Yes",
89
+ noText: "No",
90
+
91
+ saveText: "Save",
92
+ saveTitle: "Add to profile",
93
+
94
+ sendText: "Send",
95
+ sendTitle: "Share with friends",
96
+
97
+ addTitle: "Add to library",
98
+
99
+ tagTitle: "Add tags",
100
+
101
+ playlistTitle: "Add to playlist",
102
+
103
+ obsessionTitle: "Personalise your obsession",
104
+
105
+ befriendTitle: "Add a friend",
106
+
107
+ joinTitle: "Join this group",
108
+
109
+ loved: "Loved",
110
+
111
+ RemoveFromLibraryTitle: "Remove from library",
112
+
113
+ uploadImageTitle: "Upload Image",
114
+ uploadVideoTitle: "Upload Video",
115
+
116
+ usernoteTitle: "Add a note",
117
+
118
+ flageventTitle: "Flag for review",
119
+
120
+ setLocationTitle: "Set your Location",
121
+
122
+ newWindowTooltip: "This link will open in a new window",
123
+ unloadWarningMessage: "This will stop Radio Playback",
124
+ trackLoved: "You loved this track",
125
+ playbackStopped: "Playback stopped",
126
+ loadingTrackInfo: "Loading track information",
127
+ errorLoadingTrackInfo: "Error loading track information",
128
+
129
+ uploadMessages: {
130
+ mayTakeLonger: "Sorry, this may take slightly longer than usual. Hold on a couple of seconds.",
131
+ uploading: "Uploading…",
132
+ endUploading: "Done",
133
+ progressDisplay: "PERCENTUPLOADED% complete (TRANSFERRATE kb/s) – TIMEREMAINING seconds remaining",
134
+ progressComplete: "100% complete",
135
+ failedRetrying: "Failed retrying upload, bailed.",
136
+ processingMedia: "Processing media…",
137
+ unsupportedFormat: "Sorry, the file you uploaded isn’t encoded in a supported format. Please try again.",
138
+ 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."
139
+ }
140
+ });
141
+
142
+ LFM.set("Element", {
143
+ 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\" \/>",
144
+ icon_tag: "<img class=\"tag_icon transparent_png\" width=\"14\" height=\"14\" src=\"http:\/\/cdn.last.fm\/flatness\/global\/icon_tag3.png\" \/>",
145
+ icon_dismiss: "<img class=\"dismiss_icon transparent_png\" width=\"13\" height=\"13\" src=\"http:\/\/cdn.last.fm\/flatness\/global\/icon_delete.2.png\" \/>",
146
+ icon_play: "<img class=\"play_icon transparent_png\" width=\"17\" height=\"17\" alt=\"Play\" src=\"http:\/\/cdn.last.fm\/flatness\/global\/icon_play.png\" \/>"
147
+ }); </script>
148
+
149
+ <script type="text/javascript" src="http://cdn.last.fm/javascript/release-lastfm/130861/components.js"></script>
150
+ <script type="text/javascript" src="http://cdn.last.fm/javascript/release-lastfm/130861/flash.js"></script>
151
+ <script type="text/javascript" src="http://cdn.last.fm/javascript/release-lastfm/130861/dialog.js"></script>
152
+ <script type="text/javascript" src="http://cdn.last.fm/javascript/release-lastfm/130861/form/typeahead.js"></script>
153
+
154
+ <script type="text/javascript">
155
+
156
+ document.observe("dom:loaded", function () {
157
+ if (typeof ieHover !== 'undefined') {
158
+ ieHover.setUp();
159
+ }
160
+ });
161
+
162
+ </script>
163
+
164
+ </head>
165
+
166
+
167
+ <body class="a-show">
168
+
169
+
170
+
171
+ <!-- SiteCatalyst code version: H.16.
172
+ Copyright 1997-2008 Omniture, Inc. More info available at
173
+ http://www.omniture.com -->
174
+
175
+ <script>var s = false, s_gi = false;</script>
176
+ <script src="http://cdn.last.fm/omniture/9/omniture-core.js"></script>
177
+ <script>
178
+
179
+ /* You may give each page an identifying name, server, and channel on
180
+ the next lines. */
181
+ if (s) {
182
+ s.pageName="Api/Show/";
183
+ s.server="";
184
+ s.channel="";
185
+ s.pageType="other";
186
+
187
+ s.prop1="api"; // namespace
188
+ s.prop2="show"; // controller
189
+ s.prop3=""; // action
190
+
191
+
192
+
193
+
194
+ s.prop10="lfm"; // logged in/out
195
+
196
+ s.prop12="last.fm"; // url extension
197
+
198
+ s.prop13=""; // Member user id
199
+
200
+ s.prop14=""; // Ad source
201
+ s.prop15=""; // Ad id
202
+ s.prop16=""; // Ad size
203
+ s.prop18=s.getTimeParting('h',0,2009); // Set hour
204
+ s.prop19=s.getTimeParting('d',0,2009); // Set day
205
+
206
+
207
+
208
+
209
+
210
+ s.prop32 = ""; // TODO: 1st day of visit
211
+ s.prop33 = "en";
212
+
213
+
214
+
215
+ /* Success Events */
216
+ s.events="";
217
+
218
+ /* E-commerce Variables */
219
+ // s.campaign="";
220
+ s.state="";
221
+ s.zip="";
222
+ s.products="";
223
+ s.purchaseID="";
224
+ s.eVar1="";
225
+ s.eVar2 = s.pageName; // Page name
226
+ s.eVar3="";
227
+
228
+
229
+ s.eVar10="lfm"; // logged in/out
230
+
231
+
232
+
233
+
234
+
235
+ s.eVar26=""; // OnClick Location
236
+ s.eVar27=""; // Download Platform
237
+ s.eVar28=""; // Buy/Download Location
238
+
239
+ s.eVar29=""; // TODO: 1st day of visit
240
+ s.eVar30=s.prop12; // url extension
241
+
242
+ s.eVar31=s.getNewRepeat(); // new/repeat visitor
243
+ s.eVar32=s.getDaysSinceLastVisit(); // Days since last visit
244
+
245
+ s.eVar33=""; // Ad source
246
+ s.eVar34=""; // Ad id
247
+ s.eVar35=""; // Ad size
248
+
249
+ s.eVar36=""; // Member user id
250
+
251
+ s.eVar37=s.prop33; // User language
252
+
253
+ s.eVar38="< 10,000"; // User scrobbles < 10,000
254
+
255
+
256
+ // Set vars to pass with exit/download/custom links called by s.tl()
257
+ // * Click location
258
+ s.linkTrackVars="eVar26";
259
+
260
+ /************* DO NOT ALTER ANYTHING BELOW THIS LINE ! **************/
261
+ var s_code = s.t(); if (s_code) document.write(s_code);
262
+ }
263
+
264
+ </script>
265
+ <script type="text/javascript"><!--
266
+ if(navigator.appVersion.indexOf('MSIE')>=0)document.write(unescape('%3C')+'\!-'+'-')
267
+ //--></script>
268
+ <!--/DO NOT REMOVE/-->
269
+ <!-- End SiteCatalyst code version: H.11. -->
270
+
271
+ <script type="text/javascript" src="http://edge.quantserve.com/quant.js"></script>
272
+ <script type="text/javascript">
273
+
274
+ var _qoptions = {
275
+ labels: "LastFM"
276
+ };
277
+ var _qacct="p-51jhoCdjGFIVU";
278
+ quantserve();
279
+
280
+ </script>
281
+ <noscript>
282
+ <a href="http://www.quantcast.com/p-51jhoCdjGFIVU" target="_blank"><img src="http://pixel.quantserve.com/pixel/p-51jhoCdjGFIVU.gif?labels=LastFM" 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="/home" id="lastfmLogo">
299
+ <img src="http://cdn.last.fm/flatness/logo.6.png" width="103" height="50" alt="Last.fm" />
300
+ <img src="http://cdn.last.fm/flatness/logo_black.3.png" width="103" height="50" style="display: none;" alt="Last.fm" />
301
+ <span>Last.fm</span>
302
+ </a></h1>
303
+ <ul id="primaryNav" class="clearit">
304
+ <li id="musicNav">
305
+ <a href="/music">Music</a>
306
+ </li>
307
+ <li id="videosNav">
308
+ <a href="/videos">Videos</a>
309
+ </li>
310
+ <li id="listenNav">
311
+ <a href="/listen">Radio</a>
312
+ </li>
313
+ <li id="eventsNav">
314
+ <a href="/events">Events</a>
315
+ </li>
316
+ <li id="chartsNav">
317
+ <a href="/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 id="siteSearchBox" placeholder="Search" type="text" autosave="fm.last.searchhistory" results="5" name="q" size="16" />
331
+
332
+ <input class="submit" type="submit" value="" title="Go" id="siteSearchSubmit" />
333
+ </form>
334
+ </li>
335
+ </ul>
336
+
337
+ <div id="idBadger">
338
+ <a href="/user/knaveofdiamonds" id="idBadgerUser" title="Roland Swingler, United Kingdom"><span class="userImage"><img width="16" height="16" alt="" src="http://userserve-ak.last.fm/serve/34s/10636291.jpg" /></span> <span>knaveofdiamonds</span></a><a href="/user/knaveofdiamonds" id="idBadgerDropper" title="Roland Swingler, United Kingdom">▼</a>
339
+ <ul id="idBadgerDropDown">
340
+ <li><a href="/home">Home</a></li>
341
+ <li><a href="/user/knaveofdiamonds" title="Roland Swingler, United Kingdom">Profile</a></li>
342
+ <li><a href="/home/recs">Recommended</a></li>
343
+ <li><a href="/user/knaveofdiamonds/library" title="">Library</a></li>
344
+ <li><a href="/user/knaveofdiamonds/events" title="">Events</a></li>
345
+ <li><a href="/settings">Settings</a></li>
346
+ </ul>
347
+ </div>
348
+ <div id="headLinks">
349
+ <p>
350
+ <a href="/login/logout">Log out</a> | <a href="/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="/help">Help</a>
359
+ |
360
+ <img src="http://cdn.last.fm/depth/flags/mini/globe.gif" id="langToggleFlag" alt="Change language" />
361
+ <a href="/api/show?service=396&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 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="/api/intro">Overview</a></li>
763
+ <li><a href="/api/authentication">User Authentication</a></li>
764
+ <li><a href="/api/submissions">Submissions</a></li>
765
+ <li><a href="/api/radio">Radio API</a></li>
766
+ <li><a href="/api/playlists">Playlists</a></li>
767
+ <li><a href="/api/downloads">Downloads</a></li>
768
+ <li><a href="/api/rest">REST requests</a></li>
769
+ <li><a href="/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="/api/show/?service=302">album.addTags</a></li>
777
+ <li><a href="/api/show/?service=290">album.getInfo</a></li>
778
+ <li><a href="/api/show/?service=317">album.getTags</a></li>
779
+ <li><a href="/api/show/?service=314">album.removeTag</a></li>
780
+ <li><a href="/api/show/?service=357">album.search</a></li>
781
+ </ul>
782
+ <li class="package"><b>Artist</b></li>
783
+ <ul>
784
+ <li><a href="/api/show/?service=303">artist.addTags</a></li>
785
+ <li><a href="/api/show/?service=117">artist.getEvents</a></li>
786
+ <li><a href="/api/show/?service=407">artist.getImages</a></li>
787
+ <li><a href="/api/show/?service=267">artist.getInfo</a></li>
788
+ <li><a href="/api/show/?service=397">artist.getShouts</a></li>
789
+ <li><a href="/api/show/?service=119">artist.getSimilar</a></li>
790
+ <li><a href="/api/show/?service=318">artist.getTags</a></li>
791
+ <li><a href="/api/show/?service=287">artist.getTopAlbums</a></li>
792
+ <li><a href="/api/show/?service=310">artist.getTopFans</a></li>
793
+ <li><a href="/api/show/?service=288">artist.getTopTags</a></li>
794
+ <li><a href="/api/show/?service=277">artist.getTopTracks</a></li>
795
+ <li><a href="/api/show/?service=315">artist.removeTag</a></li>
796
+ <li><a href="/api/show/?service=272">artist.search</a></li>
797
+ <li><a href="/api/show/?service=306">artist.share</a></li>
798
+ <li><a href="/api/show/?service=408">artist.shout</a></li>
799
+ </ul>
800
+ <li class="package"><b>Auth</b></li>
801
+ <ul>
802
+ <li><a href="/api/show/?service=266">auth.getMobileSession</a></li>
803
+ <li><a href="/api/show/?service=125">auth.getSession</a></li>
804
+ <li><a href="/api/show/?service=265">auth.getToken</a></li>
805
+ <li><a href="/api/show/?service=133">auth.getWebSession</a></li>
806
+ </ul>
807
+ <li class="package"><b>Event</b></li>
808
+ <ul>
809
+ <li><a href="/api/show/?service=307">event.attend</a></li>
810
+ <li><a href="/api/show/?service=391">event.getAttendees</a></li>
811
+ <li><a href="/api/show/?service=292">event.getInfo</a></li>
812
+ <li><a href="/api/show/?service=399">event.getShouts</a></li>
813
+ <li><a href="/api/show/?service=350">event.share</a></li>
814
+ <li><a href="/api/show/?service=409">event.shout</a></li>
815
+ </ul>
816
+ <li class="package"><b>Geo</b></li>
817
+ <ul>
818
+ <li><a href="/api/show/?service=270">geo.getEvents</a></li>
819
+ <li><a href="/api/show/?service=297">geo.getTopArtists</a></li>
820
+ <li><a href="/api/show/?service=298">geo.getTopTracks</a></li>
821
+ </ul>
822
+ <li class="package"><b>Group</b></li>
823
+ <ul>
824
+ <li><a href="/api/show/?service=379">group.getMembers</a></li>
825
+ <li><a href="/api/show/?service=293">group.getWeeklyAlbumChart</a></li>
826
+ <li><a href="/api/show/?service=294">group.getWeeklyArtistChart</a></li>
827
+ <li><a href="/api/show/?service=295">group.getWeeklyChartList</a></li>
828
+ <li><a href="/api/show/?service=296">group.getWeeklyTrackChart</a></li>
829
+ </ul>
830
+ <li class="package"><b>Library</b></li>
831
+ <ul>
832
+ <li><a href="/api/show/?service=370">library.addAlbum</a></li>
833
+ <li><a href="/api/show/?service=371">library.addArtist</a></li>
834
+ <li><a href="/api/show/?service=372">library.addTrack</a></li>
835
+ <li><a href="/api/show/?service=321">library.getAlbums</a></li>
836
+ <li><a href="/api/show/?service=322">library.getArtists</a></li>
837
+ <li><a href="/api/show/?service=323">library.getTracks</a></li>
838
+ </ul>
839
+ <li class="package"><b>Playlist</b></li>
840
+ <ul>
841
+ <li><a href="/api/show/?service=337">playlist.addTrack</a></li>
842
+ <li><a href="/api/show/?service=365">playlist.create</a></li>
843
+ <li><a href="/api/show/?service=271">playlist.fetch</a></li>
844
+ </ul>
845
+ <li class="package"><b>Radio</b></li>
846
+ <ul>
847
+ <li><a href="/api/show/?service=256">radio.getPlaylist</a></li>
848
+ <li><a href="/api/show/?service=160">radio.tune</a></li>
849
+ </ul>
850
+ <li class="package"><b>Tag</b></li>
851
+ <ul>
852
+ <li><a href="/api/show/?service=311">tag.getSimilar</a></li>
853
+ <li><a href="/api/show/?service=283">tag.getTopAlbums</a></li>
854
+ <li><a href="/api/show/?service=284">tag.getTopArtists</a></li>
855
+ <li><a href="/api/show/?service=276">tag.getTopTags</a></li>
856
+ <li><a href="/api/show/?service=285">tag.getTopTracks</a></li>
857
+ <li><a href="/api/show/?service=358">tag.getWeeklyArtistChart</a></li>
858
+ <li><a href="/api/show/?service=359">tag.getWeeklyChartList</a></li>
859
+ <li><a href="/api/show/?service=273">tag.search</a></li>
860
+ </ul>
861
+ <li class="package"><b>Tasteometer</b></li>
862
+ <ul>
863
+ <li><a href="/api/show/?service=258">tasteometer.compare</a></li>
864
+ </ul>
865
+ <li class="package"><b>Track</b></li>
866
+ <ul>
867
+ <li><a href="/api/show/?service=304">track.addTags</a></li>
868
+ <li><a href="/api/show/?service=261">track.ban</a></li>
869
+ <li><a href="/api/show/?service=356">track.getInfo</a></li>
870
+ <li><a href="/api/show/?service=319">track.getSimilar</a></li>
871
+ <li><a href="/api/show/?service=320">track.getTags</a></li>
872
+ <li><a href="/api/show/?service=312">track.getTopFans</a></li>
873
+ <li><a href="/api/show/?service=289">track.getTopTags</a></li>
874
+ <li><a href="/api/show/?service=260">track.love</a></li>
875
+ <li><a href="/api/show/?service=316">track.removeTag</a></li>
876
+ <li><a href="/api/show/?service=286">track.search</a></li>
877
+ <li><a href="/api/show/?service=305">track.share</a></li>
878
+ </ul>
879
+ <li class="package"><b>User</b></li>
880
+ <ul>
881
+ <li><a href="/api/show/?service=291">user.getEvents</a></li>
882
+ <li><a href="/api/show/?service=263">user.getFriends</a></li>
883
+ <li><a href="/api/show/?service=344">user.getInfo</a></li>
884
+ <li><a href="/api/show/?service=329">user.getLovedTracks</a></li>
885
+ <li><a href="/api/show/?service=264">user.getNeighbours</a></li>
886
+ <li><a href="/api/show/?service=343">user.getPastEvents</a></li>
887
+ <li><a href="/api/show/?service=313">user.getPlaylists</a></li>
888
+ <li><a href="/api/show/?service=278">user.getRecentTracks</a></li>
889
+ <li><a href="/api/show/?service=388">user.getRecommendedArtists</a></li>
890
+ <li><a href="/api/show/?service=375">user.getRecommendedEvents</a></li>
891
+ <li><a href="/api/show/?service=401">user.getShouts</a></li>
892
+ <li><a href="/api/show/?service=299">user.getTopAlbums</a></li>
893
+ <li><a href="/api/show/?service=300">user.getTopArtists</a></li>
894
+ <li><a href="/api/show/?service=123">user.getTopTags</a></li>
895
+ <li><a href="/api/show/?service=301">user.getTopTracks</a></li>
896
+ <li><a href="/api/show/?service=279">user.getWeeklyAlbumChart</a></li>
897
+ <li><a href="/api/show/?service=281">user.getWeeklyArtistChart</a></li>
898
+ <li><a href="/api/show/?service=280">user.getWeeklyChartList</a></li>
899
+ <li><a href="/api/show/?service=282">user.getWeeklyTrackChart</a></li>
900
+ <li><a href="/api/show/?service=411">user.shout</a></li>
901
+ </ul>
902
+ <li class="package"><b>Venue</b></li>
903
+ <ul>
904
+ <li><a href="/api/show/?service=394">venue.getEvents</a></li>
905
+ <li><a href="/api/show/?service=395">venue.getPastEvents</a></li>
906
+ <li><a href="/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="/api">Last.fm Web Services</a></h1>
912
+ <a href="/api/intro">API</a> | <a href="/api/feeds">Feeds</a> | <a href="/api/account">Your API Account</a>
913
+ </div> <h1>venue.search</h1>
914
+ <div class="wsdescription">
915
+ Search for a venue by venue name
916
+ </div>
917
+ <p class="sampleurl">
918
+ e.g. <a href="http://ws.audioscrobbler.com/2.0/?method=venue.search&api_key=b25b959554ed76058ac220b7b2e0a026&venue=arena">http://ws.audioscrobbler.com/2.0/?method=venue.search&api_key=b25b959554ed76058ac220b7b2e0a026&...</a>
919
+ </p>
920
+ <div id="wsdescriptor">
921
+ <h2>Params</h2>
922
+ <span class="param">venue</span> (Required) : The venue name you would like to search for.<br />
923
+ <span class="param">page</span> (Optional) : The results page you would like to fetch<br />
924
+ <span class="param">limit</span> (Optional) : The number of results to fetch per page. Defaults to 50.<br />
925
+ <span class="param">country</span> (Optional) : Filter your results by country. Expressed as an ISO 3166-2 code.<br />
926
+ <span class="param">api_key</span> (Required) : A Last.fm API key.<br />
927
+ <h2>Auth</h2>
928
+
929
+ This service does <b>not</b> require authentication.
930
+ <h2>Sample Response</h2>
931
+ <script type="text/javascript">
932
+
933
+ function showWSExcerptSubmit() {
934
+ $('updateexcerpt').style.display = 'block';
935
+ }
936
+
937
+ function hideWSExcerptSubmit() {
938
+ $('updateexcerpt').style.display = 'none';
939
+ }
940
+
941
+ function showWSExcerptSuccess() {
942
+ $('success').style.display = 'block';
943
+ }
944
+
945
+ function updateExcerpt(excerpt,service) {
946
+ new Ajax.Request('/api/updateExcerpt', {
947
+ method: 'post',
948
+ parameters: 'excerpt='+encodeURIComponent(excerpt.value)+'&service='+service.value,
949
+ onSuccess: onUpdateExcerpt
950
+ });
951
+ }
952
+
953
+ function onUpdateExcerpt(response) {
954
+ if(response.responseText) {
955
+ hideWSExcerptSubmit();
956
+ showWSExcerptSuccess();
957
+ $('excerpt').onblur();
958
+ }
959
+ }
960
+
961
+ </script>
962
+ <div id="sample"><pre>&lt;results for=&quot;arena&quot;&gt;
963
+ &lt;opensearch:Query role=&quot;request&quot; searchTerms=&quot;arena&quot; startPage=&quot;1&quot;/&gt;
964
+ &lt;opensearch:totalResults&gt;92&lt;/opensearch:totalResults&gt;
965
+ &lt;opensearch:startIndex&gt;0&lt;/opensearch:startIndex&gt;
966
+ &lt;opensearch:itemsPerPage&gt;50&lt;/opensearch:itemsPerPage&gt;
967
+ &lt;venuematches&gt;
968
+ &lt;venue&gt;
969
+ &lt;id&gt;8816229&lt;/id&gt;
970
+ &lt;name&gt;Arena&lt;/name&gt;
971
+ &lt;location&gt;
972
+ &lt;city&gt;Exeter&lt;/city&gt;
973
+ &lt;country&gt;United Kingdom&lt;/country&gt;
974
+ &lt;street/&gt;
975
+ &lt;postalcode/&gt;
976
+ &lt;geo:point&gt;
977
+ &lt;geo:lat&gt;50.7&lt;/geo:lat&gt;
978
+ &lt;geo:long&gt;-3.5333333&lt;/geo:long&gt;
979
+ &lt;/geo:point&gt;
980
+ &lt;/location&gt;
981
+ &lt;url&gt;http://www.last.fm/venue/8816229&lt;/url&gt;
982
+ &lt;/venue&gt;
983
+ ...
984
+ &lt;/venuematches&gt;
985
+ &lt;/results&gt;</pre></div>
986
+
987
+ <h2>Errors</h2>
988
+ <ul>
989
+ <li><span class="param">2</span> : Invalid service -This service does not exist</li>
990
+ <li><span class="param">3</span> : Invalid Method - No method with that name in this package</li>
991
+ <li><span class="param">4</span> : Authentication Failed - You do not have permissions to access the service</li>
992
+ <li><span class="param">5</span> : Invalid format - This service doesn't exist in that format</li>
993
+ <li><span class="param">6</span> : Invalid parameters - Your request is missing a required parameter</li>
994
+ <li><span class="param">7</span> : Invalid resource specified</li>
995
+ <li><span class="param">9</span> : Invalid session key - Please re-authenticate</li>
996
+ <li><span class="param">10</span> : Invalid API key - You must be granted a valid key by last.fm</li>
997
+ <li><span class="param">11</span> : Service Offline - This service is temporarily offline. Try again later.</li>
998
+ <li><span class="param">12</span> : Subscription Error - The user needs to be subscribed in order to do that</li>
999
+ <li><span class="param">13</span> : Invalid method signature supplied</li>
1000
+ <li><span class="param">18</span> : This user has no free radio plays left. Subscription required.</li>
1001
+ </ul>
1002
+ </div>
1003
+ </div>
1004
+ </div>
1005
+ </div>
1006
+
1007
+ <div id="LastFooter">
1008
+
1009
+ <div id="footer_ads" style="display: none;" class="clearit">
1010
+ <div class="footer_ad_wrapper">
1011
+
1012
+ <!-- Adserving start -->
1013
+
1014
+ <div id="LastAd_Footer1" class="LastAd">
1015
+ <div align="center">
1016
+ <script type="text/javascript">
1017
+ if ($("footer_ads")) $("footer_ads").show();
1018
+ if(typeof writeFooter1 == 'function') writeFooter1();
1019
+ </script>
1020
+ </div>
1021
+ </div>
1022
+ <script>
1023
+ $("LastAd_Footer1").hide();
1024
+ </script>
1025
+ <!-- Adserving end --> <!-- Adserving start -->
1026
+
1027
+ <div id="LastAd_Footer2" class="LastAd">
1028
+ <div align="center">
1029
+ <script type="text/javascript">
1030
+ if ($("footer_ads")) $("footer_ads").show();
1031
+ if(typeof writeFooter2 == 'function') writeFooter2();
1032
+ </script>
1033
+ </div>
1034
+ </div>
1035
+ <script>
1036
+ $("LastAd_Footer2").hide();
1037
+ </script>
1038
+ <!-- Adserving end --> <!-- Adserving start -->
1039
+
1040
+ <div id="LastAd_Footer3" class="LastAd">
1041
+ <div align="center">
1042
+ <script type="text/javascript">
1043
+ if ($("footer_ads")) $("footer_ads").show();
1044
+ if(typeof writeFooter3 == 'function') writeFooter3();
1045
+ </script>
1046
+ </div>
1047
+ </div>
1048
+ <script>
1049
+ $("LastAd_Footer3").hide();
1050
+ </script>
1051
+ <!-- Adserving end --> <!-- Adserving start -->
1052
+
1053
+ <div id="LastAd_Footer4" class="LastAd last">
1054
+ <div align="center">
1055
+ <script type="text/javascript">
1056
+ if ($("footer_ads")) $("footer_ads").show();
1057
+ if(typeof writeFooter4 == 'function') writeFooter4();
1058
+ </script>
1059
+ </div>
1060
+ </div>
1061
+ <script>
1062
+ $("LastAd_Footer4").hide();
1063
+ </script>
1064
+ <!-- Adserving end -->
1065
+ </div><!-- .footer_ad_wrapper -->
1066
+ </div><!-- #footer_ads -->
1067
+
1068
+ <ul id="footerStuff" class="clearit">
1069
+ <li><div id="footerMessage">
1070
+ <h3>What’s New</h3>
1071
+ <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>
1072
+ </div><!-- #footerMessage --></li>
1073
+
1074
+ <li><p id="uploadYourMusic">
1075
+ <strong>Do you make music? Upload it!</strong><br /><a href="/uploadmusic?accountType=artist">Artists</a> or <a href="/uploadmusic?accountType=label">Labels</a>
1076
+ </p></li>
1077
+ </ul><!-- #footerStuff -->
1078
+
1079
+ <div id="footer_content">
1080
+ <ul id="footerLinks" class="clearit">
1081
+ <li class="first">
1082
+ <dl>
1083
+ <dt>Learn About Us</dt>
1084
+ <dd><a href="/about/contact">Contact</a></dd>
1085
+ <dd><a href="/about">About Us</a></dd>
1086
+ <dd><a href="/about/team">Team</a></dd>
1087
+ <dd><a href="/about/jobs">Jobs</a></dd>
1088
+ <dd><a href="/resources">Media Kit</a></dd>
1089
+ <dd><a href="/advertise">Advertise</a></dd>
1090
+ </dl>
1091
+ </li>
1092
+ <li>
1093
+ <dl>
1094
+ <dt>Get Help</dt>
1095
+ <dd><a href="/help/faq">FAQ</a></dd>
1096
+ <dd><a href="/forum/21713">Website Support</a></dd>
1097
+ <dd><a href="/forum/34905">Scrobbler Support</a></dd>
1098
+ <dd><a href="/group/Last.fm+for+iPhone+and+iPod+Touch">iPhone Support</a></dd>
1099
+ </dl>
1100
+ </li>
1101
+
1102
+ <li>
1103
+ <dl>
1104
+ <dt>Join In</dt>
1105
+ <dd><a href="/users">Find People</a></dd>
1106
+ <dd><a href="/users/groups">Find Groups</a></dd>
1107
+ <dd><a href="/forum">Forums</a></dd>
1108
+ <dd><a href="/help/guidelines">Community Guidelines</a></dd>
1109
+ <dd><a href="/about/moderators">Moderators</a></dd>
1110
+ <dd><a href="/promotions">Contests &amp; Promotions</a></dd>
1111
+ </dl>
1112
+ </li>
1113
+ <li class="last">
1114
+ <dl>
1115
+ <dt>Do More</dt>
1116
+ <dd><a href="/download">Last.fm Scrobbler</a></dd>
1117
+ <dd><a href="/download#content_ipod">iPod Scrobbler</a></dd>
1118
+ <dd><a href="/download#content_iphone">iPhone App</a></dd>
1119
+ <dd><a href="http://build.last.fm">More Apps</a></dd>
1120
+ <dd><a href="/music/+free-music-downloads">Free Music Downloads</a></dd>
1121
+ <dd><a href="/hardware">Hardware</a></dd>
1122
+ <dd><a href="/widgets">Widgets</a></dd> <dd><a href="/tools/charts">Chart Images</a></dd>
1123
+ <dd><a href="/subscribe">Subscribe</a></dd>
1124
+ <dd><a href="/api">API</a></dd>
1125
+ </dl>
1126
+ </li>
1127
+ </ul><!-- #footerLinks -->
1128
+
1129
+ <div id="justCantGetEnough" class="clearit">
1130
+ <blockquote>“Cleans Your Floor Without Last.fm.”</blockquote>
1131
+ <p>
1132
+ <strong>More Last.fm Sites:</strong>
1133
+ <a href="http://blog.last.fm/">Blog</a>
1134
+ | <a href="http://musicmanager.last.fm">Music Manager</a>
1135
+ | <a href="http://build.last.fm">Build</a>
1136
+ | <a href="http://playground.last.fm">Playground</a>
1137
+ | <a href="http://www.last.fm/bestof/2008">Best of 2008</a>
1138
+ </p>
1139
+ </div>
1140
+
1141
+ <div id="legalities">
1142
+ <div id="cbsi_f">
1143
+ <form>
1144
+ <script language="javascript">
1145
+ 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>");
1146
+ </script>
1147
+ </form>
1148
+ <noscript>
1149
+ <a href="http://www.bnet.com">BNET</a> | <a href="http://www.cbscares.com">CBS Cares</a> | <a href="http://www.cbssports.com/cbscollegesports/">CBS College Sports</a> | <a href="http://www.cbsradio.com/streaming/">CBS Radio</a> | <a href="http://www.cbs.com">CBS.com</a> | <a href="http://www.cbsnews.com">CBSNews.com</a> | <a href="http://www.cbssports.com">CBSSports.com</a> | <a href="http://www.chow.com">CHOW</a> | <a href="http://www.cnet.com">CNET</a> | <a href="http://www.cnetcontentsolutions.com">CNET Content Solutions</a> | <a href="http://www.gamespot.com">GameSpot</a> | <a href="http://www.cnetnetworks.com/advertise/media-kit/international.html?tag=ft">International</a> | <a href="http://www.last.fm">Last.fm</a> | <a href="http://www.maxpreps.com">MaxPreps</a> | <a href="http://www.metacritic.com">Metacritic.com</a> | <a href="http://moneywatch.bnet.com">Moneywatch</a> | <a href="http://www.mp3.com">MP3.com</a> | <a href="http://www.mysimon.com">mySimon</a> | <a href="http://www.ncaa.com">NCAA</a> | <a href="http://www.search.com">Search.com</a> | <a href="http://www.shopper.com">Shopper.com</a> | <a href="http://www.sho.com">Showtime</a> | <a href="http://www.techrepublic.com">TechRepublic</a> | <a href="http://www.theinsider.com">The Insider</a> | <a href="http://www.tv.com">TV.com</a> | <a href="http://www.urbanbaby.com">UrbanBaby.com</a> | <a href="http://www.zdnet.com">ZDNet</a>
1150
+ </noscript>
1151
+ <p id="cbsi_f_pop">
1152
+ 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 -->
1153
+ </p>
1154
+ </div> <p id="copy">
1155
+ &copy; 2009 Last.fm Ltd. All rights reserved. |
1156
+ <a href="/legal/terms" target="_blank">Terms of Use</a>
1157
+ and <a href="/legal/privacy" target="_blank">Privacy Policy</a> | <span class="date">Updated November 21, 2008</span><br />
1158
+
1159
+ </p>
1160
+ </div><!-- #legalities -->
1161
+
1162
+ </div>
1163
+ </div><!-- #LastFooter -->
1164
+
1165
+ <ul id="langSelector" style="display: none; visibility: hidden;" class="nojs">
1166
+
1167
+
1168
+ <li><a href="http://www.lastfm.de/api/show?service=396&amp;setlang=de" class="icon"><img src="http://cdn.last.fm/depth/flags/mini/de.gif" /> <span>Deutsch</span></a></li>
1169
+ <li><a href="http://www.lastfm.es/api/show?service=396&amp;setlang=es" class="icon"><img src="http://cdn.last.fm/depth/flags/mini/es.gif" /> <span>Español</span></a></li>
1170
+ <li><a href="http://www.lastfm.fr/api/show?service=396&amp;setlang=fr" class="icon"><img src="http://cdn.last.fm/depth/flags/mini/fr.gif" /> <span>Français</span></a></li>
1171
+ <li><a href="http://www.lastfm.it/api/show?service=396&amp;setlang=it" class="icon"><img src="http://cdn.last.fm/depth/flags/mini/it.gif" /> <span>Italiano</span></a></li>
1172
+ <li><a href="http://www.lastfm.jp/api/show?service=396&amp;setlang=jp" class="icon"><img src="http://cdn.last.fm/depth/flags/mini/jp.gif" /> <span>日本語</span></a></li>
1173
+ <li><a href="http://www.lastfm.pl/api/show?service=396&amp;setlang=pl" class="icon"><img src="http://cdn.last.fm/depth/flags/mini/pl.gif" /> <span>Polski</span></a></li>
1174
+ <li><a href="http://www.lastfm.com.br/api/show?service=396&amp;setlang=pt" class="icon"><img src="http://cdn.last.fm/depth/flags/mini/pt.gif" /> <span>Português</span></a></li>
1175
+ <li><a href="http://www.lastfm.ru/api/show?service=396&amp;setlang=ru" class="icon"><img src="http://cdn.last.fm/depth/flags/mini/ru.gif" /> <span>Руccкий</span></a></li>
1176
+ <li><a href="http://www.lastfm.se/api/show?service=396&amp;setlang=sv" class="icon"><img src="http://cdn.last.fm/depth/flags/mini/se.gif" /> <span>Svenska</span></a></li>
1177
+ <li><a href="http://www.lastfm.com.tr/api/show?service=396&amp;setlang=tr" class="icon"><img src="http://cdn.last.fm/depth/flags/mini/tr.gif" /> <span>Türkçe</span></a></li>
1178
+ <li><a href="http://cn.last.fm/api/show?service=396&amp;setlang=zh" class="icon"><img src="http://cdn.last.fm/depth/flags/mini/zh.gif" /> <span>简体中文</span></a></li>
1179
+
1180
+ </ul>
1181
+
1182
+ <script>
1183
+
1184
+ $("langSelector").className = "js";
1185
+ LFM.set("Page", {
1186
+ navDropDown: new LFM.Display.DropDown(
1187
+ "headerLangToggle",
1188
+ "headerLangToggle",
1189
+ "langSelector",
1190
+ {
1191
+ align: "right",
1192
+ onShow: function (dropdown) {
1193
+ dropdown.ddbody.setStyle({
1194
+ top: (dropdown.ddbody.getStyle("top").toPixels() + 3) + "px"
1195
+ });
1196
+ }
1197
+ }
1198
+ )
1199
+ });
1200
+
1201
+ </script>
1202
+ <div id="multiButtonMenu" style="display: none;">
1203
+ <div>
1204
+ <ul class="lfmDropDownBody">
1205
+ <li class="mAddToLibrary"><a href="#">Add to my Library</a></li>
1206
+ <li class="mAddToFriends"><a href="#">Add to Friends</a></li>
1207
+
1208
+ <!-- <li class="save"><a href="#">Bookmark</a></li> -->
1209
+ <li class="mSend"><a href="#">Share</a></li>
1210
+
1211
+ <li class="mLove"><a href="#">Love track</a></li>
1212
+ <li class="mUnlove"><a href="#">Unlove track</a></li>
1213
+ <li class="mBan"><a href="#">Ban track from radio</a></li>
1214
+ <li class="mUnban"><a href="#">Unban track from radio</a></li>
1215
+
1216
+
1217
+ <li class="mAddTags"><a href="#">Add tags</a></li>
1218
+ <li class="mAddToPlaylist"><a href="#">Add to playlist</a></li>
1219
+ <li class="mMessage"><a href="#">Send a message</a></li>
1220
+ <li class="mEditDetails"><a href="#">Edit Details</a></li>
1221
+ <li class="mMessageAll"><a href="#">Message All Users</a></li>
1222
+ <li class="mEditPermissions"><a href="#">Edit Permissions</a></li>
1223
+ <li class="mAbdicate"><a href="#">Abdicate</a></li>
1224
+ <li class="mLeave"><a href="#">Leave Group</a></li>
1225
+
1226
+ <li class="mRemoveFromLibrary"><a href="#">Remove from your Library</a></li>
1227
+
1228
+ <li class="mLoading"><a href="#">&nbsp;</a></li>
1229
+ </ul>
1230
+ </div>
1231
+ </div>
1232
+
1233
+
1234
+ <script type="text/javascript" src="http://dw.com.com/js/dw.js"></script>
1235
+ <script type="text/javascript">
1236
+ DW.pageParams = {
1237
+ siteid: '190',
1238
+ ptid: '',
1239
+ onid: ''
1240
+ };
1241
+ DW.clear();
1242
+ </script>
1243
+ <noscript>
1244
+ <img src="http://dw.com.com/clear/c.gif?ts=1242849559&amp;sid=" />
1245
+ </noscript>
1246
+
1247
+
1248
+ <script src="http://surveys.cnet.com/html/surveys/1361.js"></script>
1249
+
1250
+ <script>
1251
+
1252
+ LFM.Button.MultiButton.setup();
1253
+ LFM.Display.setMinHeight();
1254
+
1255
+ </script>
1256
+
1257
+ </div>
1258
+ </div>
1259
+ </div>
1260
+ </body>
1261
+ </html>