There are 6 previous versions of this script.
// ==UserScript==
// @name Last.fm - Artist average plays
// @namespace
// @description Determines the average plays per listener. Suggested by meninc
// @include http://www.last.fm/music/*
// ==/UserScript==
(function () {
var editBlock = document.getElementById("catalogueHead");
if (editBlock.innerHTML.match(/ ([0-9,]*) listeners \(([0-9,]*) plays\)/)) {
var listeners = editBlock.innerHTML.match(/ ([0-9,]*) listeners \(([0-9,]*) plays\)/)[1];
listeners = listeners.replace(/,/g,'');
var plays = editBlock.innerHTML.match(/ ([0-9,]*) listeners \(([0-9,]*) plays\)/)[2];
plays = plays.replace(/,/g,'');
var avePlays = plays/listeners;
avePlays = commatize(avePlays.toFixed(2));
editBlock.innerHTML = editBlock.innerHTML.replace(/ plays\)/,' plays)<br> Average: '+avePlays+' plays/listener');
} else if (editBlock.innerHTML.match(/>([0-9,]*) listeners : ([0-9,]*) plays</)) {
var listeners = editBlock.innerHTML.match(/>([0-9,]*) listeners : ([0-9,]*) plays</)[1];
listeners = listeners.replace(/,/g,'');
var plays = editBlock.innerHTML.match(/>([0-9,]*) listeners : ([0-9,]*) plays</)[2];
plays = plays.replace(/,/g,'');
var avePlays = plays/listeners;
avePlays = commatize(avePlays.toFixed(2));
editBlock.innerHTML = editBlock.innerHTML.replace(/ plays</,' plays<br> Average: '+avePlays+' plays/listener<');
} else if (editBlock.innerHTML.match(/ ([0-9,]*) plays \(([0-9,]*) listener[s]*/)) {
var listeners = editBlock.innerHTML.match(/ ([0-9,]*) plays \(([0-9,]*) listener[s]*/)[2];
listeners = listeners.replace(/,/g,'');
var plays = editBlock.innerHTML.match(/ ([0-9,]*) plays \(([0-9,]*) listener[s]*/)[1];
plays = plays.replace(/,/g,'');
var avePlays = plays/listeners;
avePlays = commatize(avePlays.toFixed(2));
editBlock.innerHTML = editBlock.innerHTML.replace(/ listener[s]*\)/,' listeners)<br> Average: '+avePlays+' plays/listener');
} else if (editBlock.innerHTML.match(/([0-9,]*) plays[^0-9]*([0-9,]*) listener[s]*/)) {
var listeners = editBlock.innerHTML.match(/([0-9,]*) listener/)[1];
listeners = listeners.replace(/,/g,'');
var plays = editBlock.innerHTML.match(/([0-9,]*) plays[^0-9]*([0-9,]*) listener[s]*/)[1];
plays = plays.replace(/,/g,'');
var avePlays = plays/listeners;
avePlays = commatize(avePlays.toFixed(2));
editBlock.innerHTML = editBlock.innerHTML.replace(/ listener[s]*\)/,' listeners)<br> Average: '+avePlays+' plays/listener');
} else if (editBlock.innerHTML.match(/([0-9,]*) listener[s]*[^0-9]*([0-9,]*) plays/)) {
var listeners = editBlock.innerHTML.match(/([0-9,]*) listener/)[1];
listeners = listeners.replace(/,/g,'');
var plays = editBlock.innerHTML.match(/([0-9,]*) plays/)[1];
plays = plays.replace(/,/g,'');
var avePlays = plays/listeners;
avePlays = commatize(avePlays.toFixed(2));
editBlock.innerHTML = editBlock.innerHTML.replace(/ play[s]*/,' plays<br> Average: '+avePlays+' plays/listener');
}
var usernameLink = xpath("//a[@id='idBadgerUser']/SPAN");
if (usernameLink.snapshotLength > 0) {
var username = usernameLink.snapshotItem(1).innerHTML;
} else {
return;
}
var artistENC = location.href.match(/\/music\/([^\/]*)/)[1];
if (!artistENC) { return; }
editBlock.innerHTML += "<HR /><BR>For this artist, find: <a target=_top HREF=\"http://playground.last.fm/neighbours?user="+username+"&good="+artistENC.replace(/\%25/gi,"%").replace(/\%2B/gi,"+")+"\">Neighbours</A> ";
editBlock.innerHTML += "and <a target=_top HREF=\"http://playground.last.fm/aliases/artist/"+artistENC+"\">Aliases</A><BR>";
}) ();
function xpath(query) {
return document.evaluate(query, document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
}
function commatize(number) {
var numdp = number.split(".");
if (numdp.length == 2) {
var decimal = numdp[1];
}
var integer = numdp[0];
if (integer.length < 4) {
return(number);
}
var stubFrnt = integer.length % 3;
if (stubFrnt == 0) {stubFrnt = 3;}
var newnumber = integer.substr(0,stubFrnt);
var oldPos = stubFrnt;
while(oldPos < integer.length ) {
newnumber = newnumber + "," + integer.substr(oldPos, 3);
oldPos = oldPos + 3;
}
if (numdp.length == 2) {
newnumber = newnumber + "." + decimal;
}
return(newnumber);
}
