Skip to content

Instantly share code, notes, and snippets.

@banthar
Created July 8, 2012 14:09
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save banthar/3071072 to your computer and use it in GitHub Desktop.
Save banthar/3071072 to your computer and use it in GitHub Desktop.
<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