Greasy Fork

Erweiterung (download button)für das gesehende videos ausblenden oder makieren

Diese erweiterung erstellt einen Download Button um direkt Videos von youtube zu laden,

目前为 2024-04-23 提交的版本。查看 最新版本

此脚本不应直接安装,它是一个供其他脚本使用的外部库。如果您需要使用该库,请在脚本元属性加入:// @require https://update.greasyfork.cloud/scripts/493285/1365032/Erweiterung%20%28download%20button%29f%C3%BCr%20das%20gesehende%20videos%20ausblenden%20oder%20makieren.js

// ==UserScript==
// @name         Erweiterung (download button)für das gesehende videos ausblenden oder makieren 
// @namespace    http://tampermonkey.net/
// @version      1.0
// @description  Diese erweiterung erstellt einen Download  Button um direkt Videos von youtube zu laden, 
// oder sie werden auf eine dritt seite weitergeleitet wo nsie das Yputube Video runterladen können.
// ACHTUNG: Dieses Script läuft nur mit meinen Userscript "Bastis Youtube Multi Script,gesehende videos ausblenden oder makieren", 
// was in den nächsten Tagen Online kommt.
// Zu den Hauptscript kann dieses Script einfach eingebunden werden und das Hauptscript hat eine Funktion mehr.
// Alle Neue einstellmöglichkeiten der erweiterungen können in das Hauptmenü des Hauptscriptes eingestellt werden.
// @author       basti1012
// @allFrames    true
// @run-at document-end
// @license MIT License
// @noframes
// @include      *youtube.com/watch?v=*
// @grant        none
// ==/UserScript==


var start4 = performance.now();
if(!array_localsdtorage){
    var array_localsdtorage=[];
}
if(!erweiterungs_einstellungs_array){
var erweiterungs_einstellungs_array=[];
}
if(!array_script){
var array_script=[];
}

if(!localStorage.getItem('download_einblenden')){
    localStorage.setItem('download_einblenden',true);
}

if(!localStorage.getItem('download_from_fremdserver')){
    localStorage.setItem('download_from_fremdserver',true);
}

array_localsdtorage.push(["download_einblenden", false],["download_from_fremdserver",true]);

