Video Game Music batch downloader

batch download for downloads.khinsider.com originalsoundtracks

Verze ze dne 29. 03. 2018. Zobrazit nejnovější verzi.

K instalaci tototo skriptu si budete muset nainstalovat rozšíření jako Tampermonkey, Greasemonkey nebo Violentmonkey.

You will need to install an extension such as Tampermonkey to install this script.

K instalaci tohoto skriptu si budete muset nainstalovat rozšíření jako Tampermonkey nebo Violentmonkey.

K instalaci tohoto skriptu si budete muset nainstalovat rozšíření jako Tampermonkey nebo Userscripts.

You will need to install an extension such as Tampermonkey to install this script.

K instalaci tohoto skriptu si budete muset nainstalovat manažer uživatelských skriptů.

(Už mám manažer uživatelských skriptů, nechte mě ho nainstalovat!)

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

(Už mám manažer uživatelských stylů, nechte mě ho nainstalovat!)

// ==UserScript==
// @name              Video Game Music batch downloader
// @name:zh-TW        Video Game Music 批量下載器
// @namespace         https://blog.maple3142.net/
// @description       batch download for downloads.khinsider.com originalsoundtracks
// @description:zh-TW 批量下載 downloads.khinsider.com 的原聲帶
// @version           0.1.4
// @author            maple3142
// @match             https://downloads.khinsider.com/game-soundtracks/album/*
// @require           https://cdnjs.cloudflare.com/ajax/libs/jszip/3.1.5/jszip.min.js
// @require           https://cdnjs.cloudflare.com/ajax/libs/babel-polyfill/6.26.0/polyfill.min.js
// @connect           66.90.93.122
// @license           MIT
// @copyright         2018, maple3142 (https://blog.maple3142.net/)
// @grant             GM_xmlhttpRequest
// ==/UserScript==

(function ($,JSZip) {
'use strict';

$ = $ && $.hasOwnProperty('default') ? $['default'] : $;
JSZip = JSZip && JSZip.hasOwnProperty('default') ? JSZip['default'] : JSZip;

function downloadblob(url) {
	return new Promise((resolve, reject) => {
		GM_xmlhttpRequest({
			method: 'GET',
			url,
			responseType: 'blob',
			onload: res => resolve(res.response)
		});
	});
}

$('a:contains("click to download")').on('click', async e => {
	e.preventDefault();
	$('.albumMassDownload').prev().replaceWith(`
<div>
<span>Download progress:</span>
<progress min="0" max="100" id="dp" value="0"></progress>
</div>
`);

	const title = $('h2')[0].textContent;
	const urls = $('tr>td.clickable-row:not([align])').toArray().map(el => $(el).find('a').attr('href'));
	const requests = urls.map(e => fetch(e).then(r => r.text()));
	const files = (await Promise.all(requests)).map(html => {
		const url = $(html).find('a:contains("Click here to download as MP3")').attr('href');
		return { blob: downloadblob(url), name: decodeURIComponent(url.split('/').pop()) };
	});
	const blob = await files.reduce((zip, file) => {
		zip.file(file.name, file.blob);
		return zip;
	}, new JSZip()).generateAsync({ type: 'blob' }, meta => $('#dp').attr('value', parseInt(meta.percent)));
	const url = URL.createObjectURL(blob);
	const a = document.createElement('a');
	a.download = title + '.zip';
	a.href = url;
	document.body.appendChild(a);
	a.click();
	a.remove();
	URL.revokeObjectURL(url);
});

}($,JSZip));