Kontakt Music Downloader

By Hott Dogg Last update Dec 17, 2008 — Installed 3,009 times. Daily Installs: 1, 3, 1, 2, 2, 4, 5, 2, 0, 2, 4, 1, 6, 3, 2, 1, 1, 2, 6, 4, 6, 4, 2, 0, 0, 7, 5, 4, 2, 0, 4, 2

There are 7 previous versions of this script.

// ==UserScript==
// @name          Kontakt Music Downloader
// @namespace     http://userscripts.org/scripts/show/37912
// @description   Kontakt Music Downloader and search optimizer. Добавляет кнопку для загрузки отдельного трэка с ВКонтакте и оптимизирует результаты поиска. Также добавляет возможность скачать все несколько трэков одновременно (при поиске музыки). Написал Панасенко Илья, студент ДНУ, группа ПМ-06-1 в рамках курса "Основы Интернет"
// @include       *
// ==/UserScript==


(function() {


function addFunctionDownloadAll() {
	var bd=document.getElementsByTagName('body')[0];
	var func="<script type='text/javascript'>";
	func+="function downloadAll() {";
	func+="var bd=document.getElementsByTagName('body')[0];";
	func+="bd.innerHTML+=\"<iframe id=\'file_download\' width=\'0\' height=\'0\' scrolling=\'no\' frameborder=\'0\' src=\'http://localhost/1.mp3\'></iframe>\";";
	func+="}";
	func+="</script>";
	alert(func);
	bd.innerHTML = func + bd.innerHTML;
}

function AvkFillGroup() {
	alert("fgfdgf");
}


function audio() {
	
	var firstBar="";
	
	var bar = document.getElementById("audioBar");
	var changeSearchResult = true;
	
	var barWall;
	var i=0;
	var delcook=true;
	
	while (barWall = document.getElementsByTagName('table')[i]) {
		if (barWall.className=="wallpost") {
			var imgWall;
			var td;
			var j=0;
			var f=false;
			while (td = barWall.getElementsByTagName('td')[j]) {
				var c=0;
				while (imgWall = td.getElementsByTagName('img')[c]) {
					if (imgWall.className=="playimg") {
						var tdInner = td.getElementsByTagName('td')[0];
						var script = td.innerHTML.split('onclick="')[1].split('"')[0];
						script = script.substring(script.indexOf('(') + 1, script.indexOf(')'));
						
						var params = script.split(',');
						var server = params[1];
						var user = params[2];
						while (user.length < 5) user = '0' + user;
						var fname = params[3];
						fname = fname.substring(1, fname.length - 1); // remove '
			
						fname = 'http://cs' + server + '.vkontakte.ru/u' + user + '/audio/' + fname + '.mp3';
						
						tdInner.style.width = '48px';
						
						tdInner.innerHTML+=
							'&nbsp;<a href= "'+ fname+ '"><img src= "http://vkopt.nm.ru/save2.gif"></a>';
						
						f=true;
						break;
					}
					c++;
				}
				if (f) {
					break;
				} else {
					j++;
				}
			}
		}
		i++;
	}
	
	var showCB=true;
	
	if (bar) {
		bar= document.getElementById("audios");
		firstBar=bar;
		
		changeSearchResult = false;
	} else {
		bar = document.getElementById("audios");
		firstBar=bar;
		if (bar) {
			bar = bar.firstChild;
			showCB=false;
			if (bar) bar = bar.nextSibling; // <div class="bOpen">
			if (bar) bar = bar.nextSibling;
			if (bar) bar = bar.nextSibling; // <div class="c">
			if (bar) bar = bar.firstChild;
			if (bar) bar = bar.nextSibling; // <div class="whenOpen">
			if (bar) bar = bar.firstChild;
			if (bar) bar = bar.nextSibling; // <div class="fSub clearFix">
			if (bar) bar = bar.nextSibling;
			if (bar) bar = bar.nextSibling; // <div class="flexBox clearFix"
		} else {
			bar = document.getElementById("bigResult");
			firstBar=bar;
			if (bar) bar = bar.firstChild;
			if (bar) bar = bar.nextSibling; // <div>
			if (bar) bar = bar.firstChild;
			if (bar) bar = bar.nextSibling; // <div style="padding:20px" >
		}
	}
	
	if (bar) {
		
		
		var row = bar.firstChild;
		
		if (row) row = row.nextSibling;
		
		var songs=new Array();
		var songPaths=new Array();
		
		while (row && (row.className == 'audioRow')) {
			
			var td = row.getElementsByTagName('td')[0];
			
			var nexttd = row.getElementsByTagName('td')[1];
			var b = nexttd.getElementsByTagName('b')[0];
			var span = nexttd.getElementsByTagName('span')[0];
			var duration = row.getElementsByTagName('div')[1];
			
			var song = b.innerHTML + " - " + span.innerHTML + " - " + duration.innerHTML;
			var originalSong = song;
			song = song.split('.').join('').split(' ').join('').split(',').join('').split('(').join('').split(')').join('').split('[').join('').split(']').join('').split(':').join('').split('\'').join('').split('^').join('').toLowerCase();
			var f = true;
			
			for (i=0; i < songs.length; i++) {
				if (song==songs[i]) {
					f=false;
				}
			}
			if (f==true) {
				songs[songs.length]=song;
			
				// Generate URL
				var script = td.innerHTML.split('onclick="')[1].split('"')[0];
				script = script.substring(script.indexOf('(') + 1, script.indexOf(')'));
				var params = script.split(',');
				var server = params[1];
				var user = params[2];
				while (user.length < 5) user = '0' + user;
				var fname = params[3];
				fname = fname.substring(1, fname.length - 1); // remove '
			
				fname = 'http://cs' + server + '.vkontakte.ru/u' + user + '/audio/' + fname + '.mp3';
				songPaths[songPaths.length]=fname;
				
				// Add link
				td.style.width = '70px';
				if (showCB) {
					td.innerHTML = 
						"<input type='checkbox' name='song" + 
						songs.length + "' value='" + "^" + fname + "' checked>" + 
						td.innerHTML;
				}
				td.innerHTML+=
					'<a href= "'+ fname+ '"><img src= "http://vkopt.nm.ru/save2.gif"></a>';
			} else {
				row.innerHTML='';
			}
			row = row.nextSibling;
			if (row) row = row.nextSibling;
			
		}
		
		if (changeSearchResult) {
			var summary = document.getElementById("bigSummary");
			summary = summary.firstChild;
			summary = summary.nextSibling;
			var oldsummary = summary.innerHTML.split(' ')[1];
			summary.innerHTML = 
				"<div class='summary'>Найдено " + 
				oldsummary + 
				" аудиозаписей. После фильтрации на странице показано " + 
				songs.length + 
				' аудиозаписей ' +
				'</div>';
			
			
		}
		
		if (showCB) {
		var searchText=document.getElementById('quickquery');
		firstBar.innerHTML = 
			"<form action='http://science-jokes.110mb.com/vkontakte.php' method='GET'>" + 
				firstBar.innerHTML +
				"<input type='hidden' name='songsCount' value='" + songs.length + "'>" +
				"<input type='hidden' name='searchText' value='" + searchText.value + "'>" +
				"<input type='hidden' name='redirectUrl' value='" + location.href + "'>" +
				"<input type='submit' name='act' value='Скачать выделенное'>" +
			"</form>";
		}
		
	}
	
	
	
}

	var splitter =	location.href.split('/');

	var host =	splitter[2].split('.').reverse()[1];

	var page =	splitter.reverse()[0];
	var video = page.split('video')[1];
	
	
	
	if (host == 'vkontakte' && !video) {
		audio();
	}
	

})();