NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
// ==UserScript== // @name Zing MP3 Downloader (320kbps) // @namespace https://holy-donkey.github.io/ // @description Download nhạc nhất lượng cao 320kbps tại mp3.zing.vn // @version 4.0.1 // @icon http://i.imgur.com/PnF4UN2.png // @author The Holy Donkey (Thánh Lư Đại Nhân) // @license MIT // @match http://mp3.zing.vn/bai-hat/*.html* // @match http://mp3.zing.vn/album/*.html* // @match http://mp3.zing.vn/playlist/*.html* // @match http://mp3.zing.vn/nghe-si/* // @match http://mp3.zing.vn/tim-kiem/bai-hat.html?q=* // @require https://cdn.jsdelivr.net/jquery/2.2.4/jquery.min.js // @require https://cdn.jsdelivr.net/filesaver.js/1.3.3/FileSaver.min.js // @noframes // @connect self // @connect zdn.vn // @supportURL https://github.com/holy-donkey/UserScripts/issues // @run-at document-idle // @grant GM_xmlhttpRequest // @grant GM_addStyle // @grant GM_download // ==/UserScript== function bodauTiengViet(str) { str = str.toLowerCase(); str = str.replace(/à|á|ạ|ả|ã|â|ầ|ấ|ậ|ẩ|ẫ|ă|ằ|ắ|ặ|ẳ|ẵ/g, 'a'); str = str.replace(/è|é|ẹ|ẻ|ẽ|ê|ề|ế|ệ|ể|ễ/g, 'e'); str = str.replace(/ì|í|ị|ỉ|ĩ/g, 'i'); str = str.replace(/ò|ó|ọ|ỏ|õ|ô|ồ|ố|ộ|ổ|ỗ|ơ|ờ|ớ|ợ|ở|ỡ/g, 'o'); str = str.replace(/ù|ú|ụ|ủ|ũ|ư|ừ|ứ|ự|ử|ữ/g, 'u'); str = str.replace(/ỳ|ý|ỵ|ỷ|ỹ/g, 'y'); str = str.replace(/đ/g, 'd'); str = str.replace(/\W+/g, ' '); str = str.replace(/\s/g, '-'); return str; } function downloadSong(songId, progress, complete, error) { GM_xmlhttpRequest({ method: 'GET', url: 'http://api.mp3.zing.vn/api/mobile/song/getsonginfo?requestdata={"id":"' + songId + '"}', onload: function (data) { data = $.parseJSON(data.response); if (!data.song_id || !data.source[320]) { console.error(data); error(); return; } var songSource = data.source[320], songName = bodauTiengViet(data.title + '_' + data.artist) + '.mp3'; if (typeof GM_download !== 'undefined') { progress(''); GM_download({ url: songSource, name: songName, saveAs: false, onload: function () { complete('GM_download', songName); }, onerror: function (e) { console.log(e); error(); } }); } else { GM_xmlhttpRequest({ method: 'GET', url: songSource, responseType: 'blob', onload: function (source) { complete(source.response, songName); }, onprogress: function (e) { if (e.total) { progress(Math.floor(e.loaded * 100 / e.total) + '%'); } else { progress(''); } }, onerror: function (e) { console.error(e); error(); } }); } }, onerror: function (e) { console.error(e); error(); } }); } GM_addStyle('.bv-icon{background-image:url(http://static.mp3.zdn.vn/skins/zmp3-v4.1/images/icon.png)!important;background-repeat:no-repeat!important;background-position:-25px -2459px!important;}.bv-download{background-color:#721799!important;border-color:#721799!important;}.bv-download span{color:#fff!important;margin-left:8px!important;}.bv-disable,.bv-download:hover{background-color:#2c3e50!important;border-color:#2c3e50!important;}.bv-text{background-image:none!important;color:#fff!important;text-align:center!important;font-size:smaller!important;line-height:25px!important;}.bv-waiting{cursor:wait!important;background-color:#2980b9!important;border-color:#2980b9!important;}.bv-complete{background-color:#27ae60!important;border-color:#27ae60!important;}.bv-error{background-color:#c0392b!important;border-color:#c0392b!important;}.bv-disable{cursor:wait!important;opacity:0.4!important;}'); window.URL = window.URL || window.webkitURL; if (location.pathname.indexOf('/bai-hat/') === 0) { var $btn = $('<a>', { 'class': 'button-style-1 pull-left bv-download', href: '#download', html: '<i class="zicon icon-dl"></i>' }), $txt = $('<span>', { text: 'Tải nhạc 320kbps' }), disableClick; $('#tabService').replaceWith($btn.append($txt)); $btn.on('click', function (e) { e.preventDefault(); if (disableClick) return; disableClick = true; $btn.addClass('bv-waiting'); $txt.text('Chờ một chút...'); downloadSong($('#tabAdd').data('id'), function (percent) { $txt.text('Đang tải... ' + percent); }, function (blob, fileName) { if (blob !== 'GM_download') { $btn.attr({ href: window.URL.createObjectURL(blob), download: fileName }).off('click'); saveAs(blob, fileName); } else { disableClick = false; } $btn.removeClass('bv-waiting').addClass('bv-complete'); $txt.text('Nhấn để tải nhạc'); }, function () { $btn.removeClass('bv-waiting').addClass('bv-error'); $txt.text('Lỗi! Không tải được'); }); }); } else { var disableClick = []; $('.fn-dlsong').replaceWith(function () { var songId = $(this).data('item').slice(5); disableClick[songId] = false; return '<a title="Tải nhạc 320kbps" class="bv-download bv-icon" href="#download" data-id="' + songId + '"></a>'; }); $('.bv-download').on('click', function (e) { e.preventDefault(); var $this = $(this), songId = $this.data('id'); if (disableClick[songId]) return; disableClick[songId] = true; $this.addClass('bv-waiting bv-text').text('...'); downloadSong(songId, function (percent) { if (percent !== '') { $this.text(percent); } }, function (blob, fileName) { if (blob !== 'GM_download') { $this.attr({ href: window.URL.createObjectURL(blob), download: fileName }).off('click'); saveAs(blob, fileName); } else { disableClick = false; } $this.removeClass('bv-waiting bv-text').addClass('bv-complete').text(''); }, function () { $this.removeClass('bv-waiting bv-text').addClass('bv-error').text(''); }); }); }