$(document).ready(function(){ var token = getQueryVariable('token'), cache = new LastFMCache(), lastfm = new LastFM({ apiKey : 'aa407ffa24d827b3a28720666dd9143b', apiSecret : '0e9159247d87ec81b72ad85b9b606f23', cache : cache, }); container = $('#data-results'); Overture = { 'artists': { 'obj': [] }, 'songs': { 'obj': [] }, //songs whose 10 most popular songs are not on rdio /harsh realm 'hipsters': { 'obj': [] }, 'playlist': { 'params': [0,50] } }; lastfm.auth.getSession({ token: token },{ success: function(session) { container.text('Authenticated by last.fm'); //TODO set cookie //$.cookie('lastfm_token', session.key); lastfm.user.getRecommendedArtists({ user: session.name, limit: 250 }, session.session, { success: function(data) { container.text('Recommended Artists Received'); //for each artist $(data.recommendations.artist).each(function(i){ //push lastfm data to object (artist, influences) if (typeof this.context.artist[0] !== 'undefined' && typeof this.context.artist[1] === 'undefined') { Overture.artists.obj.push({ 'artist': this.name, 'influences': [this.context.artist[0].name] }); } else if (typeof this.context.artist[0] !== 'undefined' && typeof this.context.artist[1] !== 'undefined'){ Overture.artists.obj.push({ 'artist': this.name, 'influences': [this.context.artist[0].name, this.context.artist[1].name] }); } else { Overture.artists.obj.push({ 'artist': this.name }); } }); //TODO for first 25 artists, then again until 250 is reached getTracks(Overture.artists.obj, Overture.playlist.params[0], Overture.playlist.params[1]); }, error: function(code, message) { container.text(code, message); } }); }, error: function(code, message) { container.text(code, message); } }); }); function getQueryVariable(variable) { var query = window.location.search.substring(1); var vars = query.split('&'); for (var i = 0; i < vars.length; i++) { var pair = vars[i].split('='); if (decodeURIComponent(pair[0]) == variable) { return decodeURIComponent(pair[1]); } } } function getTracks(dataset, start, stop){ var iterations = [], //len = dataset.length; len = stop; //for (var i = start; i <= stop; i++) {} //for each artist in object, push echonest data to object (title, echonest_id, rdio_id) $.each(dataset, function(i){ var self = this, tracks = 10; if (i === stop) { return false; } //get song titles $.ajax({ url: 'http://developer.echonest.com/api/v4/song/search?', dataType: 'jsonp', ajaxI: i, data: { format: 'jsonp', results: tracks, api_key: 'BMFA0JN7IZ2RSW1TA', bucket: 'id:rdio-us-streaming', artist: this.artist, start: 1, sort: 'song_hotttnesss-desc', callback: '' }, success: function(data){ container.text(i); i = this.ajaxI; iterations.push(i); //search for the song with the rdio id and add it to the songs, for (var j = 0; j < tracks; j++) { if (data.response.songs[j].foreign_ids.length) { Overture.songs.obj.push({ 'artist': data.response.songs[j].artist_name, 'rdio': data.response.songs[j].foreign_ids[0].foreign_id.split(':').slice(-1)[0], 'title': data.response.songs[j].title, 'echonest': data.response.songs[j].id, 'influences': Overture.artists.obj[i].influences }); break; } else { Overture.hipsters.obj.push({ 'artist': data.response.songs[0].artist_name }); } } //when loop has looped if (parseInt(iterations.length) === parseInt(len)) { console.log('songs', Overture.songs.obj); console.log('artists', Overture.artists.obj); var track = Overture.songs.obj[0].rdio; container.text(''); R.ready(function() { var $el = $('#radio'), $play = $('#control-play'), $next = $('#control-next'), $position = $('#control-position'), $artwork = $('#data-artwork'), $track = $('#data-track'), $artist = $('#data-artist'), $album = $('#data-album'), $influences = $('#data-influences'); // for each object in object $.each(Overture.songs.obj, function(j){ container.append('