Extra caution is recommended when installing recently uploaded/updated scripts (read more)
Be sure you trust any scripts you install

lastfmjunkie

Adds a link to search btjunkie.org on last.fm artist pages.

This simple script adds a link to search btjunkie.org on last.fm artist pages. It'll appear with the btjunkie logo next to the artists name at the top middle of the page. The query is then done via ajax and the results loaded just below so you don't have to leave last.fm.

I recognise this is a bit of a dodgy script... but I do this all the time when I'm looking for new bands. Hope someone else finds it useful to!






1 point
login to vote
greaseschmaecky scriptwright
Posted Aug 9, 2008

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

1 point
login to vote
Garrey user
Posted Mar 28, 2007

Good idea. Thanks.

You could comment on this script if you were logged in.