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);
