Last.fm - Artist average plays

By snyde Last update Sep 10, 2011 — Installed 1,723 times.

There are 11 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");
var listOfStats = xpath('//p[@class="stats"]')
if (listOfStats.snapshotLength > 0) {
	editBlock = listOfStats.snapshotItem(0);
	var plays = editBlock.innerHTML.match(/<span.*>([\,0-9]*)</)[1];
	var listeners = editBlock.innerHTML.match(/\(([\,0-9]*) listeners/)[1];
	plays = plays.replace(/,/g,''); listeners = listeners.replace(/,/g,'');
	var avePlays = plays/listeners; avePlays = commatize(avePlays.toFixed(2));
	editBlock.innerHTML = editBlock.innerHTML.replace(/<br/i,"<br /> Average "+avePlays+" Plays/Listener<br");
} else {
editBlock = document.getElementById("scrobblesAndListeners");
	var edittedText = editBlock.childNodes[1].innerHTML+"";
	var plays = edittedText.match(/<span.*>([0-9,]*)<.span>/i)[1]; plays = plays.replace(/,/g,'');
	edittedText = editBlock.childNodes[3].innerHTML+"";
	var listeners = edittedText.match(/<span.*>([^<]*)<.span>/i)[1]; listeners = listeners.replace(/,/g,'');
	if (listeners != 0){ var avePlays = plays/listeners;  avePlays = commatize(avePlays.toFixed(2));
//		editBlock.innerHTML += '<span width="100%"><span class="container listeners scrobbles" width="200%" align="center">\n<span >'+(avePlays)+'</span> <dfn title="Average tracks per listener.">Average</dfn>\n</span></span>';
		editBlock.innerHTML += '<span class="container" width="100%" style="width:100%; text-align: center;" align=center>\n &nbsp; <span>'+(avePlays)+'</span> <dfn title="Average tracks per listener.">Average</dfn> &nbsp; \n</span>';
	}
}
}) ();


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