Ansa - Video Downloader

Aggiungi un pulsante di download per i video su ANSA.it

// ==UserScript==
// @name         Ansa - Video Downloader 
// @namespace    https://greasyfork.org/it/users/79810-sciencefun
// @version      0.2
// @description  Aggiungi un pulsante di download per i video su ANSA.it
// @author       Science
// @match        https://www.ansa.it/*
// @require      https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js
// @grant        GM_xmlhttpRequest
// @grant        GM_download
// @license      GPL version 3 or later
// ==/UserScript==

(function() {
    'use strict';

    // Funzione per creare il pulsante di download
    function addOverlayDownloadButton(videoUrl) {
        const buttonId = 'overlay-download-button';
        if ($("#" + buttonId).length === 0) {
            const button = $(`<button id="${buttonId}" style="position: fixed; bottom: 10px; left: 10px; padding: 10px; background: #28a745; color: #fff; border: none; border-radius: 5px; z-index: 1000; cursor: pointer;">
                Scarica Video
            </button>`);
            $("body").append(button);

            // Assegna la funzione di download al pulsante
            $("#" + buttonId).click(() => {
                if (videoUrl) {
                    GM_download(videoUrl, 'video.mp4');
                } else {
                    alert('Nessun video trovato!');
                }
            });
        }
    }

    // Funzione per trovare l'URL del video dal tag video o sorgenti nella pagina
    function findVideoUrl() {
        let videoUrl = null;
        const videoElement = document.querySelector('video');

        if (videoElement) {
            // Verifica se l'elemento video contiene una sorgente diretta
            const sourceElement = videoElement.querySelector('source');
            if (sourceElement && sourceElement.src) {
                videoUrl = sourceElement.src;
            } else if (videoElement.src) {
                videoUrl = videoElement.src;
            }
        }

        // Se non viene trovato un video nell'elemento video, prova a intercettare richieste di rete
        if (!videoUrl) {
            const xhrOpen = XMLHttpRequest.prototype.open;
            XMLHttpRequest.prototype.open = function(method, url) {
                if (url.match(/\.(mp4|m3u8)(\?.*)?$/i)) {
                    videoUrl = url;
                    addOverlayDownloadButton(videoUrl); // Aggiungi pulsante con l'URL trovato
                }
                return xhrOpen.apply(this, arguments);
            };

            const originalFetch = window.fetch;
            window.fetch = function() {
                const args = arguments;
                const url = args[0];
                if (url && typeof url === 'string' && url.match(/\.(mp4|m3u8)(\?.*)?$/i)) {
                    videoUrl = url;
                    addOverlayDownloadButton(videoUrl); // Aggiungi pulsante con l'URL trovato
                }
                return originalFetch.apply(this, arguments);
            };
        }

        // Aggiunge il pulsante con l'URL trovato
        addOverlayDownloadButton(videoUrl);
    }

    // Inizializza lo script quando la pagina è pronta
    $(document).ready(() => {
        findVideoUrl();
    });
})();