function download_einblenden_anzeigen(){
    if(localStorage.getItem('download_einblenden')=='true'){
        if(location.href.indexOf('youtube.com/watch?')!=-1 || location.href.indexOf('youtu.be/')!=-1){

            function download(){
                var id = window.location.search.split('v=')[1];
                let hrefDownload ='https://en.loader.to/4/?link=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3D'+ id + '3&f=6&s=1&e=1&r=ddownr'
                window.open(hrefDownload, '_blank');
            }

            const styleTag = document.createElement('style');
            styleTag.innerHTML = `
            div#download_tooltip {
                margin: -100px 0 0 -120px;
                position: absolute;
                line-height: 12px;
                border-radius: 5px;
                display:none;
                padding: 5px;
                width: 150px;
                z-index: 11111;
                background: rgba(2,2,2,0.8);
                color: white;
            }
            button#www:hover #download_tooltip {
                display:block;
            }`;

            document.body.appendChild(styleTag);

            function download1(swb,videoTitle){
                var p=0;
                const apiUrl = 'https://co.wuk.sh/api/json';
                const requestData = {
                     url: window.location.href
                };
                const xhr = new XMLHttpRequest();
                xhr.open('POST', apiUrl, true);
                xhr.setRequestHeader('Content-Type', 'application/json');
                xhr.setRequestHeader('Accept', 'application/json');
                console.log("sending request");
                xhr.onreadystatechange = function(){
                    if(xhr.readyState === 4){
                        if(xhr.status >= 200 && xhr.status < 300) {
                            const responseData = JSON.parse(xhr.responseText);
                            console.log('Response data: ' + JSON.stringify(responseData.url));
                            createButton(elm,'green','Download success <br> Status : '+xhr.status+' <br> Text : '+xhr.text,1)
                            setTimeout(function() {
                                var a_elem= document.createElement('a');
                                a_elem.id="eee";
                                a_elem.href = responseData.url;
                                a_elem.download = videoTitle+'.mp4';
                                document.getElementsByTagName('body')[0].appendChild(a2);
                                a_elem.click();
                              //  document.getElementById("eee").click();
                            },1000)
                        }else{
                            createButton(elm,'red','Download error '+xhr.status+' <br> Text : '+xhr.text,1)
                        }
                    }
                };

                xhr.onerror = function() {
                    console.error('Network error');
                    createButton(elm,'red','Network error '+xhr.status+' <br> Text : '+xhr.text,1)
                };
                xhr.success = function() {
                };
                if (p==0) {
                    p++
                    xhr.send(JSON.stringify(requestData));
                    return;
                }
            }



function createButton(elm,farbe,videoTitle,j){
    const swb = document.createElement('button');
    swb.classList.add('ytp-button');
    swb.classList.add('downloadBTN');
    swb.id="www";
    if (j!=1) {
        if(localStorage.getItem('download_from_fremdserver')=='true'){
            swb.onclick = download;
        }else{
            swb.onclick = download1;
        }
    }
    swb.innerHTML=svg(farbe)
    elm.appendChild(swb);
    create_div(swb,videoTitle)
}
function create_div(swb,Text){
    const div_element = document.createElement('div');
    div_element.id='download_tooltip';
    if(Text!=''){
        div_element.innerHTML=Text;
    }else{
        div_element.innerHTML=titel_holen();
    }
    swb.appendChild(div_element);
}

function svg(farbe){
    var svg_ele= `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 320">
                  <rect width="100%" height="100%" fill="none"/>
                  <polyline points="86 110 128 152 170 110" fill="#fff" stroke="${farbe}" stroke-linecap="round" stroke-linejoin="round" stroke-width="24"/>
                  <line x1="128" y1="40" x2="128" y2="152" fill="#fff" stroke="${farbe}" stroke-linecap="round" stroke-linejoin="round" stroke-width="24"/>
                  <path d="M216,152v56a8,8,0,0,1-8,8H48a8,8,0,0,1-8-8V152" fill="none" stroke="${farbe}" stroke-linecap="round" stroke-linejoin="round" stroke-width="24"/>
                  </svg>`;
    return svg_ele;
}
function titel_holen(){
    return document.getElementById("above-the-fold").querySelector("#title").innerText == null ? window.location.toString() : document.getElementById("above-the-fold").querySelector("#title").innerText;
}
function url_mutation(elm){
    let previousUrl = '';
   // console.log(previousUrl)
    const observer = new MutationObserver(function(mutations) {
        if (location.href !== previousUrl) {
            previousUrl = location.href;
            document.getElementById("www").remove();

            setTimeout(function() {
              //  if(localStorage.getItem('download_from_fremdserver')=='true'){
                     createButton(elm,'white','',2);
             //   }else{
             //        createButton(elm,'white','',2);
            //    }

            },3000)
        }
    });
    const config = {subtree: true, childList: true};
    observer.observe(document, config);
}
function waitForElm(selector) {
    return new Promise(resolve => {
        if (document.querySelector(selector)) {
            return resolve(document.querySelector(selector));
        }
        const observer = new MutationObserver(mutations => {
            if (document.querySelector(selector)) {
                observer.disconnect();
                resolve(document.querySelector(selector));
            }
        });
        observer.observe(document.body, {
            childList: true,
            subtree: true
        });
    });
}

            waitForElm('.ytp-right-controls').then((elm) => {
                if(localStorage.getItem('download_from_fremdserver')=='true'){
                    createButton(elm,'white',titel_holen(),2);
                    url_mutation(elm)
                }else{
                   // createButton(elm,'white',titel_holen());
                   // url_mutation(elm)

                    function createButton1(elm,videoTitle){
                        createButton(elm,'yellow',titel_holen(),1);
                        if (videoTitle =='') {
                            setTimeout(function() {
                                createButton(elm,'blue','Kein Downloadlink gefunden',2)
                            }, 10000);
                            console.log("Kein Downloadlink gefunden");
                        }else{
                            createButton(elm,'orange','Klicken um zu downloaden von<br>'+titel_holen(),2);
                            //swb.addEventListener("click",function(){
                            //    download1(swb,videoTitle);
                           //     swb.removeEventListener("click",download1,false);
//
                          //  })
                        }
                      //  console.log(url_mutation(elm,titel_holen()))
                         url_mutation(elm,titel_holen())
                    }
                    createButton1(elm,titel_holen())
                }
            })
            return 4;
        }else{
            return 5;
        }
        return 1;
    }else{
        return 2;
    }
  return 3;
}

var download_einblenden_an=download_einblenden_anzeigen();
    if(download_einblenden_an==1){
        console.log('%c download button aktiviert'+ (performance.now() - start4) + ' ms.','color:green');
    }else if(download_einblenden_an==2){
        console.log('%c download button deaktiviert'+ (performance.now() - start4) + ' ms.','color:orange');
    }else if(download_einblenden_an==3){
        console.log('%c cFunctidownload button gerufen error '+ (performance.now() - start4) + ' ms.','color:red');
    }else if(download_einblenden_an==4){
		console.log('%c download button Watch Seite'+ (performance.now() - start4) + ' ms.','color:green');
	}else if(download_einblenden_an==5){
	    console.log('%c download button Keine watch seite'+ (performance.now() - start4) + ' ms.','color:orange');
	}