Newzbin V3 IMDB Ratings Plus

By Jon 3 Last update Jan 5, 2008 — Installed 388 times. Daily Installs: 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0
// ==UserScript==
// @name          Newzbin V3 IMDB Ratings
// @description   Shows IMDB rating next to movie titles
// @include       http://v3.newzbin.com/browse/category/p/movies/*
// ==/UserScript==


// customization begins (these options allow to remove some entries from the listing)
var minRating = '0.0';
var removeUnrated = 0;
var removeImdbPageLoadFails = 0;
var removeNoImdbLink = 0;
// @TODO implement this
//var removeMPAARatings = [];
// IE: var removeMPAARatings = ['NC-17','R'];
// customization ends

var mpaa_logos = {"G": "data:image/gif;base64,R0lGODlhDQAMAIcAAAAAAAQEBAkJCQsLCw8PDxMTEyUlJSgoKCwsLC0tLS4uLi8vLzAwMDExMTIyMjMzMzU1NTY2Njg4ODk5OTo6Ojs7Ozw8PD09PUJCQkREREZGRkdHR0lJSUxMTE1NTVRUVFdXV1xcXGNjY2pqamxsbG1tbXFxcXNzc3R0dHV1dXl5eYeHh5GRkZOTk5+fn6Ghoaqqqq2trbKysra2tri4uLu7u7y8vL+/v8HBwcPDw8/Pz9jY2OTk5OXl5ejo6PHx8fT09Pb29vf39/j4+Pn5+fr6+vv7+/z8/P39/f7+/v///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAAAAP8ALAAAAAANAAwAAAikAAksSPBAQoUKEiA8SLCAAAIfQoocMVLEyBEiQXwgUDCExwgFIEp4sHDixxAFDYqkENCBRg8WAwzsCKIAwpEMAFwoUZLkhgwlQBJMQPIAgI0jM1agMAFDSAMKSA4AqGEExwcABWIIcSABCQMAP5W8AHABKIMHRUgEUKEjhwgAG4Am4MjDBIYPITRwaAHk5MOIFCsaGZIRgUCUESRMkBChgYKGAQEAOw==", "PG": "data:image/gif;base64,R0lGODlhFwAMAIcAAAAAAAICAgMDAwUFBQYGBgkJCQwMDA0NDQ8PDxYWFhcXFxoaGh8fHyEhISIiIikpKSoqKisrKy0tLS4uLi8vLzExMTIyMjMzMzQ0NDU1NTY2Njc3Nzg4ODk5OTo6Ojs7Ozw8PD09PUJCQkNDQ0VFRUtLS0xMTE1NTU5OTlFRUVVVVVZWVldXV1tbW1xcXF1dXV9fX2BgYGFhYWdnZ2hoaGxsbG5ubnJycnNzc3Z2dnt7e3x8fH19fYaGhoeHh4iIiIqKipKSkpaWlpeXl5iYmJqampycnJ6enqOjo6ysrK6urq+vr7CwsLGxsbOzs7S0tL29vb6+vsDAwMHBwcLCwsPDw8zMzM3NzdDQ0Nra2tzc3N3d3eXl5efn5+7u7vLy8vPz8/T09PX19fb29vf39/j4+Pn5+fr6+vv7+/z8/P39/f7+/v///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAAAAP8ALAAAAAAXAAwAAAj/AA1EyLCBQ4cOHj5kmDCBgoYPIDpouMDwgQELXcqgUZPmzBk1aMaAEfPxjBk0acyM6WLBghkqLCR8mAGjAQopbLbIkNCiRgkQOb6QsVAhTJkUAGxwaRKCQA42MwaogMIFSAEIWcRUqACGjQ4ARNiI4QFABxsMAJawYYMGyhM2YLZ2/YHAw5EiIBZMYeMAwBUyTnrguJGEjFw2PQ54MIJkR5EybBIAsDImygkACpgY5srGR4Aha0OzYQCgylohAEaw+bI1zJcbAGh4WSP6hYAeWKa4AGACbgULZ5TEkCAhSBrRWmiIWNGCRAkhYoZiNPNRTRkw2LGTROMRDZoyKy0IFOTw4UMIDhQkMGyIgYMHiRYqGggIADs=","PG13":"data:image/gif;base64,R0lGODlhJgAMAIcAAAAAAAMDAwQEBAUFBQYGBgcHBwoKCgsLCwwMDA0NDQ4ODhAQEBERERMTExQUFBYWFhgYGB4eHh8fHyEhISIiIiMjIygoKCsrKywsLC0tLS4uLi8vLzAwMDExMTIyMjMzMzQ0NDU1NTY2Njc3Nzg4ODk5OTo6Ojs7Ozw8PD09PT4+Pj8/P0BAQEFBQUJCQkVFRUlJSUtLS0xMTE9PT1FRUVJSUlNTU1RUVFVVVVZWVldXV1hYWFlZWVtbW15eXmVlZWZmZmdnZ2hoaGpqamtra21tbW9vb3V1dXl5eXt7e3x8fH19fX5+foCAgIGBgYKCgoODg4SEhIiIiImJiYuLi4yMjJCQkJSUlJWVlZubm52dnZ6enp+fn6KioqOjo6SkpKenp6ioqKmpqaurq6ysrK2trbGxsbOzs7W1tba2trm5uby8vL+/v8LCwsTExMbGxsfHx8nJycrKyszMzM7Ozs/Pz9DQ0NHR0dLS0tTU1NjY2NnZ2dvb297e3t/f3+Dg4OLi4uPj4+Xl5ebm5ujo6Onp6erq6uzs7O7u7u/v7/Dw8PHx8fLy8vPz8/T09PX19fb29vf39/j4+Pn5+fr6+vv7+/z8/P39/f7+/v///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAAAAP8ALAAAAAAmAAwAAAj/ABFgCDGCRIkSJk6E0KCBw4gTKEiI8MCwIsMPIjhk6BBCxAeGGBB4ICSp0iVLk0xWetToUSVLlCi9lNSoZk1HlSo5ajTJkqVKkR4V8uCBEpsbGVIM0TFhR5xMeGpkCALkxQoskjJpzSQoBww/lZhoIIHjS6ZIHjo8ihQDQBJBYT4gkFIpRwAhcgIJAWBj0NY+PwosyPMnihUpEEAYgtShg6NMRwCIyZSIiIAqkSoAqKM1kZk3mSDpEcTITQMGdybxyZRGQItMjxo/ygTlgIsuVzxYoMOIwQBEhsBAMYIEzp4YU7RKaMAZEx0eAGZMiq02UxMDLrhwUeIFU6IBBA4ZxjqjAcCIOYCIbNEawQHnTHKcrKBARlLjx08kb+2cAIAgrT8AwMR+3j2gwB2LKJKJJEsAAAUljUGiSBEAHKEIJls5IkMAXNihhgoALLFfI2AkIEAea2SBxhYyZNBGJB14UMkYPlzAgRYYboVHDy70sAMLOZRByVaGUFFDCn7U4UMIJ9BgxllEETIJJSdFYlNNLlUS009W2uRISZY48gglPwEllAcCkXDCCSmMsEEGFXEAAgkmlBBCBxYx5AEIIFDkgQgegYRAQAA7","R": "data:image/gif;base64,R0lGODlhDQAMAIcAAAAAAAEBAQUFBQ4ODg8PDxMTExQUFBgYGBoaGiAgICMjIyQkJCUlJScnJywsLC0tLS4uLi8vLzAwMDExMTIyMjMzMzU1NTg4ODk5OTs7Ozw8PD09PT4+PkJCQkNDQ0ZGRktLS0xMTE5OTlFRUVJSUlpaWmJiYmdnZ2xsbHJycnh4eHt7e3x8fIiIiJSUlKenp6ioqKurq62trbS0tMDAwMjIyNbW1tfX19vb2+Tk5Obm5ufn5+jo6Onp6evr6/T09PX19fb29vf39/j4+Pn5+fv7+/z8/P39/f///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAAAAP8ALAAAAAANAAwAAAiiAAlQyKChoIYMFyZAiEBAAo8iR44UgWhkSBAeDiocYfGggYgPCza4ECJk4ZAZBgS4qFECQIYbQSA8AILEwQAaSGAAiLAjJoQfSCoEMBEjBYITSH5A+BkUwAgSB0DgSCoT6AQDMl4o6LAj6QMJQXIkKBCjSAsAHnQAiYDhCAoJDVT4sBGCwQoiFibwMBKRyA8gEIv0mDDAgoYNHDJMYFuwwoCAADs="};

