yourMovies Imdb Rating

By Johnny Bravo Last update Apr 17, 2009 — Installed 656 times. Daily Installs: 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0

There are 1 previous version of this script.

// ==UserScript==
// @name          yourMovies Imdb Rating
// @namespace     JohnnyBravo/GreaseMonkey
// @description   add imdb ratings to Your Movies list
// @include       http://www.yourmovies.com.au/session/index.cfm*
// @include       http://yourmovies.com.au/session/index.cfm*
// @version       0.10.0
// ==/UserScript==

function $xu(p, c) {
	var i, r = [], x = document.evaluate(p, c || document, null, XPathResult.UNORDERED_NODE_ITERATOR_TYPE, null);
	while(i=x.iterateNext()) r.push(i);
	return r;
}
function $ec(t, a){
	var n = document.createElement(t);
	for (var b in a) if (a.hasOwnProperty(b)){
		n.setAttribute(b, a[b]);
	}
	return n;
}
function $t(s) {
	return document.createTextNode(s);
}
function $ea(newNode, node) {
	return node.parentNode.insertBefore(newNode, node.nextSibling);
}
function $eb(newNode, node) {
	return node.parentNode.insertBefore(newNode, node);
}
function $el(newNode, par) {
	return par.appendChild(newNode);
}

var sorted=true;
var goldStar=[
	"data:image/png;base64,",
	"iVBORw0KGgoAAAANSUhEUgAAABQAAAASCAMAAABsDg4iAAAAwFBMVEX9/PTTvDvJ",
	"szfm0D/17bT27KzDtG3Yy4rn2HfPt0PaxDy6p1Tm26rErDjbxEOmkC/38c3izEu6",
	"pTXy7dbp5Mvl0l3jzUSpkzHs2lbl0VO3ojP04U3q1UqynTbp1lmtmTHfyT3p1lX9",
	"+/P69dXu45vizFDx4FzfyUP47pn17b/Zy3bv3FqjkC746G328+b59d7gz3bu3GjX",
	"v03axE3t6tfdyE7QxpbXwzq8qTT5+PL+/fTe17D06Zzv20r8+NX////OfXVdAAAA",
	"AXRSTlMAQObYZgAAAK5JREFUeNp90OcOgjAQAGBL2VBkCwUsBBwoLtwRfP/HEgyR",
	"Jqj36+7LjeRGo7+x+WJc8ByiFywHlsN6PkAR1mu2L3WdzSoxhqF3qDhOT9MWVwwD",
	"rnIMYZhMm0i4d6uAbwyQY9c1fN938m7Bg+BWF4Yxc3aftafIbFTTziJ9W4kQA4B2",
	"zCi7F8REDZd7Cu2CYBNjJJUUXsYkEiw+QpLVIz/ht+2AglTqjt0lqvD7tS8YygzS",
	"WKDPswAAAABJRU5ErkJggg=="
].join('');
var greyStar=[
	"data:image/png;base64,",
	"iVBORw0KGgoAAAANSUhEUgAAABQAAAASCAMAAABsDg4iAAAAM1BMVEX8/Pzl5eXW",
	"1tbc3NzPz8/f39/19fXs7Ozp6env7+/i4uLS0tLZ2dn5+fny8vLMzMz///+QLYhj",
	"AAAAAXRSTlMAQObYZgAAAGVJREFUeNp90FkOgCAMBFCLEDbTuf9tRQQdAtq/vpQu",
	"bNtvmIUF6IwZbrIIYMK9oLypqhe5DNaJRNVew3HXJybrWwNPRmNss+EA03BYFYtK",
	"fXoSSklT3U35nKM+yAg0pxcE9/21J0vIBmAAPEZ7AAAAAElFTkSuQmCC"
].join('');
var style=[
	"div.greyStar {background:transparent url('",
	greyStar,
	"') repeat-x; width:200px; height:18px;margin:0; padding:0; float:left;}",
	"div.goldStar {background:transparent url('",
	goldStar,
	"') repeat-x; height:18px;margin:0; padding:0;}"
].join("");
GM_addStyle(style);
var toGo=0;
var rows=[];

