// ==UserScript== // @name VKget music // @version 1.3 // @description Скрипт добавляет ссылки для скачивания к аудиозаписям на vk.com. Для сохранения всех файлов через wget нажмите F2. // This script adds download links to audios at vk.com. To save all files via wget, press F2. // @match *://vk.com/* // @require http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js // @require https://cdnjs.cloudflare.com/ajax/libs/FileSaver.js/1.3.3/FileSaver.js // @grant none // @run-at document-idle // 30.08.2017 // @namespace https://greasyfork.org/users/148414 // @downloadURL none // ==/UserScript== (function() { function decode_url(url){ var tmp = {}; AudioPlayerHTML5.prototype._setAudioNodeUrl(tmp, url); return tmp.src; } function utf8_to_cp866(aa) { var bb = [], c = 0; for (var i = 0; i < aa.length; i++) { c = aa.charCodeAt(i); if (c > 127) { if (c >= 0x410 && c <= 0x43f) bb.push(c + 0x80 - 0x410); if (c >= 0x440 && c <= 0x44f) bb.push(c + 0xe0 - 0x440); if (c == 0x401) bb.push(0xf0); if (c == 0x451) bb.push(0xf1); } else { bb.push(c); } } return Uint8Array(bb); } var ready = 0; var wget_list = ""; var run = 0; function add_download_links() { run = 1; var audio_row_selector = '.audio_row'; if ($(audio_row_selector).length <= ready) { run = 0; return; } var $this = $($(audio_row_selector)[ready]); var audio_id_raw = $this.data('audio'); var audio_id = audio_id_raw[1] + '_' + audio_id_raw[0]; var link = ""; $.ajax({ url: 'https://vk.com/al_audio.php', method: 'post', async: false, data: { act: 'reload_audio', al: 1, ids: audio_id }, success: function(response) { s_response = response.split('"'); //alert("s_response: " + s_response); if (s_response.length > 1) { link = decode_url(s_response[1]); //alert("link: " + link); if (link != s_response[1]) { var link_style = 'position: absolute; right: -12px; top: 12px; color: white; z-index: 100; background: red; border-radius: 3px 3px 3px 3px; padding: 2px 6px; font-size: 16px; opacity: 0.5;'; var song_name = $this.find('.audio_row__title_inner').text().trim().replace(/\"/g, '\''); var performer_name = $this.find('.audio_row__performer').text().trim().replace(/\"/g, '\''); var track_name = performer_name + ' - ' + song_name; $this.append('' ); ready++; wget_list += 'wget -c -O "' + track_name + '.mp3" ' + link + String.fromCharCode(0x0d, 0xa); } } else { if (response.match(/!bool/)) { //alert("skip bad link"); ready++; } } } }); setTimeout( function(){ add_download_links() }, 500); } add_download_links(); if (!ready) setTimeout( function(){ add_download_links() }, 2000); window.addEventListener("scroll", function(){ if (!run) add_download_links(); }, false); $('body').keydown(function(e){ if (e.which == 113) { // F2 var blob; var p = window.navigator.platform; if (p == "Win32" || p == "Win64") { blob = new Blob([utf8_to_cp866(wget_list)], {type: "application/octet-binary"}); saveAs(blob, 'wget_list.bat', true); } else { blob = new Blob([wget_list], {type: "text/plain;charset=utf-8"}); saveAs(blob, 'wget.sh', true); } } }); })();