Zainstaluj skrypt Tampermonkey, aby móc wysyłać całe serie odcinków bezpośrednio ze strony CDA.
// ==UserScript==
// @name CDA Multi-Page Folder Pusher (Ordered)
// @namespace http://tampermonkey.net/
// @version 2.9
// @description Wysyła folder zachowując kolejność 1, 2, 3...
// @match *://*.cda.pl/*/folder/*
// @grant GM_xmlhttpRequest
// @connect udnn1.qzz.io
// ==/UserScript==
(function() {
'use strict';
const SERVER_URL = "https://udnn1.qzz.io/api/receive_ids";
const API_KEY = "supertajnehaslo";
const btn = document.createElement('button');
btn.innerHTML = '📥 WYŚLIJ WSZYSTKIE STRONY';
btn.style = 'position:fixed;top:15px;right:15px;z-index:999999;padding:14px 24px;background:#ffc107;color:#000;border:none;border-radius:50px;font-weight:bold;cursor:pointer;box-shadow:0 6px 20px rgba(0,0,0,0.25);font-family:sans-serif;font-size:14px;border:2px solid #000;';
document.body.appendChild(btn);
async function fetchPage(url) {
return new Promise((resolve, reject) => {
GM_xmlhttpRequest({
method: "GET",
url: url,
onload: (res) => resolve(res.responseText),
onerror: (err) => reject(err)
});
});
}
btn.onclick = async function() {
btn.disabled = true;
btn.style.background = '#888';
let baseUrl = window.location.href.replace(/\/vfilm\/\d+$/, '/vfilm').replace(/\/vfilm$/, '/vfilm');
if (!baseUrl.includes('/vfilm')) baseUrl += '/vfilm';
let currentPage = 1;
let totalFound = 0;
let hasMore = true;
const seenIds = new Set();
while (hasMore) {
btn.innerHTML = `⏳ SKANOWANIE STRONY ${currentPage}...`;
try {
const pageUrl = `${baseUrl}/${currentPage}`;
const html = await fetchPage(pageUrl);
const parser = new DOMParser();
const doc = parser.parseFromString(html, "text/html");
const links = doc.querySelectorAll('a.link-title-visit');
console.log('links found:', links.length, 'page:', currentPage);
if (links.length === 0) {
hasMore = false;
break;
}
const pageItems = [];
links.forEach(a => {
const href = a.getAttribute('href') || '';
const match = href.match(/\/video\/([a-z0-9]+)/);
if (match) {
const id = match[1];
if (!seenIds.has(id)) {
pageItems.push({
id,
title: (a.innerText || '').trim()
});
seenIds.add(id);
}
}
});
console.log('pageItems:', pageItems);
if (pageItems.length > 0) {
totalFound += pageItems.length;
await new Promise((resolve) => {
GM_xmlhttpRequest({
method: "POST",
url: SERVER_URL,
data: JSON.stringify({ items: pageItems }),
headers: {
"Content-Type": "application/json",
"X-API-Key": API_KEY
},
onload: (res) => {
console.log("Tampermonkey onload:", res.status, res.responseText);
resolve(res);
},
onerror: (err) => {
console.error("Tampermonkey onerror:", err);
resolve(err);
}
});
});
} else {
hasMore = false;
}
currentPage++;
if (currentPage > 50) hasMore = false;
} catch (e) {
console.error("Tampermonkey wyjątek:", e);
hasMore = false;
}
}
btn.innerHTML = `✅ WYSŁANO ${totalFound} ODCINKÓW`;
btn.style.background = '#28a745';
setTimeout(() => {
btn.innerHTML = '📥 WYŚLIJ WSZYSTKIE STRONY';
btn.disabled = false;
btn.style.background = '#ffc107';
}, 5000);
};
})();