Greasy Fork is available in English.
Скрипт добавляет ссылки для скачивания к аудиозаписям на vk.com. Для сохранения всех файлов через wget нажмите F2.
当前为
// ==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 http://greasyfork.icu/users/148414
// ==/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('<a class="audio-download-link" style="' + link_style +
'" title="Скачать" download="' +
track_name + '.mp3" data-track_name="' +
track_name + '" href="' + link +
'" onclick="arguments[0].stopPropagation()"> ♫ </a>'
);
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);
}
}
});
})();