批量下載 downloads.khinsider.com 的原聲帶
目前為
// ==UserScript==
// @name Video Game Music batch downloader
// @name:zh-TW Video Game Music 批量下載器
// @namespace https://blog.maple3142.net/
// @version 0.1.2
// @description batch download for downloads.khinsider.com originalsoundtracks
// @description:zh-TW 批量下載 downloads.khinsider.com 的原聲帶
// @author maple3142
// @require https://cdnjs.cloudflare.com/ajax/libs/jszip/3.1.5/jszip.min.js
// @match https://downloads.khinsider.com/game-soundtracks/album/*
// @grant GM_xmlhttpRequest
// @connect 66.90.93.122
// @license MIT
// @copyright 2018, maple3142 (https://blog.maple3142.net/)
// ==/UserScript==
(function() {
'use strict'
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',e=>{
e.preventDefault()
$('.albumMassDownload').append(`
<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()))
Promise.all(requests).then(ar=>ar.map(ht=>{
const url=$(ht).find('a:contains("Click here to download as MP3")').attr('href')
return {
blob: downloadblob(url),
name: decodeURIComponent(url.split('/').pop())
}
}).reduce((zip,file)=>{
zip.file(file.name,file.blob)
return zip
},new JSZip()).generateAsync({type: 'blob'},meta=>{
$('#dp').attr('value',parseInt(meta.percent))
}).then(blob=>{
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)
}))
})
})()