Source for "Youtube Advanced Stats"

By Burn
Has 2 other scripts.


//
// Youtube Advanced Stats
// v0.9.3
//
// Copyright (C)2007-2008 Burn - raenkrus@gmail.com
//
// Released under the GPL license
// http://www.gnu.org/copyleft/gpl.html
//
// ==UserScript==
// @name           Youtube Advanced Stats
// @author         Burn - raenkrus@gmail.com
// @version        0.9.3
// @description    Shows differences in Youtube Account Page since last refresh
// @include        http://*youtube.com/my_account*
// ==/UserScript==

window.addEventListener(
	'load',
	function() { YouTubeAdvancedStats() },
	true
);


function YouTubeAdvancedStats() {
	
  var Debug        = 0; // set Debug = 1 to enable GM_log entries in Javascript Console
  var divs         = document.getElementsByTagName('div');
  var spans        = document.getElementsByTagName('span');
  var RE_usern     = /">(\w+)<\/a/i; // "
  var ClassBody    = document.getElementsByTagName('body')[0].className;
  var SpanToRemove = /it_IT/.test(ClassBody) ? 28 : 30;
  
  if (Debug) {GM_log(ClassBody+" : "+SpanToRemove);}
  
  // first we try to get the username
  for (var k=0;k<divs.length;k++) {
  	if(divs[k].className == "dropdown-link") {
  		var User = new String(divs[k].innerHTML.match(RE_usern));
  		if (User != null) {
  			User = User.replace(RE_usern,"").replace(",","");
  			if (Debug){GM_log('user OK: '+User);}
  			break;
  		} else {
  			User = "default";
  		}
  	}
  }
  
  // read the stored GM vars containing the old values
  // or set them to 0 if empties
  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 ARR_stats = new Array();
  var RE_nums   = /<\/span>\s+([a-z0-9]+)<br>/gi;
  
  // search for the actual values 
  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)]);};
    }
  }
  
  // replace with the RegExp first match
  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(",");
  
  
  // put actual values into vars
  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(vidvisti+" "+vidcaric+" "+prefer+" "+viscanale+" "+iscriz);
	GM_log(typeof(vidvisti)+ " "+typeof(vidcaric)+" "+typeof(visualizz)+" "+typeof(prefer)+" "+typeof(viscanale)+" "+typeof(iscriz));
	//GM_log(typeof(vidvisti)+ " "+typeof(vidcaric)+" "+typeof(prefer)+" "+typeof(viscanale)+" "+typeof(iscriz));
	}
    
  // store actual values in GM vars
  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);

  // some html code
  var HTMLo = "(<font color='red'>";
  var HTMLc = "</font>)";
  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 str_gen = new String(diffVidVisti+"_"+diffVidCaricati+"_"+diffPrefs+"_"+diffVisCan+"_"+diffSubscr);
  
  var ARR_strgen = new Array();
  ARR_strgen = str_gen.split("_");

  // a workaround to remove the "channel type"
  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++];
    }
  }

  var RE_final = /(\(<font color="red">[\+|-]\d+<\/font>\))(<\/span>)\s+(\d+)<br>/g;
  for (i=0,tot=0;i<divs.length;i++) {
    CN = divs[i].className.toString();
    if (CN.substring(0,9) == "statBlock") {
  		var temp = "";
      	divs[i].innerHTML = temp = divs[i].innerHTML.replace(RE_final,"$2$3 $1<br>");
      	 if (Debug){GM_log('statBlock OK : '+CN);GM_log(temp);}
    	tot = i;
    }
  }
}