function sortMovies() {
	if(sorted && rows.length) {
		rows.sort(function(a, b) {return a.rate - b.rate});
		rows.forEach(function(r) { $eb(r.rowEl, r.rowEl.parentNode.childNodes[1]) });
	}
}
	
function FindImdbStars(imdbId, lnk) {
	var href="http://imdb.com/title/tt"+imdbId+"/ratings";
	GM_xmlhttpRequest( {
		method:"GET",
		url:href,
		headers: {
			"User-Agent":window.navigator.userAgent,
			"Accept":"text/html,text/xml,text/plain"
		},
		onload: function(resp) {
			if(resp.status=="200") {
				var txt=resp.responseText;
				var start=txt.indexOf('weighted average</a> vote of <a href="/List?ratings=');
				if(start>-1) {
					var end=txt.indexOf('</a> / 10</p>', start);
					if(end>-1) {
						var vote=txt.indexOf('">', start+52);
						if(vote>-1 && vote<end) {
							vote+=2;
							newDIV = $ec('A', {
								'class' : 'imdbRating', href : href, target : '_blank', style: 'font-weight:bold;'
							});
							var rating=txt.substring(vote, end);
							var rate=(parseFloat(rating))*10;
							var findBR=lnk.nextSibling;
							if(lnk.parentNode.className=="company") {
								findBR=null;
							} else {
								while(findBR && findBR.nodeName != "BR")
									findBR=findBR.nextSibling;
								if(findBR && findBR.nextSibling)
									findBR=findBR.nextSibling;
							}
							$el($ec('DIV', { 'class' : 'goldStar', style: 'width:'+rate+'%;' }), 
								$el($ec('DIV', { 'class' : 'greyStar' }), newDIV));
							$el($t('['+rating+']'), $el($ec('SPAN'), newDIV));
							$el($ec('BR', { style : 'clear:both;'}), newDIV);
							lnk.parentNode.insertBefore(newDIV,findBR);
							rows.push({rowEl:lnk.parentNode.parentNode, rate:rate});
						}
					}
				}	
			}
			toGo--;
			if(toGo == 0) {
				sortMovies();
			}
		}
	});
}
function yourMoviesInfoPage(lnk) {
	GM_xmlhttpRequest( {
		method:"GET",
		url:lnk.href,
		headers: {
		"User-Agent":window.navigator.userAgent,
		"Accept":"text/html,text/xml,text/plain"
		},
		onload: function(resp) {
			var subFromTogo = true;
			if(resp.status=="200") {
				var txt=resp.responseText;
				var start=txt.indexOf("http://www.imdb.com/Title?"); //26
				if(start>-1) {
					var end=txt.indexOf('"', start);
					if(end>-1) {
						subFromTogo = false;
						FindImdbStars(txt.substring(start+26,end), lnk);
					}
				}
			}
			if(subFromTogo) {
				toGo --;
				if(toGo == 0)
					sortMovies();
			}
		}
	});
}
function FindImdb(lnk) {
	if(lnk.href.indexOf("action=movie_info")<0) {
		toGo--;
		if(toGo == 0)
			sortMovies();
		return; // not a movie
	}
	if(lnk.href.indexOf("imdb_id=")<0) {
		yourMoviesInfoPage(lnk);
	} else {
		var split1=lnk.href.split("?");
		var split2=split1[1].split("&");
		for(var i=0; i < split2.length; i++) {
			if(split2[i].indexOf("imdb_id=")==0) {
				FindImdbStars(split2[i].substr(8), lnk);
				break;
			}
		}
	}
}
var links=$xu('//TD[@class="sessions"]/A[1] | //TD[@class="company"]/A');
toGo=links.length;
links.forEach(function(l) { FindImdb(l); });