Facebook Audio

By sizzlemctwizzle Last update Nov 23, 2008 — Installed 1,553 times.

There are 8 previous versions of this script.

// ==UserScript==
// @name           Facebook Audio
// @description    Adds a link below the Facebook MP3 Player. Even supports players with multiple songs.
// @namespace      sizzlemctwizzle
// @version        2.0.3
// @include        http://*.facebook.com/*
// ==/UserScript==
scr_name='Facebook Audio';
scr_version='2.0.3';
scr_id='10123'; // Final Release, Happy Halloween ;-D

function insertAfter(node, after) { after.parentNode.insertBefore(node, after.nextSibling);}
function $(element) { return document.getElementById(element); }

// wow! actionscript and javascript really are alike. lol
function decryptSRC(src) {
      src_unenc = '';
      key = 's0m3th|ng2scr@mbl3';
      l33t_apology = 'I know. Our decryption is kinda stupid, huh.';
      if (src.length > 0) {
        i = 0;
        while (i < src.length) {
          char1 = src.substr(i, 1);
          char2 = src.substr(i + 1, 1);
          if (char1 >= '0' && char1 <= '9') {
            digit1 = char1.charCodeAt(0) - '0'.charCodeAt(0);
          } else {
            digit1 = char1.charCodeAt(0) - 'a'.charCodeAt(0) + 10;
          }
          if (char2 >= '0' && char2 <= '9') {
            digit2 = char2.charCodeAt(0) - '0'.charCodeAt(0);
          } else {
            digit2 = char2.charCodeAt(0) - 'a'.charCodeAt(0) + 10;
          }
          encrypted_ascii = digit1 * 16 + digit2;
          ascii = encrypted_ascii ^ (key.substr(i / 2 % key.length, 1)).charCodeAt(0);
          src_unenc += String.fromCharCode(ascii); // had to change from chr(ascii)
          i += 2;
        }
        src = src_unenc;
      }
      return src;
    }
	
function find_songs() {
var dev = document.evaluate(
	'//div[@class="mp3player_holder"]', 
	document, 
	null, 
	XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);

for (var i = 0; i < dev.snapshotLength; i ++) {
if (!dev.snapshotItem(i).getAttribute('mod')) {
div = dev.snapshotItem(i);
swfid = div.getElementsByTagName('embed')[0].getAttribute('id');
src = unsafeWindow[swfid].getVariable('src');
// Single Player
if (src) {
src = decryptSRC(src);
link = document.createElement('a');
link.href = src;
link.title = 'I know. Our decryption is kinda stupid, huh.';
txt = document.createTextNode("MP3");
link.appendChild(txt);
para = document.createElement('p');
para.appendChild(link);
div.appendChild(para);
dev.snapshotItem(i).setAttribute('mod', "done");
} else if ( (unsafeWindow[swfid].getVariable('playlist')) && ($('box_app_2550392059')) ) {
// Multisong player
playlist = eval('('+decodeURIComponent(unsafeWindow[swfid].getVariable('playlist'))+')');
var songs = document.evaluate('//div[@class="track_title"] | //div[@class="track_title is_buy_link"]', document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
var ln = playlist.tracks.length;
for (var j = 0; j < songs.snapshotLength; j ++) {
src = playlist.tracks[j].src;
src = decryptSRC(src);
song = songs.snapshotItem(j);
link = document.createElement('a');
link.href = src;
link.title = 'I know. Our decryption is kinda stupid, huh.';
txt = document.createTextNode("MP3");
link.appendChild(txt);
link.setAttribute('style', 'float:right;padding:2px;');
//insertAfter(link, song);
song.parentNode.appendChild(link);
}
GM_addStyle('.buy_link {display:none;}');
dev.snapshotItem(i).setAttribute('mod', "done");
}
 }
}
}

function watchforchange() {
 document.body.removeEventListener('DOMNodeInserted', watchforchange, false);
 setTimeout(function () { find_songs(); document.body.addEventListener('DOMNodeInserted', watchforchange, false); }, 200);
}

window.addEventListener("load", function(e) {
    watchforchange();
}, false);