Skip to content

Instantly share code, notes, and snippets.

@MusiCode1
Last active June 22, 2021 09:42
Show Gist options
  • Save MusiCode1/c50432ad3f413a958e6f3aea7c214cfc to your computer and use it in GitHub Desktop.
Save MusiCode1/c50432ad3f413a958e6f3aea7c214cfc to your computer and use it in GitHub Desktop.
(async function download_all_songs() {
console.log("Musicode7");
console.log("https://gist.github.com/MusiCode1/c50432ad3f413a958e6f3aea7c214cfc");
const audio_list = document.querySelectorAll("audio > source");
check();
add_html();
const albom_title = document.querySelector(".album-title").innerText,
albom_art = document.querySelector(".arts_name").innerText;
const file_name = `${albom_title} - ${albom_art}`;
await my_require('https://cdnjs.cloudflare.com/ajax/libs/jszip/3.6.0/jszip.min.js');
var zip = new window.JSZip();
for (const source of audio_list) {
await download(source.src)
}
my_console_log("save zip file...");
await save_zip_file();
document.querySelector(".back-modal").remove();
function check() {
if (window.location.hostname != "jewishmusic.fm") {
throw new Error("זה איננו " + "jewishmusic.fm!");
}
if(audio_list.length < 1) {
throw new Error("אין בדף זה קבצי מוזיקה!");
}
}
async function save_zip_file() {
const zipFile = await zip.generateAsync({ type: "blob" });
save_blob_file(zipFile, file_name);
}
async function download(url) {
url = url.replace("http://", "https://");
const file_name = url.split("/").pop();
my_console_log(`download file ${file_name}...`);
const promise = download_file(url)
.then(blob => {
my_console_log(`add to zip file ${file_name}...`);
zip.file(file_name, blob, { binary: true });
});
await promise;
}
function download_file(url, reply = 0) {
let res;
const promise = new Promise(async (resolve, reason) => {
const file_name = url.split("/").pop();
res = fetch(url, {
headers: {
"Range": "bytes=0-"
}
});
const response = await res;
if (response.status < 200 || response.status >= 400) {
if (reply < 5) {
reply++;
my_console_log("!!!");
await new Promise(resolve => setTimeout(resolve, 1000));
resolve(download_file(url, reply))
} else {
reason();
throw response;
}
}
const reader = response.body.getReader();
const contentLength = response.headers.get('Content-Length');
let receivedLength = 0;
const stream = new Response(
new ReadableStream({
async start(controller) {
const interval = setInterval(() => {
my_console_log(`Received ${file_name} ${bytesToSize(receivedLength)} of ${bytesToSize(contentLength)}`);
}, 1000);
while (true) {
const { done, value } = await reader.read();
if (done) {
clearInterval(interval);
break;
}
receivedLength += value.length;
controller.enqueue(value);
}
controller.close();
}
})
);
const blob = await stream.blob();
resolve(blob);
});
promise.res = res;
return promise;
function bytesToSize(bytes) {
var sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB'];
if (bytes == 0) return '0 Byte';
var i = parseInt(Math.floor(Math.log(bytes) / Math.log(1024)));
return Math.round(bytes / Math.pow(1024, i), 2) + ' ' + sizes[i];
}
}
async function my_require(url) {
const script = document.createElement('script');
script.type = 'text/javascript';
script.src = url;
document.head.appendChild(script);
my_console_log(`import ${url} ...`);
await new Promise((resolve) => script.onload = resolve);
}
async function save_blob_file(blob, file_name) {
var url = URL.createObjectURL(blob);
var a = document.createElement('a');
a.href = url;
a.download = file_name || "download";
document.body.appendChild(a);
a.click();
a.remove();
}
function add_html() {
const div = document.createElement("div");
const style = document.createElement("style");
div.classList.add("back-modal");
style.nodeType = "text/css";
div.innerHTML = `<div class="modal"></div>`;
style.innerHTML = `
.back-modal {
position: fixed;
z-index: 50;
width: 100%;
height: 100%;
overflow: auto;
left: 0;
top: 0;
padding-top: 4em;
}
.modal {
margin: auto;
background-color: black;
width: 50vw;
height: 50vh;
box-shadow: 0px 0px 14px 5px rgb(0 0 0 / 85%);
padding: 2vh;
overflow-y: scroll;
overflow-x: overlay;
color: #5c5cec;
direction: ltr;
font-size: medium;
}
`;
document.body.appendChild(style);
document.body.appendChild(div);
}
function my_console_log(txt) {
const modal = document.querySelector(".modal");
modal.innerText += txt + "\n";
modal.scrollTo({
top: modal.scrollHeight,
behavior: "smooth"
});
}
})().catch(error => alert(error));
javascript:(async function download_all_songs(){console.log("Musicode7");console.log("https://gist.github.com/MusiCode1/c50432ad3f413a958e6f3aea7c214cfc");const audio_list=document.querySelectorAll("audio>source");check();add_html();const albom_title=document.querySelector(".album-title").innerText,albom_art=document.querySelector(".arts_name").innerText;const file_name=`${albom_title} - ${albom_art}`;await my_require('https://cdnjs.cloudflare.com/ajax/libs/jszip/3.6.0/jszip.min.js');var zip=new window.JSZip();for(const source of audio_list){await download(source.src)}my_console_log("save zip file...");await save_zip_file();document.querySelector(".back-modal").remove();function check(){if(window.location.hostname !="jewishmusic.fm"){throw new Error("זה איננו "+"jewishmusic.fm!");}if(audio_list.length<1){throw new Error("אין בדף זה קבצי מוזיקה!");}}async function save_zip_file(){const zipFile=await zip.generateAsync({ type:"blob" });save_blob_file(zipFile,file_name);}async function download(url){url=url.replace("http://","https://");const file_name=url.split("/").pop();my_console_log(`download file ${file_name}...`);const promise=download_file(url).then(blob=>{my_console_log(`add to zip file ${file_name}...`);zip.file(file_name,blob,{ binary:true });});await promise;}function download_file(url,reply=0){let res;const promise=new Promise(async(resolve,reason)=>{const file_name=url.split("/").pop();res=fetch(url,{headers:{"Range":"bytes=0-"}});const response=await res;if(response.status<200||response.status>=400){if(reply<5){reply++;my_console_log("!!!");await new Promise(resolve=>setTimeout(resolve,1000));resolve(download_file(url,reply))} else {reason();throw response;}}const reader=response.body.getReader();const contentLength=response.headers.get('Content-Length');let receivedLength=0;const stream=new Response(new ReadableStream({async start(controller){const interval=setInterval(()=>{my_console_log(`Received ${file_name} ${bytesToSize(receivedLength)} of ${bytesToSize(contentLength)}`);},1000);while(true){const { done,value }=await reader.read();if(done){clearInterval(interval);break;}receivedLength+=value.length;controller.enqueue(value);}controller.close();}}));const blob=await stream.blob();resolve(blob);});promise.res=res;return promise;function bytesToSize(bytes){var sizes=['Bytes','KB','MB','GB','TB'];if(bytes==0)return '0 Byte';var i=parseInt(Math.floor(Math.log(bytes)/Math.log(1024)));return Math.round(bytes/Math.pow(1024,i),2)+' '+sizes[i];}}async function my_require(url){const script=document.createElement('script');script.type='text/javascript';script.src=url;document.head.appendChild(script);my_console_log(`import ${url} ...`);await new Promise((resolve)=>script.onload=resolve);}async function save_blob_file(blob,file_name){var url=URL.createObjectURL(blob);var a=document.createElement('a');a.href=url;a.download=file_name||"download";document.body.appendChild(a);a.click();a.remove();}function add_html(){const div=document.createElement("div");const style=document.createElement("style");div.classList.add("back-modal");style.nodeType="text/css";div.innerHTML=`<div class="modal"></div>`;style.innerHTML=`.back-modal {position:fixed;z-index:50;width:100%;height:100%;overflow:auto;left:0;top:0;padding-top:4em;}.modal {margin:auto;background-color:black;width:50vw;height:50vh;box-shadow:0px 0px 14px 5px rgb(0 0 0/85%);padding:2vh;overflow-y:scroll;overflow-x:overlay;color:#5c5cec;direction:ltr;font-size:medium;}`;document.body.appendChild(style);document.body.appendChild(div);}function my_console_log(txt){const modal=document.querySelector(".modal");modal.innerText+=txt+"\n";modal.scrollTo({top:modal.scrollHeight,behavior:"smooth"});}})().catch(error=>alert(error));

הורדת אלבומים שלמים מהאתר - jewish-music.fm

להורדת אלבום, יש לפתוח את דף האלבום, ולהדביק את הקוד המצורף בקונסולה.

הקוד המינימלי מיועד ליצירת סימניית הורדה ב'כרום'.

Video

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment