ePaveldas.lt Downloader

Генерирует ссылки для скачивания изображений с сайта epaveldas.lt

安装此脚本
作者推荐脚本

您可能也喜欢Archyvai.lt Downloader

安装此脚本
  1. // ==UserScript==
  2. // @name ePaveldas.lt Downloader
  3. // @namespace nikku
  4. // @license MIT
  5. // @version 0.2
  6. // @description Генерирует ссылки для скачивания изображений с сайта epaveldas.lt
  7. // @author nikku
  8. // @match https://www.epaveldas.lt/preview?id=*
  9. // @icon https://www.google.com/s2/favicons?sz=64&domain=epaveldas.lt
  10. // @require https://cdn.jsdelivr.net/npm/file-saver@2.0.5/dist/FileSaver.min.js
  11. // @run-at document-start
  12. // @grant none
  13. // ==/UserScript==
  14.  
  15. /* global saveAs */
  16.  
  17. function processData(data) {
  18. let text = '';
  19. const items = Object.keys(data.resourcesFull);
  20. let file = `${data.providerCode}_${data.id}_${data.title.slice(0, 160)} [${items.length}].txt`;
  21. file = file.replace(/[/\\?%*:|"<>]/g, '_');
  22.  
  23. items.forEach(function(item) {
  24. text += item + '\r\n';
  25. });
  26.  
  27. const btn = document.createElement('button');
  28. btn.id = 'down_links';
  29. btn.className = 'mat-subheading-2';
  30. btn.style.width = '100%';
  31. btn.title = 'Скачать список ссылок';
  32. btn.textContent = 'Download all page links';
  33. btn.addEventListener('click', function() {
  34. saveAs(new Blob([text], {type: 'text/plain;charset=utf-8'}), file);
  35. });
  36.  
  37. let stopObserve = false;
  38. const observer = new MutationObserver(function (mutList) {
  39. for (let i = 0; i < mutList.length; i++) {
  40. for (let j = 0; j < mutList[i].addedNodes.length; j++) {
  41. if (mutList[i].addedNodes[j].classList.contains('preview')) {
  42. mutList[i].addedNodes[j].querySelector('.kpo-details__right').prepend(btn);
  43. observer.disconnect();
  44. stopObserve = true;
  45. break;
  46. }
  47. }
  48. if (stopObserve) {
  49. break;
  50. }
  51. }
  52. });
  53.  
  54. observer.observe(document.body, {
  55. subtree: true, childList: true
  56. });
  57. }
  58.  
  59. (function(open) {
  60. XMLHttpRequest.prototype.open = function() {
  61. if (arguments[1].includes('findById')) {
  62. this.addEventListener('load', function() {
  63. const json = JSON.parse(this.responseText);
  64. processData(json);
  65. }, false);
  66. }
  67.  
  68. open.apply(this, arguments);
  69. };
  70. })(XMLHttpRequest.prototype.open);