Last active
January 3, 2024 08:17
-
-
Save Vojtik69/54061dd7dc97fd2dcf8e98a85185711a to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// ==UserScript== | |
// @name MujRozhlas Download | |
// @version 1.4 | |
// @description Ke stahování audií z mujrozhlas.cz | |
// @author | |
// @match https://www.mujrozhlas.cz/* | |
// @icon https://www.google.com/s2/favicons?sz=64&domain=mujrozhlas.cz | |
// @updateURL https://gist.githubusercontent.com/Vojtik69/54061dd7dc97fd2dcf8e98a85185711a/raw/ | |
// @downloadURL https://gist.githubusercontent.com/Vojtik69/54061dd7dc97fd2dcf8e98a85185711a/raw/ | |
// @require https://code.jquery.com/jquery-3.6.0.min.js | |
// @grant GM_addElement | |
// ==/UserScript== | |
async function mainfunc() { | |
'use strict'; | |
function RemoveInvalidChars(retezec) | |
{ | |
return retezec.replace(/[/\\?%*:|"<>]/g, '-'); | |
} | |
var dodatek = "<p><ul style=\"color:red\">"; | |
var seznam = []; | |
async function pripravPrikaz() { | |
if (dl.siteEntityBundle == "episode") { | |
let audiolink = await fetch_link(dl.contentId); | |
const response = await fetch(`https://api.mujrozhlas.cz/episodes/${dl.contentId}`); | |
const episode = await response.json(); | |
console.log(episode); | |
console.log("dl.contentId: " + dl.contentId); | |
console.log("Cover: "+String(episode.data.attributes.asset.url)); | |
return await "ffmpeg -i " + episode.data.attributes.asset.url + " \"cover.jpg\" & ffmpeg -i " + audiolink + " \"" + RemoveInvalidChars(dl.siteEntityLabel).replace(/[„“‚‘"]/g, '') + ".mp4\""; | |
} else if (dl.siteEntityBundle == "serial") { | |
console.log(`https://api.mujrozhlas.cz/serials/${dl.contentId}/episodes`); | |
console.log(`https://api.mujrozhlas.cz/serials/${dl.contentId}`); | |
var prikaz = "ffmpeg "; | |
//var stred_prikazu = " -bsf:a aac_adtstoasc -vcodec copy -c copy -crf 50 "; | |
var stred_prikazu = " "; | |
var map_prikazu = ""; | |
const response = await fetch(`https://api.mujrozhlas.cz/serials/${dl.contentId}/episodes`); | |
const json_data = await response.json(); | |
console.log(json_data); | |
var i=0; | |
for (let episode of json_data.data){ | |
try{ | |
prikaz = prikaz + "-i " + await fetch_link(episode.id) + " "; | |
map_prikazu = map_prikazu + `-map_metadata ${i} -map ${i} "`+String(episode.attributes.part).padStart(2, '0')+"-"+RemoveInvalidChars(episode.attributes.shortTitle).replace(/[„“‚‘"]/g, '')+".mp4\" "; | |
i=i+1; | |
} | |
catch (error) { | |
dodatek = dodatek + "<li>Epizoda \""+String(episode.attributes.part).padStart(2, '0')+"-"+RemoveInvalidChars(episode.attributes.shortTitle).replace(/[„“‚‘"]/g, '')+"\" není dostupná</li>"; | |
console.log("Epizoda \""+String(episode.attributes.part).padStart(2, '0')+"-"+RemoveInvalidChars(episode.attributes.shortTitle).replace(/[„“‚‘"]/g, '')+"\" není dostupná"); | |
} | |
} | |
//jeste pridat ke stazeni cover image | |
try{ | |
console.log("Cover: "+String(json_data.data[0].attributes.asset.url)); | |
prikaz = prikaz + "-i " + String(json_data.data[0].attributes.asset.url) + " "; | |
map_prikazu = map_prikazu + `-map_metadata ${i} -map ${i} cover.jpg`; | |
i=i+1; | |
} | |
catch (error) { | |
dodatek = dodatek + "<li>Cover obrázek není dostupný</li>"; | |
console.log("Cover obrázek není dostupný"); | |
} | |
return await prikaz + stred_prikazu + map_prikazu; | |
} | |
} | |
async function fetch_link(uuid) { | |
try { | |
const response = await fetch(`https://api.mujrozhlas.cz/episodes/${uuid}`); | |
const json_data = await response.json(); | |
let link = null; | |
for (let audio_link of json_data.data.attributes.audioLinks) { | |
if (audio_link.variant === 'hls') { | |
link = audio_link.url; | |
break; | |
} else if (audio_link.variant === 'mp3') { | |
link = audio_link.url; | |
break; | |
} | |
} | |
if (link !== null) { | |
console.log(link); | |
return link; | |
} else { | |
console.log('Nebyl nalezen odkaz na variantu HLS ani mp3.'); | |
throw new Error('Odkaz nebyl nalezen'); | |
} | |
} catch (error) { | |
console.error('Chyba při získávání JSONu:', error); | |
throw error; | |
} | |
} | |
var prikaz = await pripravPrikaz(); | |
dodatek = dodatek+"</ul></p>"; | |
// Vytvoření tlačítka | |
var button = document.createElement("button"); | |
button.id = 'ffmpeg-button'; | |
GM_addElement(button, 'img', { | |
src: 'https://icon-library.com/images/ffmpeg-icon/ffmpeg-icon-14.jpg', | |
width: '120px' | |
}); | |
// Přidání stylu tlačítka | |
button.style.position = "absolute"; | |
button.style.top = "10px"; | |
button.style.right = "5px"; | |
// Přidání klikacího event listeneru | |
button.addEventListener("click", async function() { | |
// Vytvoření překrývajícího se div elementu | |
var overlay = document.createElement("div"); | |
overlay.style.position = "fixed"; | |
overlay.style.top = "10%"; | |
overlay.style.height = "85%"; | |
overlay.style.left = "20%"; | |
overlay.style.width = "60%"; | |
overlay.style.padding = "20px"; | |
overlay.style.backgroundColor = "#fff"; | |
overlay.style.border = "2px solid #999"; | |
overlay.style.boxShadow = "0 0 10px rgba(0, 0, 0, 0.5)"; | |
overlay.style.zIndex = "9999"; | |
overlay.style.overflowY = "scroll"; | |
// Vytvoření textového elementu | |
var text = document.createElement("p"); | |
text.innerHTML = "Následující příkaz zkopírován:<br>\n" + prikaz + dodatek; | |
text.style.fontSize = "18px"; | |
text.style.lineHeight = "1.5"; | |
text.style.marginBottom = "20px"; | |
// Přidání textového elementu na překrývající se div element | |
overlay.appendChild(text); | |
// Přidání překrývajícího se div elementu na stránku | |
document.body.appendChild(overlay); | |
// Zkopírování textu do schránky při každém kliknutí na tlačítko pro otevření překrývajícího se okna | |
var copyToClipboard = function() { | |
var textToCopy = prikaz; | |
navigator.clipboard.writeText(textToCopy); | |
}; | |
copyToClipboard(); | |
button.addEventListener("click", copyToClipboard); | |
// Zavření překryvného okna při kliknutí mimo něj | |
window.addEventListener("click", function(event) { | |
if (event.target == overlay || event.target == text) { | |
overlay.remove(); | |
//button.removeEventListener("click", copyToClipboard); | |
} | |
}); | |
}); | |
// Přidání tlačítka na stránku | |
document.body.appendChild(button); | |
}; | |
// Nastavte ID elementu, který chcete sledovat | |
var targetId = 'nprogress'; | |
// Vytvořte novou instanci MutationObserver | |
var observer = new MutationObserver(function(mutationsList, observer) { | |
for(var mutation of mutationsList) { | |
// Projděte seznam mutací | |
for (let i = 0; i < mutation.addedNodes.length; i++) { | |
// Pokud byl přidán nový prvek a jeho ID odpovídá cílovému ID, spusťte kód | |
if (mutation.addedNodes[i].id === targetId) { | |
console.log('Element byl přidán'); | |
// Zde můžete spustit svůj userscript | |
//==nevyužito== | |
} | |
} | |
for (let i = 0; i < mutation.removedNodes.length; i++) { | |
// Pokud byl odebrán prvek a jeho ID odpovídá cílovému ID, spusťte kód | |
if (mutation.removedNodes[i].id === targetId) { | |
console.log('Element byl odebrán'); | |
// Zde můžete spustit svůj userscript | |
mainfunc(); | |
} | |
} | |
} | |
}); | |
// Nastavte konfiguraci pro MutationObserver | |
var config = { childList: true, subtree: true }; | |
// Spusťte MutationObserver a sledujte změny v dokumentu | |
observer.observe(document.body, config); | |
mainfunc(); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment