There are 32 previous versions of this script.
// Youtube Advanced Stats
// v0.9.9.82
//
// Copyright (C)2007-2009 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 - droidseven at libero dot it
// @version 0.9.9.82
// @description Shows differences in Youtube Account and My Videos pages since last refresh
// @include http://*youtube.com/account*
// @include http://*youtube.com/my_videos*
// @exclude http://www.youtube.com/my_videos_*
// ==/UserScript==
if (/my_videos/.test(window.location)) {
VideosAdvancedStats(0); // the only argument is : 1 for Debug Mode, 0 for no Debug
} else {
window.setTimeout(YouTubeAdvancedStats, 1500); // adjust milliseconds to your needs
}
function YouTubeAdvancedStats() {
var Debug = 0; // set Debug = 1 to enable GM_log entries in your Javascript Console
var divs = document.getElementsByTagName('div');
var spans = document.getElementsByTagName('span');
var ClassBody = document.getElementsByTagName('body')[0].className;
var DateObj = new Date();
var DateNow = DateObj.getTime();
var SpanToRemove = /^en/.test(ClassBody) ? 24: 24;
if (Debug) {GM_log(ClassBody+" : "+SpanToRemove);}
var User = GetUser(spans, Debug);
var SeenVids = GM_getValue(User+"_videoguardati", 0);
var LoadedVids = GM_getValue(User+"_videocaricati", 0);
var Visualiz = GM_getValue(User+"_visualizzazioni", 0);
var Prefs = GM_getValue(User+"_preferiti", 0);
var ChanVisits = GM_getValue(User+"_vis_canale", 0);
var Subscr = GM_getValue(User+"_iscritti", 0);
var DateLastChk = GM_getValue(User+"_lastcheck", 0);
TimeShift(DateLastChk, DateNow, "page-name", Debug);
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 (Debug){GM_log('statBlock OK');}
divs[i].innerHTML = divs[i].innerHTML.replace(",","").replace(",","");
ARR_stats[j++] = new String(divs[i].innerHTML.match(RE_nums));
if (Debug){GM_log(ARR_stats[(j-1)]);};
}
}
var Stats1 = ARR_stats[0].replace(RE_nums,"$1");
var ARR_Stats1 = Stats1.split(",");
var Stats2 = ARR_stats[1].replace(RE_nums,"$1");
var ARR_Stats2 = Stats2.split(",");
var vidvisti = ARR_Stats1[0] != "undefined" ? ARR_Stats1[0] : "ERR";
var vidcaric = ARR_Stats1[1] != "undefined" ? ARR_Stats1[1] : "ERR";
var visualizz = ARR_Stats1[2] != "undefined" ? ARR_Stats1[2] : "ERR";
var prefer = ARR_Stats1[3] != "undefined" ? ARR_Stats1[3] : "ERR";
var viscanale = ARR_Stats2[0] != "undefined" ? ARR_Stats2[0] : "ERR";
var iscriz = ARR_Stats2[1] != "undefined" ? ARR_Stats2[1] : "ERR";
if (Debug) {
GM_log(vidvisti+" "+vidcaric+" "+visualizz+" "+prefer+" "+viscanale+" "+iscriz);
GM_log(typeof(vidvisti)+ " "+typeof(vidcaric)+" "+typeof(visualizz)+" "+typeof(prefer)+" "+typeof(viscanale)+" "+typeof(iscriz));
}
GM_setValue(User+"_videoguardati", vidvisti);
GM_setValue(User+"_videocaricati", vidcaric);
GM_setValue(User+"_visualizzazioni", visualizz);
GM_setValue(User+"_preferiti", prefer);
GM_setValue(User+"_vis_canale", viscanale);
GM_setValue(User+"_iscritti", iscriz);
var ora = DateNow.toString();
GM_setValue(User+"_lastcheck", ora);
var HTMLo = "<span style='color: darkgreen; font-size: 11px'>";
var HTMLc = "</span>";
var RE_final = /(<span style="color: darkgreen; font-size: 11px;">[\+|-]\d+<\/span>)(<\/span>)\s+(\d+)<br>/g;
var diffVidVisti = (vidvisti-SeenVids)>0?HTMLo+"+"+(vidvisti-SeenVids)+HTMLc:" ";
var diffVidCaricati = (vidcaric-LoadedVids)>0?HTMLo+"+"+(vidcaric-LoadedVids)+HTMLc:(vidcaric-LoadedVids)<0?HTMLo+(vidvcaric-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:" ";
var str_gen = new String(diffVidVisti+"_"+diffVidCaricati+"_"+diffVisualiz+"_"+diffPrefs+"_"+diffVisCan+"_"+diffSubscr);
var ARR_strgen = new Array();
ARR_strgen = str_gen.split("_");
spans[SpanToRemove].parentNode.removeChild(spans[SpanToRemove]);
for (i=0,j=0;i<spans.length;i++) {
if(spans[i].className == "grayText") {
if (Debug) {
GM_log('grayText OK : '+spans[i].className);
var RE = /(canale)|(ype)/i;
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();
if (CN.substring(0,9) == "statBlock") {
if (Debug){
var prova = divs[i].innerHTML.match(RE_final);
GM_log("last regexp: "+prova+" - tipo "+typeof(prova));
}
cont++;
if (cont<=2) {
divs[i].setAttribute('style', 'width: 216px !important');
} else {
divs[i].setAttribute('style', 'width: 110px !important');
break;
}
var temp = "";
divs[i].innerHTML = temp = divs[i].innerHTML.replace(RE_final,"$2$3 $1<br>");
if (Debug){GM_log('OK : '+CN);GM_log(divs[i].innerHTML);GM_log(temp);}
tot = i;
}
}
}
function TimeShift(FirstD, LastD, ObjRef, isDebug) {
var OldDate = parseInt(FirstD);
var LastDate = parseInt(LastD);
var aDay = 86400000;
var anHour = 3600000;
var aMin = 60000;
var aSec = 1000;
if(isDebug){GM_log("Date before: "+OldDate+ "|| Date now: "+ LastDate);}
var diff = LastDate - OldDate;
var Str = "Last page refresh was ";
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('style','float:right;margin-top:-24px;margin-bottom:4px;color:gray;font-size:10px;');
sp.innerHTML = Str;
if(isDebug){GM_log(sp.innerHTML);}
document.getElementById(ObjRef).appendChild(sp);
}
function GetUser(ObjR, isDebug) {
var RE_usern = /">(\w+)<\/a>/i; // "
for (var k=0;k<ObjR.length;k++) {
if (ObjR[k].getAttribute('class') == "util-item first") {
var tmpU = new String(ObjR[k].parentNode.innerHTML.match(RE_usern));
if (tmpU != "") {
tmpU = tmpU.replace(RE_usern,"").replace(",","");
if(isDebug){GM_log('user OK: '+tmpU);}
return tmpU;
break;
} else {
tmpU = "default";
return tmpU;
}
}
}
if (!tmpU && isDebug) {
GM_log("GetUser: error");
}
}
function VideosAdvancedStats(Dbg) {
var divs = document.getElementsByTagName('div');
var spans = document.getElementsByTagName('span');
var User = GetUser(spans, Dbg);
var RE_det = /\d+/g;
var RE_comm = />(\d+)<\/a>/;
var RE_resp = />(\d+)<\/a>/;
var ARR_det = Array();
var ARR_comm = Array();
var ARR_resp = Array();
var ARR_tmpComm = Array();
var ARR_tmpResp = Array();
var ArrDiffsViews = Array();
var ArrDiffsComments = Array();
var ArrDiffsResponses = Array();
var DateObj = new Date();
var DateNow = DateObj.getTime();
var DateLastChk = GM_getValue(User+"_vidlastcheck", 0);
TimeShift(DateLastChk, DateNow, "my-account-header", Dbg);
for (var i=0,j=0,k=0,w=0;i<spans.length;i++) {
var CN = spans[i].className.toString();
if(CN == "stat-views") {
if (Dbg){GM_log('stat-views: '+spans[i].innerHTML);}
spans[i].innerHTML = spans[i].innerHTML.replace(",","").replace(",","");
ARR_det[j++] = new String(spans[i].innerHTML.match(RE_det));
if (Dbg){GM_log("vecchio valore stats: "+ARR_det[(j-1)]);};
}
if(CN == "stat-comments") {
if (Dbg){GM_log('stat-comments OK: '+spans[i].innerHTML);}
spans[i].innerHTML = spans[i].innerHTML.replace(",","").replace(",","");
ARR_tmpComm = spans[i].innerHTML.match(RE_comm);
ARR_comm[k++] = new String(ARR_tmpComm[ARR_tmpComm.length-1]);
if (Dbg){GM_log("vecchio valore comments: "+ARR_comm[(k-1)]);};
}
if(CN == "stat-responses") {
if (Dbg){GM_log('stat-responses OK: '+spans[i].innerHTML);}
spans[i].innerHTML = spans[i].innerHTML.replace(",","").replace(",","");
ARR_tmpResp = spans[i].innerHTML.match(RE_resp);
ARR_resp[w++] = new String(ARR_tmpResp[ARR_tmpResp.length-1]);
if (Dbg){GM_log("vecchio valore responses: "+ARR_resp[(w-1)]);};
}
}
var TmpOldViews = GM_getValue(User+"_detailedViews", 0);
var TmpOldComments = GM_getValue(User+"_detailedComments", 0);
var TmpOldResponses = GM_getValue(User+"_detailedResponses", 0);
if (Dbg) {
GM_log("Old video views: "+TmpOldViews);
GM_log("Old video comments: "+TmpOldComments);
GM_log("Old video responses: "+TmpOldResponses);
}
TmpOldViews = TmpOldViews.toString();
TmpOldComments = TmpOldComments.toString();
TmpOldResponses = TmpOldResponses.toString();
var ArrOldViews = TmpOldViews.split(",");
if (ArrOldViews.length == 1) {
for (i=1;i<ARR_det.length;i++) {
ArrOldViews.push(0);
}
}
var ArrOldComments = TmpOldComments.split(",");
if (ArrOldComments.length == 1) {
for (i=1;i<ARR_comm.length;i++) {
ArrOldComments.push(0);
}
}var ArrOldResponses = TmpOldResponses.split(",");
if (ArrOldResponses.length == 1) {
for (i=1;i<ARR_resp.length;i++) {
ArrOldResponses.push(0);
}
}
for(i=0;i<ARR_det.length;i++) {
ArrDiffsViews[i] = ARR_det[i]-ArrOldViews[i];
if (Dbg) {GM_log(ARR_det[i]+"-"+ArrOldViews[i]+"="+ArrDiffsViews[i]);}
}
for(i=0;i<ARR_comm.length;i++) {
ArrDiffsComments[i] = ARR_comm[i]-ArrOldComments[i];
if (Dbg) {GM_log(ARR_comm[i]+"-"+ArrOldComments[i]+"="+ArrDiffsComments[i]);}
}
for(i=0;i<ARR_resp.length;i++) {
ArrDiffsResponses[i] = ARR_resp[i]-ArrOldResponses[i];
if (Dbg) {GM_log(ARR_resp[i]+"-"+ArrOldResponses[i]+"="+ArrDiffsResponses[i]);}
}
var StrNewViews = ARR_det.join(",");
GM_setValue(User+"_detailedViews",StrNewViews);
var StrNewComments = ARR_comm.join(",");
GM_setValue(User+"_detailedComments",StrNewComments);
var StrNewResponses = ARR_resp.join(",");
GM_setValue(User+"_detailedResponses",StrNewResponses);
var ora = DateNow.toString();
GM_setValue(User+"_vidlastcheck", ora);
if(Dbg) {GM_log("New video stats: "+ StrNewViews);}
var HTMLo = "<span style='color: darkgreen; font-size: 11px'>";
var HTMLc = "</span>";
for (i=0,j=0,k=0,w=0;i<spans.length;i++) {
CN = spans[i].className.toString();
if(CN == "stat-views") {
spans[i].innerHTML += (ArrDiffsViews[j]>0)?" "+HTMLo+"+"+ ArrDiffsViews[j] + HTMLc:"";
j++;
}
if(CN == "stat-comments") {
spans[i].innerHTML += (ArrDiffsComments[k]>0)?" "+HTMLo+"+"+ ArrDiffsComments[k] + HTMLc:"";
k++;
}
if(CN == "stat-responses") {
spans[i].innerHTML += (ArrDiffsResponses[w]>0)?" "+HTMLo+"+"+ ArrDiffsResponses[w] + HTMLc:"";
w++;
}
}
}
