Facebook Email Search Links

By Troy Thompson Last update Oct 1, 2009 — Installed 307 times. Daily Installs: 0, 1, 2, 0, 0, 1, 0, 0, 1, 1, 0, 1, 4, 1, 3, 4, 0, 0, 1, 1, 0, 1, 5, 2, 4, 3, 1, 1, 0, 0, 2, 4

There are 6 previous versions of this script.

// ==UserScript==
// @name           Facebook Email Search Links
// @namespace      troynt+fb-email-search@gmail.com
// @description    Appends FB links after email addresses for FB search.
// @include *
// @exclude *facebook.com*
// ==/UserScript==

/*	=OPTIONS
--------------------------------------*/
var DOMAINS = 'com|net|org|edu|int|mil|gov|arpa|biz|aero|name|coop|info|pro|museum';
//var DOMAINS = 'edu' // uncomment for school domains only!
var SHOW_IMAGES = 1;
//END OF OPTIONS

var email_regexp = new RegExp("mailto:(.*)\.("+DOMAINS+")", "i");

function insertAfter(newElm,elm){
	var clone = elm.cloneNode(true);
	elm.parentNode.insertBefore(clone,elm);
	elm.parentNode.replaceChild(newElm,elm);
}

var emails = document.evaluate(
  "//a[contains(@href, 'mailto:')]",
  document,
  null,
  XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE,
  null);

var fb_search_url = 'http://www.facebook.com/search/?sid=foo&o=2048&q='
var fb_img = "data:image/png,%89PNG%0D%0A%1A%0A%00%00%00%0DIHDR%00%00%00%0E%00%00%00%0E%08%02%00%00%00%90*%BA%86%00%00%00%2CtEXtCreation%20Time%00Fri%2018%20Jul%202008%2016%3A31%3A09%20-0500%9E!%1E%04%00%00%00%07tIME%07%D8%07%12%14!%228Y(M%00%00%00%09pHYs%00%00%0B%12%00%00%0B%12%01%D2%DD~%FC%00%00%00%04gAMA%00%00%B1%8F%0B%FCa%05%00%00%00%7BIDATx%DAcL%AC%5Cs%EB%C1%1B%06B%40MA%84%99%5B%D6%89%A0%3A%20x%FB%E1%1B%0B.9Uy%E1%EE2O%11An%20%DB%26j%26%90d%C2%A5%14%AE%0E%0Ep%9A%8Al%1E%04%E04%15%130ZG%CE%40%13%3A%B2%2C%1DM%04b6%16%07%BCy%FF%15%EE%00%08%1B%A7%A9%C8f%93%E9V%12%94%B2pq%B2i(%89%E1%926%D2%96%810n%DC%7BEJ%60%11%9F%5C%00%08%3B%23%FE%CC%2B%BA%C8%00%00%00%00IEND%AEB%60%82"

var emails_done = {};

function add_fb_link(email,img)
{
	var fb_link = document.createElement('a');
	fb_link.href = fb_search_url + email;
	fb_link.title = 'Search for '+ email + ' on Facebook';
	fb_link.target = '_blank';
	fb_link.appendChild(document.createTextNode('FB'));
	fb_link.innerHTML = '<img style="vertical-align:middle;border:0; margin-left:.5em;" src="'+fb_img+'" alt="FB" />';

	if( img && SHOW_IMAGES )
		fb_link.innerHTML += '<img src="'+ img +'" />'

	var emails = document.evaluate(
	  "//a[contains(@href, 'mailto:"+email+"')]",
	  document,
	  null,
	  XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE,
	  null);

	for (var i = 0; i < emails.snapshotLength; i++) {
		var a = emails.snapshotItem(i);
		insertAfter(fb_link,a);
	}
}

for (var i = 0; i < emails.snapshotLength; i++) {
	var a = emails.snapshotItem(i);	
	var email = a.href.match(email_regexp);
	if( a && email )
	{
		email = email[1]+'.'+email[2];
		var link_url = fb_search_url + email;
		
		if( !emails_done[email] )
		{
			emails_done[email] = 1;
			
			GM_xmlhttpRequest({
				method: 'GET',
				url: link_url,
				headers: {
					'User-agent': window.navigator.userAgent
				},
				onload: function(resp)
				{
					if( resp.status == 200 && resp.responseText.match('UIFullListing_InfoTable') )
					{
						var email = resp.finalUrl.match(/q=(.*)/)[1]
						var txt = resp.responseText;
						var matches = txt.match('http:\/\/profile.ak.fbcdn.net\/(.*).jpg');
						var img = null;
						if( matches && matches.length == 2 )
						{
							img = matches[0];
						}
						add_fb_link(email,img);
					}
				}
			});
		}
	}
}