MySpace - Add MP3 Links

By brasil Last update Sep 3, 2007 — Installed 6,863 times.
// ==UserScript==
// @name           MySpace - Add MP3 Links
// @namespace      http://d.hatena.ne.jp/brazil/
// @include        http://*.myspace.com/*
// @include        http://myspace.com/*
// ==/UserScript==

// UPDATE 2007/09/03 11:37 include list
// UPDATE 2007/06/14 11:37 purl/durl


if(!getPlayer()) return;

GM_addStyle(<><![CDATA[
	#downloads {
		background-color : white;
		color : #333 !important;
		border : 2px solid #333;
		text-align : left;
		padding : 1em 0;
	}
	#downloads li{
		margin-left : 3em;
	}
	#downloads a{
		color : #555 !important;
		text-decoration : underline !important;
	}
	#downloads h3{
		margin : 0 0 1em 1em !important;
	}
]]></>);

var ID_LINK_ID = 'ctl00_Main_ctl00_UserBasicInformation1_hlDefaultImage';
var XML_BASE_URL = 'http://mediaservices.myspace.com/services/media/musicplayerxml.ashx?b=';

// -- [Application] -------------
var id = getElementById(ID_LINK_ID).href.match(/friendID=(.*)/).pop();
var url = XML_BASE_URL+id;

xhr(url, function(text){
	insertAfter(getPlayer(), createLinks(text));
})

function getPlayer(){
	return getElementById('mp3player') || getElementById('mini');
}

function createLinks(text){
	var profile = convertToXML(text);
	var downloads = <ul id="downloads" />;
	downloads.@style = 'width:' + (getPlayer().offsetWidth || '400px');
	
	downloads.h3 = <h3>Download MP3</h3>
	
	if(profile.playlist.song.length()){
		for each(var song in profile.playlist.song){
			downloads.li += <li><a href={''+song.@durl || song.@purl}>{song.@title}</a></li>
		}
	} else {
		downloads.h3 += <h3>NOT FOUND</h3>
	}
	
	return convertToDOMElement(downloads);
}


// -- [Utility] -------------
function xhr(url, f){
	GM_xmlhttpRequest({
		method : 'GET', 
		url : url, 
		onload : function(res){
			f(res.responseText);
		}
	})
}

function convertToXML(text){
	return new XML(text.replace(/<\?.*\?>/gm,'').replace(/<!.*?>/gm, '').replace(/xmlns=".*?"/,''));
}

function convertToDOMElement(xml){
	var elm = document.createElement('span');
	elm.innerHTML=xml;
	return elm.firstChild;
}

function getElementById(id){
	return document.getElementById(id);
}

function insertAfter(target, node){
	return target.parentNode.insertBefore(node, target.nextSibling)
}