There are 2 previous versions 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;
}
