IMDB Bacon Number / Center Number

By Curtis Gibby Last update Oct 24, 2008 — Installed 411 times.

There are 3 previous versions of this script.

// ==UserScript==
// @name          IMDB Bacon Number / Center Number
// @namespace     http://userscripts.org/users/6623/scripts
// @description	  Adds an indicator on an IMDB name page telling you that person's "Bacon Number" and/or "Center Number" (from the Oracle of Bacon at Virginia)
// @include       http://www.imdb.com/name/nm*/
// @include       http://imdb.com/name/nm*/
// @version       1.1.5
// ==/UserScript==

/* User-configurable options -- comment or uncomment each line to your own liking */

// add Bacon Number to the name page
var showBaconNumber = true; 
// var showBaconNumber = false;

// add Center Number to the name page
var showCenterNumber = true; 
//var showCenterNumber = false;

// compare the person's Center Number to Kevin Bacon's Center Number
var showBaconComparison = true; 
//var showBaconComparison = false;


/* End of user-configurable options */

/* Begin script*/

var personName = findName();

if (showCenterNumber)
{
	addCenterText();
	var personCenterNumber = getCenterNumber(personName);
}

if (showBaconNumber)
{
	addBaconText();
	getBaconNumber(personName);
}

/* end script*/

// Functions ----------- //

function getBaconNumber(personName) {
	var bacon_url = 'http://oracleofbacon.org/cgi-bin/movielinks?firstname=Kevin%20Bacon&secondname=' + personName + '&using=1';
	GM_xmlhttpRequest({
			method: 'GET',
			url: bacon_url,
			onload: function(responseDetails) {
				var search_string = 'table class="mtoa"'; // one of this string for each movie on the target page
				var bacon_number = -1;
				bacon_number = responseDetails.responseText.split(search_string).length-1;
				if (bacon_number != -1) {
					// found a bacon number
					var addedDiv = document.getElementById('greaseTextBacon');
					addedDiv.innerHTML = '<h5>Bacon Number:</h5>\n' + bacon_number + '\n<a class="tn15more inline" href="' + bacon_url + '">more</a>';
					addedDiv.style.color='black';
				} else {
					// did not find bacon number
					var addedDiv = document.getElementById('greaseTextBacon');
					addedDiv.innerHTML = '<H5>Bacon Number:</H5>\nUnable to find';
					addedDiv.style.color='red';
				}
			}
	});
} // end function getBaconNumber

function getCenterNumber(personName) {
	var centerURL = 'http://oracleofbacon.org/cgi-bin/center-cgi?who=' + personName;
	GM_xmlhttpRequest({
			method: 'GET',
			url: centerURL,
			onload: function(responseDetails) {
				var search_string = ' number: '; // find this on the target page
				var match = responseDetails.responseText.search(search_string);
				var center_number = responseDetails.responseText.substring(match + search_string.length,match + search_string.length + 5);
				if (match != -1) {
					// found a center number
					var addedDiv = document.getElementById('greaseTextCenter');
					addedDiv.innerHTML = '<h5>Center Number:</h5>\n' + center_number + '\n<a class="tn15more inline" href="' + centerURL + '">more</a>';
					addedDiv.style.color='black';
				} else {
					// did not find center number
					var addedDiv = document.getElementById('greaseTextCenter');
					addedDiv.innerHTML = '<H5>Center Number:</H5>\nUnable to find';
					addedDiv.style.color='red';
				}
				if (showBaconComparison)
				{
				var BaconCenterURL = 'http://oracleofbacon.org/cgi-bin/center-cgi?who=Kevin+Bacon';
				GM_xmlhttpRequest({
						method: 'GET',
						url: BaconCenterURL,
						onload: function(responseDetails) {
							var search_string = ' number: '; // find this on the target page
							var match = responseDetails.responseText.search(search_string);
							var BaconCenterNumber = responseDetails.responseText.substring(match + search_string.length,match + search_string.length + 5);
							if (match != -1) {
								// found Bacon's center number
								var BaconsNum = parseFloat(BaconCenterNumber);
								var personsNum = parseFloat(center_number);
								if (personsNum < BaconsNum)
								{
									addedDiv.innerHTML += " (Better Than <A HREF='http://www.imdb.com/name/nm0000102/'>Kevin Bacon</A>'s <A HREF='http://oracleofbacon.org/cgi-bin/center-cgi?who=Kevin+Bacon'>" + BaconCenterNumber + "</A>)";
								} else
								{
									addedDiv.innerHTML += " (Worse Than <A HREF='http://www.imdb.com/name/nm0000102/'>Kevin Bacon</A>'s <A HREF='http://oracleofbacon.org/cgi-bin/center-cgi?who=Kevin+Bacon'>" + BaconCenterNumber + "</A>)";
								}
							}
						}
					});
				}
			}
	});
} // end function getCenterNumber

function compareBaconCenter(personCenterNumber) {
} // end function compareBaconCenter

function addBaconText() {
	var findPattern = "//div[@class='info']";
	var results = document.evaluate( findPattern, document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null );
	var link = results.snapshotItem(1);
	var addedDiv = document.createElement('div');
	addedDiv.innerHTML = '<H5>Bacon Number:</H5>\nchecking';
	addedDiv.setAttribute('id','greaseTextBacon');
	addedDiv.setAttribute('class','info');
	addedDiv.style.color='red';
	link.parentNode.insertBefore(addedDiv, link.nextSibling);
}
// end function addBaconText

function addCenterText() {
	var findPattern = "//div[@class='info']";
	var results = document.evaluate( findPattern, document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null );
	var link = results.snapshotItem(0);
	var addedDiv = document.createElement('div');
	addedDiv.innerHTML = '<H5>Center Number:</H5>\nchecking';
	addedDiv.setAttribute('id','greaseTextCenter');
	addedDiv.setAttribute('class','info');
	addedDiv.style.color='red';
	link.parentNode.insertBefore(addedDiv, link.nextSibling);
}
// end function addCenterText

function findName() {
	var findPattern = "//input[@name='primary']";
	var results = document.evaluate( findPattern, document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null );
	var formInput = results.snapshotItem(0);
	var personName = formInput.getAttribute('value');
	return personName;
}
// end function findName