There are 63 previous versions of this script.
// Youtube Advanced Stats
// Copyright (C) 2007-2012 Burn - droidseven [at] libero [dot] it
//
// Released under the GPL license
// http://www.gnu.org/copyleft/gpl.html
//
// ==UserScript==
// @name Youtube Advanced Stats
// @author Burn
// @version 0.9.93.43
// @description Shows delta values in Youtube Account page since last refresh
// @icon http://img7.imageshack.us/img7/4506/yasicon.png
// @include http://*youtube.com/account*
// @exclude http://www.youtube.com/my_videos_*
// @exclude http://www.youtube.com/account#customize*
// @exclude http://www.youtube.com/account_*
// ==/UserScript==
//*/
// set true to enable GM_log entries in your Javascript Console
const DBG = false;
// set milliseconds to your needs: the faster your connection, the lower the value
const MSECS_DELAY = 1250; // to me this is just enough
var time = new Date().getTime() + '';
var getName = window.location.host + '.lastCheck';
if (DBG) {GM_log("getName: " + getName)};
var last_check = GM_getValue(getName);
if(!last_check) { GM_setValue(getName,time); }
var cversion = '0.9.93.43';
window.setTimeout(YouTubeAdvancedStats, MSECS_DELAY);
function YouTubeAdvancedStats() {
var divs = document.getElementsByTagName('div');
var spans = document.getElementsByTagName('span');
var links = document.getElementsByTagName('a');
var DateObj = new Date();
var DateNow = DateObj.getTime();
var User = GetUser(spans);
var oldDeltas = deserialize("objJson_" + User);
if (DBG) {
GM_log(oldDeltas.toSource());
}
var LoadedVids = oldDeltas.videocaricati;
var Visualiz = oldDeltas.visualizzazioni;
var Prefs = oldDeltas.preferiti;
var ChanVisits = oldDeltas.vis_canale;
var Subscr = oldDeltas.iscritti;
var DateLastChk = GM_getValue(User+"_lastcheck", 0);
timeDelta(DateLastChk, DateNow, "page-name", User);
var ARR_stats = new Array();
var RE_nums = /<\/span>\s+([a-z0-9]+)<br>/gi;
for (var i=0,j=0;i<divs.length;i++) {
var CN = divs[i].className.toString();
if (CN.substring(0,9) == "statBlock") {
if (DBG){GM_log('statBlock OK');}
divs[i].innerHTML = divs[i].innerHTML.replace(/,/g,"");
ARR_stats[j++] = new String(divs[i].innerHTML.match(RE_nums));
divs[i].innerHTML = addCommas(divs[i].innerHTML);
if (DBG){GM_log("dopo il match: _" + ARR_stats[(j-1)] + "_ posizione j-1:" + (j-1) + " - posizione i: " + i);}
break;
}
}
if(DBG){var unito = ARR_stats.join(" - "); GM_log("ARR_stats: " + unito);}
var Stats0 = ARR_stats[0].replace(RE_nums,"$1");
var ARR_Stats0 = Stats0.split(",");
if (DBG) {GM_log("dopo il replace: " + ARR_Stats0.join(" "));}
try {
var vidcaric = ARR_Stats0[0] != "undefined" ? ARR_Stats0[0] : "ERR";
var visualizz = ARR_Stats0[1] != "undefined" ? ARR_Stats0[1] : "ERR";
var prefer = ARR_Stats0[2] != "undefined" ? ARR_Stats0[2] : "ERR";
var viscanale = ARR_Stats0[3] != "undefined" ? ARR_Stats0[3] : "ERR";
var iscriz = ARR_Stats0[4] != "undefined" ? ARR_Stats0[4] : "ERR";
} catch(e) {
GM_log(e.message);
}
if (DBG) {
GM_log(vidcaric+" "+visualizz+" "+prefer+" "+viscanale+" "+iscriz);
GM_log(typeof(vidcaric)+" "+typeof(visualizz)+" "+typeof(prefer)+" "+typeof(viscanale)+" "+typeof(iscriz));
}
var ora = DateNow.toString();
GM_setValue(User+"_lastcheck", ora);
var HTMLo = '<span style="color: darkgreen; font-size: 11px; font-weight: bold;">';
var HTMLc = "</span>";
var RE_final = /(<span style="color: darkgreen; font-size: 11px; font-weight: bold;">[\+|-][\d\,]+<\/span>)(<\/span>)\s+([\d,]+)<br>/g;
var diffVidCaricati = (vidcaric-LoadedVids)>0?HTMLo+"+"+(vidcaric-LoadedVids)+HTMLc:(vidcaric-LoadedVids)<0?HTMLo+(vidcaric-LoadedVids)+HTMLc:" ";
var diffVisualiz = (visualizz-Visualiz)>0?HTMLo+"+"+(visualizz-Visualiz)+HTMLc:" ";
var diffPrefs = (prefer-Prefs)>0?HTMLo+"+"+(prefer-Prefs)+HTMLc:(prefer-Prefs)<0?HTMLo+(prefer-Prefs)+HTMLc:" ";
var diffVisCan = (viscanale-ChanVisits)>0?HTMLo+"+"+(viscanale-ChanVisits)+HTMLc:" ";
var diffSubscr = (iscriz-Subscr)>0?HTMLo+"+"+(iscriz-Subscr)+HTMLc:(iscriz-Subscr)<0?HTMLo+(iscriz-Subscr)+HTMLc:" ";
diffVidCaricati = addCommas(diffVidCaricati);
diffVisualiz = addCommas(diffVisualiz);
diffPrefs = addCommas(diffPrefs);
diffVisCan = addCommas(diffVisCan);
diffSubscr = addCommas(diffSubscr);
var ARR_strgen = new Array();
ARR_strgen.push(diffVidCaricati);
ARR_strgen.push(diffVisualiz);
ARR_strgen.push(diffPrefs);
ARR_strgen.push(diffVisCan);
ARR_strgen.push(diffSubscr);
if(DBG) {
GM_log(ARR_strgen.join("|"));
}
if(spans[23]) {
spans[23].parentNode.removeChild(spans[23]);
}
for (i=0,j=0;i<spans.length;i++) {
if(spans[i].className == "grayText") {
if (DBG) {
var RE = /(ipo)|(ype)/;
if(RE.test(spans[i].innerHTML)) {
GM_log(spans[i].innerHTML);
GM_log("Channel type: Node #"+i);
}
}
spans[i].innerHTML += " " + ARR_strgen[j++];
}
}
for (i=0,tot=0,cont=0;i<divs.length;i++) {
CN = divs[i].className.toString();
var RE_cols = /^ytg-[1-2]col$/g;
if (RE_cols.test(CN)) {
cont++;
if (cont <= 4) {
if (DBG) {
var prova = divs[i].innerHTML.match(RE_final);
GM_log("=<=");
GM_log(divs[i].innerHTML);
GM_log("=>=");
GM_log("last regexp: "+prova+" - tipo "+typeof(prova));
}
divs[i].setAttribute('style', 'width: 216px !important');
}
var temp = "";
divs[i].innerHTML = temp = divs[i].innerHTML.replace(RE_final,"$2$3 $1<br>");
if (DBG){GM_log('OK : '+CN);GM_log(temp);}
tot = i;
}
}
var objGM_log = {
username : User,
videocaricati : vidcaric,
visualizzazioni: visualizz,
preferiti : prefer,
vis_canale : viscanale,
iscritti : iscriz
};
/*
var objGM_log = {
username : User,
videocaricati : 0,
visualizzazioni: 0,
preferiti : 0,
vis_canale : 0,
iscritti : 0
};
*/
serialize("objJson_" + User, objGM_log);
}
function timeDelta(FirstD, LastD, ObjRef, nickName) {
var OldDate = parseInt(FirstD);
var LastDate = parseInt(LastD);
var aDay = 86400000;
var anHour = 3600000;
var aMin = 60000;
var aSec = 1000;
var diff = LastDate - OldDate;
if(DBG){
var oldDateObj = new Date(OldDate);
var lastDateObj = new Date(LastDate);
GM_log("Date before: "+oldDateObj.toLocaleString()+ " || Date now: "+ lastDateObj.toLocaleString() + " || Diff: "+ diff);
}
var Str = "<a href=\"http://userscripts.org/scripts/show/19967\" target=\"_blank\">";
Str += "Youtube Advanced Stats</a> | User: <b>"+nickName+"</b><br />Previous page load: ";
var d = Math.floor(diff/aDay);
Str += (d==1) ? d+" day " : (d>1) ? d+" days " : "";
diff -= (d*aDay);
var h = Math.floor(diff/anHour);
Str += (h==1) ? h+" hour " : (h>1) ? h+" hours " : "";
diff -= (h*anHour);
var m = Math.floor(diff/aMin);
Str += (m==1) ? m+" minute and " : (m>1) ? m+" minutes and " : "";
diff -= (m*aMin);
var s = Math.floor(diff/aSec);
var theDate = new Date(OldDate);
Str += s+" seconds ago. ("+ theDate.toLocaleString()+")";
var sp = document.createElement('span');
sp.setAttribute('id', 'yas-credits');
sp.innerHTML = Str;
document.getElementById(ObjRef).appendChild(sp);
if (DBG) {
var parID = document.getElementById(ObjRef).parentNode.getAttribute('id');
GM_log("id genitore di " + ObjRef + " : " + parID);
}
GM_addStyle("#yas-credits {\
background-color:#DFDFDF;\
padding:4px;\
text-align:right;\
letter-spacing:0.05em;\
margin-top:-8px;\
margin-right:-6px;\
float:right;\
clear:both;\
display:block;\
color:#222;\
font-size:11px;\
z-index:1001;\
display:block;}");
// check for updates here... code pasted from http://userscripts.org/scripts/show/52398
if (DBG) {
GM_log("Ora: " + time + " | last_check: " + last_check + " | diff: " + (time - last_check));
}
if((time - last_check) > aDay) {
GM_setValue(getName,time);
if (DBG) {GM_log(GM_getValue(getName));}
window.setTimeout(function() {
if(DBG) {GM_log("starting XHR...");}
GM_xmlhttpRequest({
method: "GET",
url: "http://userscripts.org/scripts/source/19967.meta.js?sinc="+time,
headers: { Accept:"text/javascript; charset=UTF-8" },
overrideMimeType: "application/javascript; charset=UTF-8",
onload: function(response) { checkversion(response); }
}, 500);
});
}
}
function GetUser(ObjR) {
var tmpU = null;
for (var i=0;i<ObjR.length; i++) {
if (ObjR[i].className == "yt-uix-expander-head yt-rounded") {
tmpU = new String(ObjR[i].textContent);
if (tmpU != "") {
if(DBG){GM_log('user found: '+tmpU.trim());}
return tmpU.trim();
break;
} else {
tmpU = "default";
return tmpU;
break;
}
}
}
if (!tmpU && DBG) {
GM_log("GetUser: error");
}
}
function checkversion(response) {
var availableVersion;
var Thediv = document.getElementById('yas-credits');
var oldHTML = Thediv.innerHTML;
if (response.status == 200) {
if(DBG) GM_log("XHR ok... controllo versione");
var resReg = /\/\/ @version\s+(\d+\.\d+\.\d+\.\d+)/.exec(response.responseText);
if (resReg != null) {
availableVersion = resReg[1];
if(DBG) GM_log("Risultati regexp versione: "+resReg.join(" | "));
if(DBG) GM_log("Versione corrente: " + cversion + " | Versione disponibile: " + availableVersion);
if(availableVersion!=cversion) {
if(DBG) GM_log("nuova versione disponibile!");
var newHTML = "<a href='http://userscripts.org/scripts/source/19967.user.js'><b>NEW VERSION AVAILABLE</b></a> - ";
Thediv.innerHTML = newHTML + oldHTML;
}
}
} else {
if(DBG) GM_log("XHR ko: " + response.status);
availableVersion = cversion;
Thediv.innerHTML = "Updates check failed! - " + oldHTML;
}
}
// serialize / deserialize functions
// taken from wiki.greasespot.net
function deserialize(name, def) {
return eval(GM_getValue(name, (def || '({})')));
}
function serialize(name, val) {
GM_setValue(name, uneval(val));
}
// addCommas
// found on http://www.mredkj.com/javascript/nfbasic.html
function addCommas(nStr) {
nStr += '';
x = nStr.split('.');
x1 = x[0];
x2 = x.length > 1 ? '.' + x[1] : '';
var rgx = /(\d+)(\d{3})/;
while (rgx.test(x1)) {
x1 = x1.replace(rgx, '$1' + ',' + '$2');
}
return x1 + x2;
}
// trim
// found http://snippets.dzone.com/posts/show/701
String.prototype.trim = function() { return this.replace(/^\s+|\s+$/g, ''); };