Last.fm - Artist average plays

By snyde Last update Jan 19, 2009 — Installed 723 times. Daily Installs: 0, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1

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> &nbsp; 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> &nbsp; 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> &nbsp; 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> &nbsp; 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> &nbsp; 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);
}