您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Pokazuje listę linków do filmów z wszystkich stron danego folderu (ale nie w podfolderach) lub wyniku wyszukiwania (bez folderów). Linki nie prowadzą bezpośrednio do filmu, lecz do jego strony.
// ==UserScript== // @name cda.pl, vimeo - lista wideo w folderze i wyszukiwarce // @namespace https://greasyfork.org/pl/scripts/396433 // @version 0.5.1 // @description Pokazuje listę linków do filmów z wszystkich stron danego folderu (ale nie w podfolderach) lub wyniku wyszukiwania (bez folderów). Linki nie prowadzą bezpośrednio do filmu, lecz do jego strony. // @author Dove6 // @include https://www.cda.pl/*/folder* // @include https://www.cda.pl/info/*?section=video // @include https://www.cda.pl/video/show/* // @include https://vimeo.com/search* // @grant none // ==/UserScript== /* jshint esversion: 6 */ /* jshint multistr: true */ (function() { 'use strict'; const dom_parser = new DOMParser(); class LinksFetcher { callback(links) { console.log(links.join(' ')); } isBusy() { throw new Error('This method is abstract'); } parseFetchedPage(text_html) { return text_html; } fetchLinks(source_url = this.source_url, direction = null) { throw new Error('This method is abstract'); } createButton(name) { let s = document.createElement('span'); s.className = 'fetch-links-button'; s.innerHTML = name; s.style.border = '2px solid green'; s.style.borderRadius = '2px'; s.style.padding = '5px'; s.style.margin = '10px'; s.style.fontWeight = 'bold'; s.style.cursor = 'pointer'; return s; } } class RecursiveLinksFetcher extends LinksFetcher { setReachedEnd(direction) { this.reached_end[direction] = true; if (this.reached_end.left && this.reached_end.right) { this.callback(this.links); } } isBusy() { return (!this.reached_end.left || !this.reached_end.right); } constructor(source_url, callback = null) { super(); this.links = []; this.reached_end = {'left': true, 'right': true}; this.source_url = source_url; if (callback !== null) { this.callback = callback; } } getLinksFromParsedPage(parsed_page) { throw new Error('This method is abstract'); } getNextURLFromParsedPage(parsed_page) { throw new Error('This method is abstract'); } getPreviousURLFromParsedPage(parsed_page) { throw new Error('This method is abstract'); } fetchLinks(source_url = this.source_url, direction = null) { this.reached_end.left = false; this.reached_end.right = false; this.links = []; fetch(source_url).then( (result) => { let fetched_page = result.text().then( (result_text) => { let parsed_page = this.parseFetchedPage(result_text); this.links = this.links.concat(this.getLinksFromParsedPage(parsed_page)); let urls = { 'next': this.getNextURLFromParsedPage(parsed_page), 'previous': this.getPreviousURLFromParsedPage(parsed_page) }; if (direction === 'right' || direction === null) { if (urls.next !== undefined && urls.next !== null) { console.log('Next page: ' + urls.next); this.fetchLinks(urls.next, 'right'); } else { this.setReachedEnd('right'); } } if (direction === 'left' || direction === null) { if (urls.previous !== undefined && urls.previous !== null) { console.log('Previous page: ' + urls.previous); this.fetchLinks(urls.previous, 'left'); } else { this.setReachedEnd('left'); } } } ); } ); } } class IterativeLinksFetcher extends LinksFetcher { decrementCounter() { if (this.counter > 0) { this.counter--; } if (this.counter === 0) { this.callback(this.links); } } isBusy() { return (this.counter !== 0); } constructor(source_url, callback = null) { super(); this.links = []; this.counter = 0; this.source_url = source_url; if (callback !== null) { this.callback = callback; } } getLinksFromParsedPage(parsed_page) { throw new Error('This method is abstract'); } getSpecifiedPageNumberURL(source_url, page_number) { throw new Error('This method is abstract'); } fetchLinks(source_url = this.source_url, direction = null) { let page_numbers = { min: Number(document.querySelector('.fetch-links-settings.minimum').value), max: Number(document.querySelector('.fetch-links-settings.maximum').value) }; console.log(page_numbers); if (page_numbers.min <= page_numbers.max) { this.counter = page_numbers.max - page_numbers.min + 1; this.links = []; for (let page_number = page_numbers.min; page_number <= page_numbers.max; page_number++) { let page_url = this.getSpecifiedPageNumberURL(source_url, page_number); console.log('Now fetching page: ' + page_url); fetch(page_url).then( (result) => { let fetched_page = result.text().then( (result_text) => { let parsed_page = this.parseFetchedPage(result_text); this.links = this.links.concat(this.getLinksFromParsedPage(parsed_page)); this.decrementCounter(); } ); } ); } } } } class CDASearchLinksFetcher extends IterativeLinksFetcher { parseFetchedPage(text_html) { return dom_parser.parseFromString(text_html, 'text/html'); } getLinksFromParsedPage(parsed_page) { return Array.from(parsed_page.querySelectorAll('.text.text-video > .link-title-visit')).map(function(e) { return e.href; }); } getSpecifiedPageNumberURL(source_url, page_number) { let result_url = new URL(source_url); let result_path = result_url.pathname; let last_slash = result_path.lastIndexOf('/'); if ((/show/).test(result_path.slice(result_path.lastIndexOf('/', last_slash - 1)))) { result_path += '/p' + String(page_number); } else { result_path = result_path.slice(0, last_slash + 1) + 'p' + String(page_number); } result_url.pathname = result_path; return result_url.toString(); } createButton(name = 'Pobierz linki') { let s = super.createButton(name); s.onclick = (function() { if (!this.isBusy()) { if (document.querySelector('.fetch-links-result').innerHTML.length !== 0) { document.querySelector('.fetch-links-result').innerHTML = ''; document.querySelector('.fetch-links-result').style.display = 'none'; } this.fetchLinks(); } }).bind(this); return s; } } class CDAFolderLinksFetcher extends IterativeLinksFetcher { parseFetchedPage(text_html) { return dom_parser.parseFromString(text_html, 'text/html'); } getLinksFromParsedPage(parsed_page) { return Array.from(parsed_page.getElementsByClassName('link-title-visit')).map(function(e) { return e.href; }); } getSpecifiedPageNumberURL(source_url, page_number) { let result_url = new URL(source_url); let result_path = result_url.pathname; let last_slash = result_path.lastIndexOf('/'); if ((/vfilm/).test(result_path.slice(last_slash))) { result_path += '/' + String(page_number); } else { if ((/folder/).test(result_path.slice(result_path.lastIndexOf('/', last_slash - 1)))) { result_path += '/' + String(page_number); } else { result_path = result_path.slice(0, last_slash + 1) + String(page_number); } } result_url.pathname = result_path; return result_url.toString(); } createButton(name = 'Pobierz linki') { let s = super.createButton(name); s.onclick = (function() { if (!this.isBusy()) { if (document.querySelector('.fetch-links-result').innerHTML.length !== 0) { document.querySelector('.fetch-links-result').innerHTML = ''; document.querySelector('.fetch-links-result').style.display = 'none'; } this.fetchLinks(); } }).bind(this); return s; } } class VimeoSearchLinksFetcher extends IterativeLinksFetcher { parseFetchedPage(text_html) { return JSON.parse(text_html.match(/var data \= (.+?);\n/)[1]); } getLinksFromParsedPage(parsed_page) { return parsed_page.filtered.data.map(function(e) { return e.clip.link; }); } getSpecifiedPageNumberURL(source_url, page_number) { let result_url = new URL(source_url); let result_params = result_url.searchParams; result_params.set('page', page_number); result_url.search = result_params.toString(); return result_url.toString(); } createButton(name = 'Pobierz linki') { let s = super.createButton(name); s.style.color = '#456'; s.style.backgroundColor = '#efe'; s.onclick = (function() { if (!this.isBusy()) { if (document.querySelector('.fetch-links-result').innerHTML.length !== 0) { document.querySelector('.fetch-links-result').innerHTML = ''; document.querySelector('.fetch-links-result').style.display = 'none'; } this.fetchLinks(); } }).bind(this); return s; } } if ((/vimeo\.com\/search/).test(location.href)) { //Vimeo search if (document.getElementsByClassName('fetch-links-button').length === 0 && document.getElementsByClassName('iris_link-box').length > 0) { let parent_div = document.querySelector('.header_region'); if (parent_div !== null) { let result_div = document.createElement('div'); result_div.className = 'fetch-links-result'; result_div.style.border = '2px solid gray'; result_div.style.borderRadius = '5px'; result_div.style.padding = '5px'; result_div.style.margin = '10px'; result_div.fontFamily = 'monospace'; result_div.style.display = 'none'; parent_div.appendChild(result_div); let input_div = document.createElement('div'); parent_div.insertBefore(input_div, result_div); let links_getter = new VimeoSearchLinksFetcher(location.href, function(links) { result_div.innerHTML = links.join(' '); result_div.style.display = 'block'; }); input_div.appendChild(links_getter.createButton()); let pagination_data = JSON.parse(document.documentElement.outerHTML.match(/var data \= (.+?);\n/)[1]).filtered.paging; let page_numbers = { min: (new URLSearchParams(pagination_data.first)).get('page'), max: (new URLSearchParams(pagination_data.last)).get('page') }; let min_page = document.createElement('input'); min_page.className = 'fetch-links-settings minimum'; min_page.type = 'number'; min_page.min = page_numbers.min; min_page.max = page_numbers.max; min_page.value = page_numbers.min; input_div.appendChild(min_page); let max_page = document.createElement('input'); max_page.className = 'fetch-links-settings maximum'; max_page.type = 'number'; max_page.min = page_numbers.min; max_page.max = page_numbers.max; max_page.value = page_numbers.max; input_div.appendChild(max_page); } } } else if ((/cda\.pl\/.+\/folder/).test(location.href)) { //cda folder if (document.getElementsByClassName('fetch-links-button').length === 0 && document.getElementsByClassName('link-title-visit').length > 0) { let parent_div = document.querySelector('#folder-replace .panel-body'); if (parent_div !== null) { let result_div = document.createElement('div'); result_div.className = 'fetch-links-result'; result_div.style.border = '2px solid gray'; result_div.style.borderRadius = '5px'; result_div.style.padding = '5px'; result_div.style.margin = '10px'; result_div.style.backgroundColor = 'black'; result_div.fontFamily = 'monospace'; result_div.style.display = 'none'; parent_div.insertBefore(result_div, parent_div.children[1]); let input_div = document.createElement('div'); parent_div.insertBefore(input_div, result_div); let links_getter = new CDAFolderLinksFetcher(location.href, function(links) { result_div.innerHTML = links.join(' '); result_div.style.display = 'block'; }); input_div.appendChild(links_getter.createButton()); let pagination_data; if (location.href.indexOf('folder-glowny') === -1) { pagination_data = document.querySelector('#navigation_foldery .active .item-file').innerHTML; } else { pagination_data = document.querySelector('#navigation_foldery a[href*="glowny"] .item-file').innerHTML; } let page_numbers = { min: 1, max: Math.ceil(Number(pagination_data.match(/\d+/)[0]) / 36) }; let input_style = document.createElement('style'); input_style.innerHTML = '\ .fetch-links-settings {\ background-color: transparent;\ text-align: right;\ padding: 2px;\ font-weight: bold;\ border: 2px solid gray;\ }'; input_div.appendChild(input_style); let min_page = document.createElement('input'); min_page.className = 'fetch-links-settings minimum'; min_page.type = 'number'; min_page.min = page_numbers.min; min_page.max = page_numbers.max; min_page.value = page_numbers.min; input_div.appendChild(min_page); let max_page = document.createElement('input'); max_page.className = 'fetch-links-settings maximum'; max_page.type = 'number'; max_page.min = page_numbers.min; max_page.max = page_numbers.max; max_page.value = page_numbers.max; input_div.appendChild(max_page); } } } else if ((/cda\.pl\/info\/.+/).test(location.href)) { //cda general search if (document.getElementsByClassName('fetch-links-button').length === 0 && document.querySelectorAll('.text-video > .link-title-visit').length > 0) { let sought_phrase = location.href.match(/cda\.pl\/info\/(.+)\?section\=video/)[1]; if (sought_phrase === null || sought_phrase === undefined) { throw new Error('Error getting the sought phrase from link'); } let video_search_link = 'https://www.cda.pl/video/show/' + sought_phrase; let parent_div = document.querySelector('.nogry.nogiwera.nodownload.video .bttn-grp-const-width-md'); if (parent_div !== null) { let intermediate_div = document.createElement('div'); intermediate_div.style.margin = '10px 0 2px 0'; intermediate_div.style.textAlign = 'left'; parent_div.insertBefore(intermediate_div, parent_div.children[1]); let result_div = document.createElement('div'); result_div.className = 'fetch-links-result'; result_div.style.border = '2px solid gray'; result_div.style.borderRadius = '5px'; result_div.style.padding = '5px'; result_div.style.margin = '10px'; result_div.style.backgroundColor = 'black'; result_div.fontFamily = 'monospace'; result_div.style.display = 'none'; result_div.style.textAlign = 'left'; parent_div.appendChild(result_div); let input_div = document.createElement('div'); intermediate_div.appendChild(input_div); let links_getter = new CDASearchLinksFetcher(video_search_link, function(links) { result_div.innerHTML = links.join(' '); result_div.style.display = 'block'; }); input_div.appendChild(links_getter.createButton()); let pagination_data = document.querySelector('#mVid > a').innerHTML; let page_numbers = { min: 1, max: Math.ceil(Number(pagination_data.match(/\d+/)[0]) / 24) }; if (page_numbers.max > 55) { page_numbers.max = 55; } let input_style = document.createElement('style'); input_style.innerHTML = '\ .fetch-links-settings {\ background-color: transparent;\ text-align: right;\ padding: 2px;\ font-weight: bold;\ border: 2px solid gray;\ }'; input_div.appendChild(input_style); let min_page = document.createElement('input'); min_page.className = 'fetch-links-settings minimum'; min_page.type = 'number'; min_page.min = page_numbers.min; min_page.max = page_numbers.max; min_page.value = page_numbers.min; input_div.appendChild(min_page); let max_page = document.createElement('input'); max_page.className = 'fetch-links-settings maximum'; max_page.type = 'number'; max_page.min = page_numbers.min; max_page.max = page_numbers.max; max_page.value = page_numbers.max; input_div.appendChild(max_page); } } } else if ((/cda\.pl\/video\/show/).test(location.href)) { //cda video search if (document.getElementsByClassName('fetch-links-button').length === 0 && document.querySelectorAll('.text-video > .link-title-visit').length > 0) { let parent_div = document.querySelector('.bttn-grp-const-width-md'); if (parent_div !== null) { let intermediate_div = document.createElement('div'); intermediate_div.style.margin = '10px 0 2px 0'; intermediate_div.style.textAlign = 'left'; parent_div.insertBefore(intermediate_div, parent_div.children[1]); let result_div = document.createElement('div'); result_div.className = 'fetch-links-result'; result_div.style.border = '2px solid gray'; result_div.style.borderRadius = '5px'; result_div.style.padding = '5px'; result_div.style.margin = '10px'; result_div.style.backgroundColor = 'black'; result_div.fontFamily = 'monospace'; result_div.style.display = 'none'; result_div.style.textAlign = 'left'; parent_div.appendChild(result_div); let input_div = document.createElement('div'); intermediate_div.appendChild(input_div); let links_getter = new CDASearchLinksFetcher(location.href, function(links) { result_div.innerHTML = links.join(' '); result_div.style.display = 'block'; }); input_div.appendChild(links_getter.createButton()); let pagination_data = document.querySelector('#gora > h2').innerHTML; let page_numbers = { min: 1, max: Math.ceil(Number(pagination_data.match(/\d+/)[0]) / 24) }; if (page_numbers.max > 55) { page_numbers.max = 55; } let input_style = document.createElement('style'); input_style.innerHTML = '\ .fetch-links-settings {\ background-color: transparent;\ text-align: right;\ padding: 2px;\ font-weight: bold;\ border: 2px solid gray;\ }'; input_div.appendChild(input_style); let min_page = document.createElement('input'); min_page.className = 'fetch-links-settings minimum'; min_page.type = 'number'; min_page.min = page_numbers.min; min_page.max = page_numbers.max; min_page.value = page_numbers.min; input_div.appendChild(min_page); let max_page = document.createElement('input'); max_page.className = 'fetch-links-settings maximum'; max_page.type = 'number'; max_page.min = page_numbers.min; max_page.max = page_numbers.max; max_page.value = page_numbers.max; input_div.appendChild(max_page); } } } })();