Created
July 8, 2012 14:09
-
-
Save banthar/3071072 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<html> | |
<head> | |
<script src=http://ajax.googleapis.com/ajax/libs/swfobject/2.2/swfobject.js></script> | |
<script src=https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js></script> | |
<script> | |
var api_key = "e4f035ebb7d9352b6f57cf5ab242e38d"; | |
var pendingRequests = 0; | |
function json(base, args, callback) { | |
var url = base; | |
for(var key in args) { | |
url+="&"+encodeURIComponent(key)+"="+encodeURIComponent(args[key]); | |
} | |
console.debug(url); | |
pendingRequests++; | |
return $.getJSON(url, function(response){ | |
pendingRequests--; | |
callback(response); | |
}); | |
} | |
function youtube(method, args, callback) { | |
var url = "https://gdata.youtube.com/feeds/api/"+encodeURIComponent(method)+"?alt=json&callback=?"; | |
return json(url,args,callback); | |
} | |
function lastfm(method, args, callback) { | |
var url = "http://ws.audioscrobbler.com/2.0/?format=json&method="+encodeURIComponent(method)+"&api_key="+encodeURIComponent(api_key); | |
return json(url,args,callback); | |
} | |
function newTrackElement(track) { | |
var span = document.createElement("SPAN"); | |
span.track=track; | |
var artistLink = document.createElement("A"); | |
artistLink.href = track.artist.url; | |
artistLink.innerText = track.artist.name; | |
span.appendChild(artistLink); | |
span.appendChild(document.createTextNode("-")); | |
var trackLink = document.createElement("A"); | |
trackLink.href = track.url; | |
trackLink.innerText = track.name; | |
span.appendChild(trackLink); | |
return span; | |
} | |
function addTrack(track) { | |
var q = "\""+track.name+"\" \""+track.artist.name+"\""; | |
var trackElement = newTrackElement(track); | |
var tracks = document.getElementById("tracks"); | |
tracks.appendChild(trackElement); | |
tracks.appendChild(document.createElement("BR")); | |
youtube("videos", {"q": q, "max-results:": 1}, function(response){ | |
var id = response.feed.entry[0].id.$t.replace("http://gdata.youtube.com/feeds/api/videos/",""); | |
trackElement.ytVideoId = id; | |
if(pendingRequests==0) | |
play(); | |
}); | |
} | |
function getTracks(users) { | |
var trackLimit = Math.ceil(100 / users.length); | |
var what = document.getElementById("what").value; | |
for(var i in users) { | |
if(what === "loved") { | |
lastfm("user.getLovedTracks",{"user": users[i].name, "limit": trackLimit}, function(response){ | |
var track=response.lovedtracks.track; | |
for(var i in track) { | |
addTrack(track[i]); | |
} | |
}); | |
} else { | |
lastfm("user.getTopTracks",{"user": users[i].name, "period": what, "limit": trackLimit}, function(response){ | |
var track=response.toptracks.track; | |
for(var i in track) { | |
addTrack(track[i]); | |
} | |
}); | |
} | |
} | |
} | |
function go() { | |
document.getElementById("tracks").innerHTML=""; | |
var user = document.getElementById("user").value; | |
var from = document.getElementById("from").value; | |
console.log(user,what,from); | |
if(from === "user") { | |
getTracks([{"name": user}]); | |
} else if(from === "neighbours") { | |
lastfm("user.getNeighbours",{"user": user, "limit": 25}, function(response){ | |
getTracks(response.neighbours.user); | |
}); | |
} else if(from === "friends") { | |
lastfm("user.getFriends",{"user": user, "limit": 25}, function(response){ | |
getTracks(response.friends.user); | |
}); | |
} | |
} | |
function play(){ | |
var tracks = document.getElementById("tracks"); | |
var ytVideos = []; | |
for(var i in tracks.children) { | |
var id = tracks.children[i].ytVideoId; | |
if(id) | |
ytVideos.push(id); | |
if(ytVideos.length>=100) | |
break; | |
} | |
var firstVideo = ytVideos.shift(); | |
var url = "http://www.youtube.com/v/"+firstVideo+"?playlist="+encodeURIComponent(ytVideos)+"&version=3"; | |
console.log(url); | |
swfobject.embedSWF(url,"ytapiplayer", "720", "480", "8", null, null, { allowScriptAccess: "always" }, { id: "ytapiplayer" }); | |
} | |
</script> | |
</head> | |
<body> | |
<center> | |
Pick | |
<select id="what"> | |
<option value=loved >loved</option> | |
<option value=7days >top - 7 days</option> | |
<option value=1month >top - 1 month</option> | |
<option value=3month >top - 3 months</option> | |
<option value=6month >top - 6 months</option> | |
<option 12month >top - 12 months</option> | |
</select> | |
tracks from | |
<select id="from"> | |
<option value=user >this user:</option> | |
<option value=neighbours >neighbours of:</option> | |
<option value=friends >friends of:</option> | |
</select> | |
<input id="user" value="banthar" /> | |
<input value=Go type=submit onclick="go()" /> | |
<hr> | |
<div id="ytapiplayer"> | |
You need Flash player 8+ and JavaScript enabled to view this video. | |
</div> | |
<hr> | |
<div id="tracks"> | |
</div> | |
</center> | |
</body> | |
</html> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment