🏠 Home 

Download MP3 Music [by EisenStein]

Скачать mp3 музыку с zaycev.net, drivemusic.me, mp333.online одним кликом (без переадресаций)

// ==UserScript==
// @name        Download MP3 Music [by EisenStein]
// @namespace   https://greasyfork.org/users/136230
// @description Скачать mp3 музыку с zaycev.net, drivemusic.me, mp333.online одним кликом (без переадресаций)
// @author      EisenStein
// @include     *://zaycev.net/musicset/*
// @include     *://drivemusic.me/*
// @include     *://mp333.online/*
// @version     1.0.0
// @grant       GM_xmlhttpRequest
// ==/UserScript==
var siteObj = null;
(function(){
siteObj = getSiteObject();
clog("siteObj: ", JSON.stringify(siteObj));
checkDownloadLinks();
})();
function getSiteObject()
{
var obj = null;
switch(location.hostname)
{
case "zaycev.net":
obj = {
page: "a#audiotrack-download-link",
link: "a.musicset-track__download-link",
};
break;
case "drivemusic.me":
obj = {
page: "a.btn-download",
link: 'a[class*="download-link"]',
};
break;
case "mp333.online":
obj = {
page: "a.download.middle-button",
link: "a.download.more",
};
break;
}
obj.host = location.hostname;
return obj;
}
function request(details)
{
var s = new Promise(function(resolve, reject){
var dets = extend({}, details);
dets.onload = function(t)
{
if( t.status == 200 )
resolve(t.response);
else
reject(new Error("Error: status " + t.status + ", " + t.statusText));
};
GM_xmlhttpRequest(dets);
});
return s;
}
function extend(t, o)
{
t = t || {};
for(var k in o)
{
if( o.hasOwnProperty(k) && o[k] !== undefined )
t[k] = o[k];
}
return t;
}
function clog(){console.log.apply(this, arguments);}
function getDownloadLink(url)
{
return request({
method: "GET",
url: getLink(url),
}).then(function(r){
var doc = document.implementation.createHTMLDocument("");
doc.documentElement.innerHTML = r;
var l = qs(siteObj.page, doc);
return l ? {url: l.href, name: l.download || l.title || null} : null;
});
}
function getLink(url, prop)
{
link = window.link || document.createElement("a");
link.href = url;
return link[prop||"href"];
}
function checkDownloadLinks()
{
var links = qs_all(siteObj.link);
clog("links.length: ", links.length);
links = [].slice.call(links);
return links.reduce(function(s, link, i){
clog("link[" + pad(i) + ": ", link);
return s.then(function(){
return getDownloadLink(link.href);
}).then(function(dt){
if( dt )
{
clog("link[" + pad(i) + "]: ", link.href, "->", dt.url);
link.setAttribute("src", link.href);
link.href = dt.url;
if( dt.name && getLink(dt.url, "origin") == location.origin )
link.download = dt.name;
else{
link.target = "_blank";
link.title = dt.title;
}
}
}).catch(function(e){console.error("error: link", link)});
}, Promise.resolve() );
}
function pad(num, len)
{
len = len || 2;
return ('0000000' + num).slice(-len);
}
function qs(s, e){return (e||document).querySelector(s);}
function qs_all(s, e){return (e||document).querySelectorAll(s);}