HHDX MP3 Download

By Damien Gabrielson Last update Sep 15, 2008 — Installed 347 times.

There are 1 previous version of this script.

// ==UserScript==
// @name           HHDX MP3 Download
// @namespace      http://www.vatoland.com/
// @include        http://*.hiphopdx.com/index/audio*
// @description    Inserts download links for music items that have MP3s available
// ==/UserScript==
if (!GM_xmlhttpRequest) {
	alert('Please upgrade to the latest version of Greasemonkey.');
	return;
}

// retrieve all links in document
var allLinks = document.evaluate(
	'//a[@href]',
	document,
	null,
	XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE,
	null);

for (var i=0; i < allLinks.snapshotLength; i++) {
	var thisLink = allLinks.snapshotItem(i);
	// determine if link is a music item
	if (thisLink && thisLink.href && (thisLink.href.indexOf('/index/audio/id.') >= 0) && (thisLink.href.indexOf('comments') == -1))
	{
		// determine post id from url
		var postID = thisLink.href.substring(thisLink.href.indexOf('id.') + 3, thisLink.href.substring(thisLink.href.indexOf('id.') + 3).indexOf('/') + thisLink.href.indexOf('id.') + 3);
		var elementID = GenerateUniqueElementID(postID);
		
		if (thisLink.getElementsByTagName('img').length == 1)
		{
      // create break and download link after Listen link
      var downloadLink = document.createElement('a');
      downloadLink.setAttribute('id', elementID);
      downloadLink.setAttribute('href', '#');
      var downloadImage = document.createElement('img');
      downloadImage.setAttribute('alt', 'Download MP3');
      downloadImage.setAttribute('border', '0');
      downloadImage.setAttribute('src', 'http://www.vatoland.com/userscripts/hhdx-download.gif');
      downloadLink.appendChild(downloadImage);
      thisLink.parentNode.appendChild(document.createElement('br'));
      thisLink.parentNode.appendChild(downloadLink);
		}
		else if (thisLink.parentNode.tagName.toUpperCase() == 'LI')
		{
      // create download link after Listen link
      var downloadLink = document.createElement('a');
      downloadLink.setAttribute('id', elementID);
      downloadLink.setAttribute('href', '#');
      downloadLink.innerHTML = '<span class="artistname">MP3</span>';
      thisLink.parentNode.appendChild(document.createTextNode('\u00A0|\u00A0'));
      thisLink.parentNode.appendChild(downloadLink);
		}
		
		GetAndSetDownloadLinkForPostID(postID, elementID);
	}
}

function GetAndSetDownloadLinkForPostID(postID, elementID)
{
	var xmlURL = 'http://www.hiphopdx.com/index/media-player-action/type.0/id.' + postID + '/ext.new2';

	GM_xmlhttpRequest({
		method:"GET",
		url: xmlURL,
		headers: {
			'User-agent': 'Mozilla/4.0 (compatible)',
			'Accept': 'application/xml,text/xml'
		},
		onload:function(result) {
			var parser = new DOMParser();
			var dom = parser.parseFromString(result.responseText, "application/xml");
			var items = dom.getElementsByTagName('audioplayer');
			var mediaURL = items[0].getElementsByTagName('track')[0].getElementsByTagName('song')[0].textContent;
			var link = document.getElementById(elementID);
			if (link)
			{
				if (mediaURL.substr(0, 7).toLowerCase() != 'http://')
				{
          mediaURL = 'http://' + mediaURL;
				}
				
				link.href = mediaURL;
			}
			/*
			else
			{
        GM_log('Could not locate element \'' + elementID + '\' and could not update url to ' + mediaURL + '.');
			}
			*/
		}
	});
}

function GenerateUniqueElementID(postID)
{
  var elementID = 'download' + postID;
  if (document.getElementById(elementID))
  {
    elementID = 'download_' + GenerateGuid();
    //GM_log('Generated new elementID: ' + elementID);
  }
  return elementID;
}

function GenerateGuid()
{
  var result, i, j;
  result = '';
  for(j = 0; j < 32; j++)
  {
    if(j == 8 || j == 12 || j == 16|| j == 20)
    {
      result = result + '-';
    }
    i = Math.floor(Math.random()*16).toString(16).toUpperCase();
    result = result + i;
  }
  return result;
}