YouTube Title formatted for filename

reformats the titles of YouTube videos to be windows filename compatible on click.

目前為 2020-06-12 提交的版本,檢視 最新版本

// ==UserScript==
// @name       YouTube Title formatted for filename
// @namespace  sm
// @version    0.14
// @description  reformats the titles of YouTube videos to be windows filename compatible on click.
// @match      http*://www.youtube.com/watch*
// @copyright  2020, sm
// ==/UserScript==
// @require http://code.jquery.com/jquery-3.4.1.min.js

console.log("docReady waiting ")

var bidClickTimer = 0;
var numBidClicks = 0;

function runFunctionTimer () //because setTimeout doesn't work in Tampermonkey  - use of it below is let untouched for now || this works for the first few minutes
{
    var interval = 2000;
    runFunctionTimer = setInterval (function() {runFunction (); }, interval);
}

function runFunctionTimer2 () //because setTimeout doesn't work in Tampermonkey  - use of it below is let untouched for now || so it keeps working throughout the video - runs every 2 min
{
    var interval = 120000;
    runFunctionTimer = setInterval (function() {runFunction (); }, interval);
}


let counter = 1;
let count4 = 1;


function runFunction (){ //creates buttons and runs the actual logic

    let buttons = ""
    buttons = addButtons(buttons)

    let DescriptionBox = document.getElementById("meta");
    if(DescriptionBox != null){
        console.log("found box")
        if(counter < 2){
            DescriptionBox.insertAdjacentHTML('beforebegin', buttons);
            counter = 2;
        }
        function2();
    }else{
        console.log("could not find box")
    }

    function addButtons(strin){
        let button1 = "<span><button id='formatTitleButton'>Format Title</button></span>"
        let button2 = "<span><button id='formatDescriptionButton'>Format Description</button></span>"
        strin = strin + "<br />" + button1 + button2;
        return strin
    }
}


function function2(){ // logic, looks for button presses and replaces text

    if( count4 < 7){
        count4 = count4 + 1;
        docReady(function() {
            // DOM is loaded and ready for manipulation here
            console.log("running title fix ")
            let count = 1;
            let count3 = 1;
            let count2 = 1;


            //Code to run After timeout elapses
            console.log("finding title ")
            console.log("YouTube Title formatter v1.001")


            let title = document.querySelector("#formatTitleButton");
            let discriptionbutton = document.querySelector("#formatDescriptionButton");
            let discription = document.querySelector("#description");
            let discription2 = document.querySelector("#description > yt-formatted-string");

            if(count < 3){
                title.onclick = function(e){//turn title into button
                    console.log("count of times called on title  = ",count)
                    //your handler here
                    if(count < 3){//prevent from running too many times

                        let title2 = document.querySelector("#container > h1");// The title can sometimes be missing the class title
                        let newTitle2 = isValid(title2.innerHTML) //pull title again due to js idiosyncrasies

                        let title3 = document.querySelector("#title"); // if the title class is applied
                        let newTitle3 = false; //to make the if statement false unless we pull a title
                        if(title3){
                            newTitle3 = isValid(title3.innerHTML) //pull title again due to js idiosyncrasies
                        }

                        if(newTitle3 != false && newTitle3 != null){
                            console.log("newTitle3 == ", newTitle3)
                            title3.innerHTML = newTitle3
                        }else{
                            console.log("newTitle2 == ", newTitle2)
                            if(newTitle2 != null){
                                title2.innerHTML = newTitle2
                            }
                        }


                        console.log(count)
                        count = count + 1;
                    }

                }
            }



            discriptionbutton.onclick = function(e){//turn title into button

                //your handler here
                console.log("fix text called")
                if(count3 < 7){
                    if(discription2.innerHTML){

                        let discription2 = document.querySelector("#description > yt-formatted-string");
                        let newdiscription2 = isValid(discription2.innerHTML) //pull title again due to js idiosyncrasies
                        console.log("newTitle == ", newdiscription2)
                        if(newdiscription2 != null){
                            discription2.innerHTML = newdiscription2
                        }
                        console.log(count)
                        count2 = count2 + 1;
                    }else{
                        title = document.querySelector("#container > h1");
                        discription2 = document.querySelector("#description > yt-formatted-string");
                    }

                    if(title.innerHTML){
                        if(count < 3){//prevent from running too many times

                            let title2 = document.querySelector("#container > h1");
                            let newTitle2 = isValid(title2.innerHTML) //pull title again due to js idiosyncrasies
                            console.log("newTitle == ", newTitle2)
                            if(newTitle2 != null){
                                title2.innerHTML = newTitle2
                            }
                            console.log(count)
                            count3 = count + 1;
                        }}

                }

            }

            function isValid(fname){
                console.log("fname type is ", typeof fname);
                console.log("fname input is ", fname);

                for(let i = 0; i < 20; i++){
                    fname = fname.replace("&"," and ")
                    fname = fname.replace("|"," ")
                    fname = fname.replace("||"," ")
                    fname = fname.replace(","," ")
                    fname = fname.replace("?"," ")
                    fname = fname.replace("!"," ")
                    fname = fname.replace('"'," ")
                    fname = fname.replace("@"," ")
                    //fname = fname.replace("<","(")
                    // fname = fname.replace(">",")")
                    fname = fname.replace(".","")
                    fname = fname.replace("'","")
                    fname = fname.replace("►","")
                    fname = fname.replace("`","")
                    fname = fname.replace("/","")
                    fname = fname.replace("\\","")
                    fname = fname.replace(":","")
                    fname = fname.replace(";","")
                    fname = fname.replace("*","")
                    fname = fname.replace("^","")
                    fname = fname.replace("%","")
                    fname = fname.replace("$","")
                    fname = fname.replace("#","")
                    fname = fname.replace("+","")
                    fname = fname.replace("_","")
                    fname = fname.replace("’","")
                    fname = fname.replace("→"," - ")
                    fname = fname.replace("」"," ")
                    fname = fname.replace("「"," ")
                    fname = fname.replace("}",")")
                    fname = fname.replace("{"," (")
                    fname = fname.replace("  "," ")
                    fname = fname.replace("ー","-")
                    fname = fname.replace("/","-")
                    fname = fname.replace("『"," (")
                    fname = fname.replace("』",")")
                    fname = fname.replace("!","")
                    fname = fname.replace("【"," (")
                    fname = fname.replace("■","-")
                    fname = fname.replace("】",")")
                    fname = fname.replace("and amp "," and ")
                }
                return fname
            }
        });

    }
}

runFunctionTimer ();
runFunctionTimer2();






function docReady(fn) {
    // see if DOM is already available
    if (document.readyState === "complete" || document.readyState === "interactive") {
        // call on next available tick
        setTimeout(fn, 1);
    } else {
        document.addEventListener("DOMContentLoaded", fn);
    }
}







QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址