Video URL grabber

Display video URLs and allow copying on the webpage while playing videos.

Dovrai installare un'estensione come Tampermonkey, Greasemonkey o Violentmonkey per installare questo script.

You will need to install an extension such as Tampermonkey to install this script.

Dovrai installare un'estensione come Tampermonkey o Violentmonkey per installare questo script.

Dovrai installare un'estensione come Tampermonkey o Userscripts per installare questo script.

Dovrai installare un'estensione come ad esempio Tampermonkey per installare questo script.

Dovrai installare un gestore di script utente per installare questo script.

(Ho già un gestore di script utente, lasciamelo installare!)

Dovrai installare un'estensione come ad esempio Stylus per installare questo stile.

Dovrai installare un'estensione come ad esempio Stylus per installare questo stile.

Dovrai installare un'estensione come ad esempio Stylus per installare questo stile.

Dovrai installare un'estensione per la gestione degli stili utente per installare questo stile.

Dovrai installare un'estensione per la gestione degli stili utente per installare questo stile.

Dovrai installare un'estensione per la gestione degli stili utente per installare questo stile.

(Ho già un gestore di stile utente, lasciamelo installare!)

// ==UserScript==
// @name         Video URL grabber 
// @namespace    https://github.com/Rainman69/video-link-grabber
// @version      1.0
// @description  Display video URLs and allow copying on the webpage while playing videos.
// @author       https://t.me/TheErfon
// @match        *://*/*
// @grant        GM_addStyle
// @license      CC BY-NC-ND 4.0
// @licenseURL   https://github.com/Rainman69/video-link-grabber/blob/main/LICENSE
// ==/UserScript==

(function() {
    'use strict';

    // Create a container for the video URLs
    var videoURLContainer = document.createElement('div');
    videoURLContainer.style.position = 'fixed';
    videoURLContainer.style.top = '10px';
    videoURLContainer.style.left = '10px';
    videoURLContainer.style.padding = '5px';
    videoURLContainer.style.background = 'none';
    videoURLContainer.style.color = '#000';
    videoURLContainer.style.fontFamily = 'Times New Roman, serif';
    videoURLContainer.style.fontSize = '10px';
    videoURLContainer.style.zIndex = '9999';
    videoURLContainer.style.cursor = 'pointer';
    videoURLContainer.style.userSelect = 'none';
    videoURLContainer.style.opacity = '0';
    videoURLContainer.style.transition = 'opacity 0.3s ease-in-out';

    // Function to extract video URLs from <video> elements
    function extractVideoURLs() {
        var videoElements = document.getElementsByTagName('video');
        var videoURLs = [];

        for (var i = 0; i < videoElements.length; i++) {
            var videoElement = videoElements[i];
            var videoURL = videoElement.currentSrc || videoElement.src;
            if (videoURL) {
                videoURLs.push(videoURL);
            }
        }

        return videoURLs;
    }

    // Update the video URLs in the container
    function updateVideoURLs() {
        var videoURLs = extractVideoURLs();
        if (videoURLs.length > 0) {
            videoURLContainer.textContent = videoURLs.join('\n');
        } else {
            videoURLContainer.textContent = 'No video URLs found.';
        }
    }

    // Copy the video URL to the clipboard
    function copyURL() {
        var textarea = document.createElement('textarea');
        textarea.value = videoURLContainer.textContent;
        document.body.appendChild(textarea);
        textarea.select();
        document.execCommand('copy');
        document.body.removeChild(textarea);

        // Display a confirmation message
        videoURLContainer.style.opacity = '1';
        videoURLContainer.textContent = 'URL copied!';
        setTimeout(function() {
            videoURLContainer.style.opacity = '0';
            updateVideoURLs();
        }, 3000);
    }

    // Call the updateVideoURLs function initially
    updateVideoURLs();

    // Add the video URL container to the document body
    document.documentElement.appendChild(videoURLContainer);

    // Update the video URLs whenever the video elements on the page change
    var observer = new MutationObserver(updateVideoURLs);
    observer.observe(document.documentElement, { subtree: true, childList: true });

    // Show the video URL container when clicked
    videoURLContainer.addEventListener('click', copyURL);

    // Hide the video URL container on scroll
    var isScrolling;
    window.addEventListener('scroll', function() {
        videoURLContainer.style.opacity = '0';
        clearTimeout(isScrolling);
        isScrolling = setTimeout(function() {
            videoURLContainer.style.opacity = '1';
        }, 300);
    });

    // Get the most used color on the target site and change the text color accordingly
    var colors = {};
    var elements = document.querySelectorAll('*');
    Array.prototype.forEach.call(elements, function(element) {
        var computedStyle = getComputedStyle(element);
        var color = computedStyle.color;
        if (color in colors) {
            colors[color]++;
        } else {
            colors[color] = 1;
        }
    });
    var mostUsedColor = Object.keys(colors).reduce(function(a, b) {
        return colors[a] > colors[b] ? a : b;
    }, '');
    videoURLContainer.style.color = mostUsedColor;

    // Add the custom styles to the page using GM_addStyle
    GM_addStyle(`
        * {
            color: ${mostUsedColor} !important;
        }
    `);
})();