Scoodle Downloader

Download boeken van het Belgische leerlingenplatform Scoodle

// ==UserScript==
// @name         Scoodle Downloader
// @namespace    http://tampermonkey.net/
// @version      1.0
// @license MIT
// @description  Download boeken van het Belgische leerlingenplatform Scoodle
// @author       PcLover2
// @match        https://example.com/*
// @grant        none
// ==/UserScript==

(function() {
    'use strict';

    // Clear the entire content of the site
    document.head.innerHTML = '';
      document.body.innerHTML = '';

    // Set initial tab title
    document.title = 'Scoodle Downloader';

    // Create and append the title and subtitle
    const title = document.createElement('h1');
    title.textContent = 'Scoodle Downloader';
    title.style.textAlign = 'center';
    document.body.appendChild(title);

    const subtitle = document.createElement('h2');
    subtitle.textContent = 'Made by PcLover2';
    subtitle.style.textAlign = 'center';
    document.body.appendChild(subtitle);

    // Create and append the input elements and button
    const container = document.createElement('div');
    container.style.textAlign = 'center';
    container.style.marginTop = '50px';
    document.body.appendChild(container)

    const baseUrlLabel = document.createElement('label');
    baseUrlLabel.textContent = 'Base URL: ';
    container.appendChild(baseUrlLabel);

    const urlInput = document.createElement('input');
    urlInput.type = 'text';
    urlInput.style.width = '80%';
    urlInput.value = 'https://pdfsplitter.blob.core.windows.net/pdf/production/split-books/*a';
    container.appendChild(urlInput);

    container.appendChild(document.createElement('br'));
    container.appendChild(document.createElement('br'));

    const endNumberLabel = document.createElement('label');
    endNumberLabel.textContent = 'Eindnummer: ';
    container.appendChild(endNumberLabel);

    const endNumberInput = document.createElement('input');
    endNumberInput.type = 'number';
    endNumberInput.style.width = '80%';
    endNumberInput.value = 999;
    container.appendChild(endNumberInput);

    container.appendChild(document.createElement('br'));
    container.appendChild(document.createElement('br'));

    const okButton = document.createElement('button');
    okButton.textContent = 'Start Download';
    okButton.style.padding = '10px 20px';
    okButton.style.fontSize = '16px';
    container.appendChild(okButton);

    container.appendChild(document.createElement('br'));
    container.appendChild(document.createElement('br'));


    // Maak een div om de lijst van links te tonen
    const linksContainer = document.createElement('div');
    linksContainer.style.marginTop = '10px';
    document.body.appendChild(linksContainer);
    // Voeg een event listener toe aan de OK-knop
    okButton.addEventListener('click', () => {
        const baseURL = urlInput.value.trim();
        const endNumber = parseInt(endNumberInput.value.trim(), 10);

        if (!baseURL || isNaN(endNumber)) {
            alert('Voer een geldige URL en eindnummer in.');
            return;
        }

        // Start met mainNumber en subNumber
        let mainNumber = 1;
        const pdfLinks = []; // Array om de links op te slaan

        function tryNextMainNumber() {
            if (mainNumber > endNumber) {
                displayLinks();
                return;
            }

            let subNumber = mainNumber;

            function tryNextSubNumber() {
                if (subNumber > endNumber) {
                    mainNumber++;
                    // Zorg ervoor dat er een pauze is voordat je de volgende hoofdnummer probeert
                    setTimeout(() => tryNextMainNumber(), 1000); // 1 seconde wachttijd
                    return;
                }

                const pdfURL = `${baseURL}_${mainNumber}_${subNumber}.pdf`;

                fetch(pdfURL)
                    .then(response => {
                        if (response.ok) {
                            // PDF bestaat, voeg de link toe aan de array
                            console.log(`Found: ${pdfURL}`);
                            pdfLinks.push(pdfURL);
                            // Update mainNumber naar subNumber + 1
                            mainNumber = subNumber + 1;
                        }
                        subNumber++;
                        tryNextSubNumber();
                    })
                    .catch(error => {
                        console.error('Er is een fout opgetreden:', error);
                        alert('Er is een fout opgetreden bij het proberen om de PDF te downloaden.');
                    });
            }

            tryNextSubNumber();
        }

        function displayLinks() {
            if (pdfLinks.length === 0) {
                linksContainer.innerHTML = '<p>Geen PDF-links gevonden.</p>';
                return;
            }

            linksContainer.innerHTML = '<h2>Gevonden PDF-links:</h2>';
            pdfLinks.forEach(link => {
                const a = document.createElement('a');
                a.href = link;
                a.textContent = link;
                a.style.display = 'block';
                a.target = '_blank';
                linksContainer.appendChild(a);
            });

            // Open alle links in nieuwe tabbladen
            pdfLinks.forEach(link => {
                window.open(link, '_blank');
            });
        }

        tryNextMainNumber();
    });

})();