var movies = document.evaluate(
   "//tbody[@class='odd']|//tbody[@class='odd-new']|//tbody[@class='even']|//tbody[@class='even-new']",
   document,
   null,
   XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE,
   null);


for (var i = 0; i < movies.snapshotLength; i++)
{
   movieBody = movies.snapshotItem(i);
   var reLink = new RegExp("[^\"]*(http:\/\/[^\"]*imdb\.com\/title\/[^\"]*).*");
   var linkMatch = movieBody.innerHTML.match(reLink);
   if (linkMatch != null) {
      var imdbLink = linkMatch[1];
      getInfo(movieBody, imdbLink);
   }
   else
   {
      if (removeNoImdbLink)
      {
         // no imdb link => remove it from the list
         movieBody.parentNode.removeChild(movieBody);
      }
   }
}

function getInfo(movieBody, imdbLink)
{
   GM_xmlhttpRequest({
      method: 'GET',
      url: imdbLink,
      onload: function (responseDetails)
      {
         if (responseDetails.status == 200)
         {
            var reImbd = new RegExp("<b>([0-9]\.[0-9]/10)</b>");
	    var reMpaa = new RegExp("Rated (.*?) for (.*)","i");
	    var reCert = new RegExp(">USA:(.*?)<\/a>");
            var noteMatch = responseDetails.responseText.match(reImbd);
	    var mpaaMatch = responseDetails.responseText.match(reMpaa);

	    // Not all movies have MPAA data but they do have Certification Info
	    if (mpaaMatch == null)
	    {
		    mpaaMatch = responseDetails.responseText.match(reCert);
		    mpaaMatch[2] = 'N/A';
	    }

	    var mpaaNote;
	    if (mpaaMatch != null)
	    {
	       var img = eval('mpaa_logos.'+mpaaMatch[1].replace(/-/,"","g"));
	       mpaaNote = 'Rated ' +mpaaMatch[1];
	       var ratingLogo = new Image();
	       ratingLogo.src = img;
	       ratingLogo.setAttribute('title', 'Rated ' + mpaaMatch[1] + ' for ' + mpaaMatch[2]);
	       ratingLogo.setAttribute('alt', 'Rated ' + mpaaMatch[1] + ' for ' + mpaaMatch[2]);

	       // Find last TD
	       var tds = movieBody.getElementsByTagName("td");
	       var lastTd = tds[tds.length-1];
	       lastTd.appendChild(ratingLogo);
	    }
	    else
	    {
		    mpaaNote = 'MPAA Rating Unknown';
	    }
            if (noteMatch != null)
            {
               note = noteMatch[1];
               if (note >= minRating)
               {
                  // we got our IMDB rating => insert it in the original page using an other regular expression
                  var reTitle = new RegExp("^http:\/\/v3\.newzbin\.com\/browse\/post\/[0-9]+\/$");
                  var allLinks = movieBody.getElementsByTagName("a");
                  for (var i = 0; i < allLinks.length; i++)
                  {
                     var curLink = allLinks[i];
                     if (reTitle.exec(curLink) != null)
                     {
			// If you want the MPAA rating in the link uncomment next line
                        //curLink.textContent += " - " + note + ' ' + mpaaNote;
                        curLink.textContent += " - " + note;
                        break;
                     }
                  }
                }
                else
                {
                  // the movie is too bad => remove it from the list
                  movieBody.parentNode.removeChild(movieBody);
                }
            }
            else
            {
               if (removeUnrated)
               {
                  // no imdb rating => remove it from the list
                  movieBody.parentNode.removeChild(movieBody);
               }
            }
         }
         else
         {
            if (removeImdbPageLoadFails)
            {
               // imdb link did not work ...
               movieBody.parentNode.removeChild(movieBody);
            }
         }
      }
   });
}