lastfmjunkie

By naph Last update Mar 28, 2007 — Installed 327 times.

Archived Comments (locked)

in
Subscribe to Archived Comments 3 posts, 3 voices



Jesse Andrews Admin

The following is an archive of comments made before threaded discussions was implemented (November 16th, 2008)

 
greaseschmaecky Scriptwright

Does not work anymore with the new last.fm design.
Use this enhanced one instead!

This will also work on international lastfm.* sites.

// ==UserScript==
// @name lastfmjunkie
// @description adds btjunkie searching for last.fm artists
// @include http://www.last.fm/music/*
// @include http://www.lastfm.*/music/*
// ==/UserScript==

function lastfmjunkie_search() {
	var catpage = document.getElementById( 'catalogueHead' );
	if ( !catpage ) return;

	var heading = catpage.getElementsByTagName( 'h1' )[0];
	if ( !heading ) return;

	var artistName = new String( heading.firstChild.nodeValue );

	lastfmjunkie_setResults( 'Searching BTJunkie...' );

	GM_xmlhttpRequest({
		method: 'GET',
		url: 'http://btjunkie.org/rss.xml?query=' + escape(artistName),
		onload: function( res ) {
			if ( res.readyState == 4 && res.status == 200 )
				lastfmjunkie_displayXml( res.responseText, artistName );
		}
	});
};

function lastfmjunkie_xmlChildValue( node, name ) {
	var child = node.getElementsByTagName( name )[0];
	return child ? child.firstChild.nodeValue : '';
}

function lastfmjunkie_setResults( text ) {
	var results = document.getElementById( 'lastfmjunkie_results' );

	while ( results.firstChild )
		results.removeChild( results.firstChild );

	results.appendChild(
		document.createTextNode(text)
	);
	results.style.display = 'block';
}

function lastfmjunkie_displayXml( xmlText, band ) {
	var parser = new DOMParser();
	var xml = parser.parseFromString( xmlText, 'application/xml' );
	var root = xml.documentElement;
	var items = root.getElementsByTagName( 'item' );
	var results = document.getElementById( 'lastfmjunkie_results' );
	var header = document.createElement( 'h5' );

	lastfmjunkie_setResults( '' );

	header.appendChild( document.createTextNode('BTJunkie Results (first 20)') );
	results.appendChild( header );

	if ( !items.length ) {
		results.appendChild(
			document.createTextNode('nothing found, sorry!')
		);
	} else for ( var i=0; i<items.length && i<20; i++ ) {
		var item = items[ i ];
		var stitle = lastfmjunkie_xmlChildValue(item,'title');
		var slink = lastfmjunkie_xmlChildValue(item,'link');
		var sdesc = lastfmjunkie_xmlChildValue(item,'description');
		var elink = document.createElement( 'a' );
		var etext = document.createTextNode( stitle );

		elink.style.display = 'block';
		elink.href = slink;
		elink.appendChild( etext );

		results.appendChild( elink );
	}

	var more = document.createElement( 'a' );
	more.href = 'http://btjunkie.org/search?q=' + escape(band);
	more.appendChild( document.createTextNode('see all results') );
	more.style.fontWeight = 'bold';

	var close = document.createElement( 'a' );
	close.href = 'javascript:;';
	close.addEventListener( 'click', function() {
		results.style.display = 'none';
	}, true );
	close.appendChild( document.createTextNode('close') );

	results.appendChild( document.createElement('br') );
	results.appendChild( more );
	results.appendChild( document.createTextNode(' - ') );
	results.appendChild( close );
}

function lastfmjunkie_run() {
	var catpage = document.getElementById( 'catalogueHead' );

	if ( !catpage ) return;

	var heading = catpage.getElementsByTagName( 'h1' )[0];
	var paragraphs = catpage.getElementsByTagName( 'p' );
	var stats;
	for ( var i=0; i<paragraphs.length && i<10; i++ ) {
		if ( paragraphs[i].getAttribute('class')=='stats' ) {
			stats = paragraphs[i];
		}
	}
	if ( !stats ) return;
	
	var title = heading;
	var link = document.createElement( 'a' );
	var linkImg = document.createElement( 'img' );
	var results = document.createElement( 'div' );

	linkImg.src = 'data:image/x-ico;base64,AAABAAEAEBAAAAEACABoBQAAFgAAACgAAAAQAAAAIAAAAAEACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgEAAAkFAwAHBQQAGBALACQYEAAoGQ8AOCIVAEIoGAA6ODYAPDo6AD08PABQPjQAQEBAAHpLLQBbTEQAhFExAF1ORgBeU0wAYVRMAIVXOgBlWVIAj2FEAGxkXwB6eXgAfXx8AICAgACphW8ArIp0ALCPegCwkHwAm5SPAKGWjwC4mogAuJyKALqdiwC%2Bo5IAwKaWAMKomADEq5wAxq%2BhAM66rQDQvLAA1MO4ANfGvADYyL4A39LKAODTywDg1MwA4dXNAObb1QDo3tgA5eTjAPDq5gD07%2BwA9fHuAPr4%2BAD8%2BvoA%2FPz7AP%2F%2F%2FwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRoaGhoaGhoaGhoaGhoaDRo7Ozs7Ozs7Ozs7Ozs6GhoTJiYmKDE7Ozs7NiYmIDsaCBAQEBAQGzo7OjMQEC47GggQKSweEBAqOgsPEBAwOxoIEDU7ORAQIgsADBAQMDsaCBArLyQQDgQAAAwQEDA7GggQEBAQFAUAAAAPEBAwOxoIECUnFgcAAAALMhAQMDsaCBA1OhICAAALOjMQEDA7GggQIxUAAAAJISMdEBAcIxEIEAYBAAALNxAQEBAQEBAIFy0fAwALOjotLS0tLS0tFxk6GDQLODs7Ozs7Ozs7OxoLADo7Ozs7Ozs7Ozs7OzsaDQoZGhoaGhoaGhoaGhoaDQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA%3D';
	linkImg.style.border = 'none';
	linkImg.style.margin = '0px 10px';

	results.id = 'lastfmjunkie_results';
	results.style.display = 'none';
	results.style.padding = '5px';
	results.style.borderTop = '1px #ccc solid';
	results.style.borderBottom = '1px #ccc solid';
	results.style.backgroundColor = '#eee';
	results.style.margin = '5px 0px';

	title.style.float = 'left';
	link.style.float = 'left';
	link.href = 'javascript:;';
	link.addEventListener( 'click', lastfmjunkie_search, true );
	link.appendChild( linkImg );

	heading.appendChild( link );
	stats.parentNode.insertBefore( results, stats.previousSibling );
}

setTimeout( lastfmjunkie_run, 2000 );

 
Garrey User

Good idea. Thanks.

Cross
Presentational HTML allowed.
Use <code> for inline code and <pre> for code blocks. Use &lt; and &gt; for literal < and >.
We help break paragraphs and link your links.
or cancel