Skip to content

Instantly share code, notes, and snippets.

@joelthorner
Last active December 12, 2023 16:28
Show Gist options
  • Save joelthorner/9f4f1760a566cb3fabdaec42c375edcb to your computer and use it in GitHub Desktop.
Save joelthorner/9f4f1760a566cb3fabdaec42c375edcb to your computer and use it in GitHub Desktop.
3cat-download video
function getScript(e,a){var t=document.createElement("script"),r=document.getElementsByTagName("script")[0];t.async=1,t.onload=t.onreadystatechange=function(e,r){(r||!t.readyState||/loaded|complete/.test(t.readyState))&&(t.onload=t.onreadystatechange=null,t=void 0,!r&&a&&setTimeout(a,0))},t.src=e,r.parentNode.insertBefore(t,r)}function esperar(e){return new Promise(a=>setTimeout(a,e))}async function descarregarIVeEmpaquetar(){let e=document.querySelector(".videoviewbase video");if(e){e.click(),await esperar(2e3),(e=document.querySelector(".videoviewbase video")).click();let a=e.src,t=(a=(a=(a=a.replace("blob:","")).replace("https://","https:")).replace(".cat","")).split("/");a=t[0]+"/"+t[1]+"/"+t[1],e.src=a,await esperar(1e3);let r=document.querySelector(".videoviewbase video"),o=r.src;try{let l=await fetch(o),c=["|","/","-","\\","|","/","-","\\"],i=0,n=setInterval(()=>{console.clear();let e="%c Fetching! Aixo pot tardar uns minuto. Que aixo pesa 1GB! "+c[i];console.log(e,"font-size: 12px;font-family: monospace;background: white;display: inline-block;color: black;padding: 8px 19px;border: 1px dashed;"),++i>c.length-1&&(i=0)},500);if(!l.ok)throw Error(`Error en la sol\xb7licitud: ${l.statusText}`);let s=await l.blob();clearInterval(n);let d=URL.createObjectURL(s),p=document.createElement("a");p.href=d,p.download=document.querySelector("h1").innerText+".mp4",document.body.appendChild(p),p.click(),document.body.removeChild(p),msg="%c Donete!",styles="font-size: 12px;font-family: monospace;background: white;display: inline-block;color: black;padding: 8px 19px;border: 1px dashed;",console.log(msg,styles)}catch(y){console.error("Error en la desc\xe0rrega:",y)}}}console.clear();let msg="%c A one a moment!",styles="font-size: 12px;font-family: monospace;background: white;display: inline-block;color: black;padding: 8px 19px;border: 1px dashed;";console.log(msg,styles),descarregarIVeEmpaquetar();
/**
* @version 1.0.0
*/
function getScript(source, callback) {
var script = document.createElement('script');
var prior = document.getElementsByTagName('script')[0];
script.async = 1;
script.onload = script.onreadystatechange = function (_, isAbort) {
if (isAbort || !script.readyState || /loaded|complete/.test(script.readyState)) {
script.onload = script.onreadystatechange = null;
script = undefined;
if (!isAbort && callback) setTimeout(callback, 0);
}
};
script.src = source;
prior.parentNode.insertBefore(script, prior);
}
function esperar(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
async function descarregarIVeEmpaquetar() {
let video = document.querySelector('.videoviewbase video');
// console.log(video);
if (video) {
video.click();
await esperar(2000);
video = document.querySelector('.videoviewbase video');
video.click();
let src = video.src;
// console.log(video.src);
// blob:https://www.ccma.cat/81382346-d094-4a34-9f86-b17ac9887bec
// Copy the src of the blob video, the url may look like https://XXX.com/XXX
src = src.replace('blob:', '');
// console.log(src);
// https://www.ccma.cat/81382346-d094-4a34-9f86-b17ac9887bec
// Copy the link and edit to with your id ABC like this: https:XXX/XXX/ABC
src = src.replace('https://', 'https:');
src = src.replace('.cat', '');
// console.log(src);
// https:www.ccma/81382346-d094-4a34-9f86-b17ac9887bec
// Replace the url blob:https://XXX/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX inside the SRC with the URL we created step 6.
let split = src.split('/');
src = split[0] + '/' + split[1] + '/' + split[1];
// console.log(src);
video.src = src;
await esperar(1000);
const videoNew = document.querySelector('.videoviewbase video');
// console.log(videoNew.src);
const rutaMP4 = videoNew.src; // Reemplaça amb la teva ruta
try {
const response = await fetch(rutaMP4);
let loading = ['|', '/', '-', '\\', '|', '/', '-', '\\'];
let i = 0;
let interval = setInterval(() => {
console.clear();
let msg = "%c Fetching! Aixo pot tardar uns minuto. Que aixo pesa 1GB! " + loading[i];
let styles = [
'font-size: 12px',
'font-family: monospace',
'background: white',
'display: inline-block',
'color: black',
'padding: 8px 19px',
'border: 1px dashed;'
].join(';')
console.log(msg, styles);
i++;
if (i > loading.length - 1) {
i = 0;
}
}, 500);
if (!response.ok) {
throw new Error(`Error en la sol·licitud: ${response.statusText}`);
}
const blob = await response.blob();
clearInterval(interval);
// Crear un objecte URL per al blob i crear un enllaç d'ancoratge per descarregar
const url = URL.createObjectURL(blob);
const link = document.createElement('a');
link.href = url;
link.download = document.querySelector('h1').innerText + '.mp4';
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
msg = "%c Donete!";
styles = [
'font-size: 12px',
'font-family: monospace',
'background: white',
'display: inline-block',
'color: black',
'padding: 8px 19px',
'border: 1px dashed;'
].join(';')
console.log(msg, styles);
// console.log('Descàrrega completada amb èxit.');
} catch (error) {
console.error('Error en la descàrrega:', error);
}
}
}
console.clear();
let msg = "%c A one a moment!";
let styles = [
'font-size: 12px',
'font-family: monospace',
'background: white',
'display: inline-block',
'color: black',
'padding: 8px 19px',
'border: 1px dashed;'
].join(';')
console.log(msg, styles);
descarregarIVeEmpaquetar();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment