Advertisement
Guest User

Asukafag's Zerochan Links Grabber

a guest
Apr 10th, 2017
142
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. // ==UserScript==
  2. // @name         Asukafag's Zerochan links grabber
  3. // @namespace    http://dobrochan.org/
  4. // @version      0.01
  5. // @description  Helps you grab links to images with specified tag from Zerochan.
  6. // @author       Asukafag
  7. // @include      http://www.zerochan.net/*
  8. // @grant        GM_addStyle
  9. // @noframes
  10. // ==/UserScript==
  11.  
  12. GM_addStyle('a._dList {display:inline; background-color: #EEEEEE; padding: 3px; margin: 2px; line-height:2} div#_downloader {background-color: #fff8e6;position: fixed;width: 500px;top: 50%;margin-top: -244px;left: 50%;margin-left: -300px;border: 2px solid #949494;padding-top: 25px;padding-bottom: 25px;padding-left: 45px;padding-right: 45px;z-index: 5;opacity: 1;font-family: Tahoma, Verdana;} div#_dShortcut_1 {font-family: Helvetica, Verdana; font-weight: bold; font-size: 18px; color: #71d266; background-color: #fff1c8; width: 60px; text-align: center; padding: 3px; border: 2px solid #f3e4b8; position: fixed; top: 100%; margin-top: -30px; left: 100%; margin-left: -75px;}');
  13.  
  14. (function() {
  15.    
  16.    
  17.     var d;
  18.     var tag = "Souryuu+Asuka+Langley";
  19.     var page;
  20.     var site = "http://zerochan.net";
  21.     var parser = new DOMParser();
  22.     var links;
  23.     var list;
  24.     var data;
  25.     var count;
  26.     var gotList = new CustomEvent("_dGotList");
  27.     var dummy;
  28.     var box = '<div id="_dWrapper"><div id="_downloader_box" style="Background-color: #000000;height: 100%;width: 100%;opacity: 0.3;position: fixed;z-index: 4;"> </div> <div id="_downloader"> <div id="title" style="font-size: 25px; color: #ca7272; text-align: center; margin-bottom: 15px;"> Asukafag&#8242;s Zerochan Links Grabber</div> <div id="description" style="font-size: 13px; text-align: center; margin-bottom: 25px;"> Копирование ссылок на изображения по тегам</div> <div style="font-size:12px;display: inline;">Тег:</div> <input type="text" id="tag" placeholder="Souryuu Asuka Langley" style="     margin-bottom: 25px; "> <div id="related"></div><div id="process" style=" font-size: 12px; opacity: 0.3; margin-bottom: 5px;"></div> <div id="loading" style=" display: none; min-height: 30px; width: 100%; background-color: #009688; margin-bottom: 15px; border: 2px solid #009688;"> <div id="loaded" style=" background-color: #9ff354; min-height: 30px; width: 0%;"></div> </div> <textarea name="" id="_dLinks" cols="30" rows="10" style="width: 80%;margin: 0 auto;display: none;height: 260px;resize: none;margin-bottom: 20px;"></textarea> <div style="clear:both"></div> <button id="_dStart" style="margin-right:15px; padding:5px">Поехали!</button><button id="_dStop" disabled=true style="padding:5px">Стоп</button> <button id="_dClose" style="float:right; padding:5px">Закрыть</button></div></div>';
  29.     var shortcut = '<a id="_dShortcut" href="javascript:void(0);" style="opacity:0.7" onmouserover="this.style.opacity=1;" onmouseleave="this.style.opacity=0.7"> <div id="_dShortcut_1"><div style="     display: inline;     color: #e22d2d; ">A</div>ZLG</div></a>';
  30.     var keyTypingTimer = null;
  31.     function updateBar(current, total){
  32.         document.getElementById("loaded").style.width=Math.floor(current/(total/100))+"%";
  33.     }
  34.     function updateStatus(str){
  35.          document.getElementById("process").innerHTML = str;
  36.     }
  37.     function addLink(link){
  38.         document.getElementById("_downloader").getElementsByTagName("textarea")[0].value += link+"\r\n";
  39.     }
  40.    
  41.     function checkTyping(){
  42.         clearInterval(keyTypingTimer);
  43.         keyTypingTimer = setTimeout(checkTags, 300);
  44.     }
  45.    
  46.     function checkTags(){
  47.         document.getElementById("related").innerHTML = "";
  48.         if (document.getElementById("tag").value.length > 0) tag = document.getElementById("tag").value.replace(/ /ig, "+");
  49.             else return;
  50.         console.log(tag);
  51.         var chk = new XMLHttpRequest();
  52.         chk.open('GET', tag, true);
  53.         chk.onreadystatechange = (function(){
  54.             if (chk.readyState != 4) return;
  55.             if (chk.status != "200") return;
  56.             d = parser.parseFromString(chk.responseText, "text/html");
  57.             if (d.getElementById("children")) displayList();
  58.         });
  59.         chk.send();
  60.     }
  61.    
  62.     function displayList(){
  63.         progressToggle(false);
  64.         var labels = new Array();
  65.         var childrens = d.getElementById("children").getElementsByTagName("li");
  66.         for(var l=0; l <= childrens.length-1; l++) {
  67.            labels[l] = childrens[l].getElementsByTagName("a")[1].innerHTML;
  68.         }
  69.         for(var z = 0; z <= labels.length-1 && z <= 20; z++){
  70.             if (z == 20) document.getElementById("related").innerHTML += "<a href='http://zerochan.net/"+tag+"' class='_dList' target='_blank'>More...</a>";
  71.                 else document.getElementById("related").innerHTML += "<a href='javascript:void(0)' class='_dList'>"+labels[z]+"</a>";
  72.         }
  73.         for (z = 0; z <= document.getElementById("related").getElementsByTagName("a").length-1; z++) document.getElementById("related").getElementsByTagName("a")[z].addEventListener("click", function(){
  74.             document.getElementById("tag").value = this.innerHTML;
  75.             document.getElementById("related").innerHTML = "";
  76.         })
  77.     }
  78.    
  79.     function loadList(){
  80.         if (d.getElementById("children")) {
  81.             updateStatus("Это <a href='http://zerochan.net/"+tag+"' style='text-decoration:underline'>неполный тег</a>.");
  82.             return;
  83.         }
  84.         list = d.getElementById("thumbs2").getElementsByTagName("li");
  85.         for (var a=0; a<list.length; a++) {
  86.             links.push(list[a].getElementsByTagName("a")[0].getAttribute("href"));
  87.         }
  88.         updateBar(page, count);
  89.         if (page < count) {
  90.             page++;
  91.             loadPage(getNextUri());
  92.         }
  93.         else {
  94.         page = 0;
  95.         count = links.length-1;
  96.         dummy.removeEventListener("_dReady", loadList);
  97.         dummy.addEventListener("_dReady", getLinks);
  98.         dummy.dispatchEvent(gotList);
  99.         loadPage(links[0]);
  100.         updateStatus("Копируем ссылки...");
  101.         }
  102.     }
  103.  
  104.     function getLinks(){
  105.         var link;
  106.         a = d.getElementById("large").getElementsByTagName("img")[0];
  107.         if (a.parentNode.tagName == "A") link = a.parentNode.getAttribute("href");
  108.             else link = a.getAttribute("src");
  109.         updateBar(page+1, count+1);
  110.         addLink(link);
  111.         if (page < count) {
  112.             page++;
  113.             loadPage(links[page]);
  114.         }
  115.         else {
  116.             document.getElementById("_dWrapper").parentNode.replaceChild(document.getElementById("_dWrapper").cloneNode(true), document.getElementById("_dWrapper"));
  117.             initialize();
  118.             updateStatus("Готово!");
  119.         }
  120.     }
  121.  
  122.     function loadPage(url) {
  123.         console.log(url);
  124.         xhr = new XMLHttpRequest();
  125.         xhr.open('GET', url, true);
  126.         xhr.onreadystatechange = (function(){
  127.             if (xhr.readyState != 4) return;
  128.             if (xhr.status == "404") {
  129.                 updateStatus("Такого тега нет.");
  130.                 inputToggle(true);
  131.                 return;
  132.             }
  133.             d = parser.parseFromString(xhr.responseText, "text/html");
  134.             dummy.dispatchEvent(new CustomEvent("_dReady"));
  135.         });
  136.         xhr.send();
  137.     }
  138.  
  139.     function getCount(){
  140.         updateStatus("Получаем информацию о количестве ссылок....");
  141.         console.log("getCount");
  142.         try {
  143.             var p = d.getElementById("content").getElementsByTagName("p");
  144.             p = p[p.length-1];
  145.             console.log(p);
  146.             console.log(p.innerHTML.split(" ")[3].replace(/,/g, "").match(/[0-9]*/)[0]);
  147.             count = Number(p.innerHTML.split(" ")[3].replace(/,/g, "").match(/[0-9]*/)[0]);
  148.             dummy.removeEventListener("_dReady", getCount);
  149.             dummy.addEventListener("_dReady", loadList);
  150.             dummy.dispatchEvent(new CustomEvent("_dReady"));
  151.         }
  152.             catch(err){
  153.                 console.log(err);
  154.                 // Здесь должна быть какая-нибудь обработка ошибки :(
  155.                 updateStatus("Ой! Возникли проблемы. Возможно, вы ввели некорректный тег. Или вы просто бака.");
  156.                 initialize();
  157.                 return;
  158.             }
  159.         console.log("Count: "+count);
  160.     }
  161.    
  162.     function getNextUri(){
  163.         var p = d.getElementById("content").getElementsByTagName("p");
  164.         p = p[p.length-1];
  165.         var h = p.getElementsByTagName("a");
  166.         h = h[h.length-1];
  167.         return h.getAttribute("href");
  168.     }
  169.    
  170.     function progressToggle(toggle){
  171.         var display;
  172.         if (toggle) display = "block";
  173.             else display = "none";
  174.         document.getElementById("process").style.display = display;
  175.         document.getElementById("loading").style.display = display;
  176.         document.getElementById("_dLinks").style.display = display;
  177.     }
  178.     function inputToggle(toggle){
  179.         document.getElementById("_dStop").disabled = toggle;
  180.         document.getElementById("tag").disabled = !toggle;
  181.     }
  182.  
  183.     function copyLinks() {
  184.         if (document.getElementById("tag").value.length > 0) tag = document.getElementById("tag").value.replace(/ /ig, "+");
  185.             else return;
  186.         progressToggle(true);
  187.         inputToggle(false);
  188.         dummy.addEventListener("_dReady", getCount);
  189.         loadPage(tag);
  190.     }
  191.    
  192.     function displayModule(){
  193.         document.getElementsByTagName("body")[0].removeChild(document.getElementById("_dShortcut"));
  194.         document.getElementsByTagName("body")[0].innerHTML = box+document.getElementsByTagName("body")[0].innerHTML;
  195.         initialize();
  196.     }
  197.    
  198.     function initialize(){
  199.         inputToggle(true);
  200.         document.getElementById("_dStop").disabled = true;
  201.         document.getElementById("tag").disabled = false;
  202.         document.getElementById("tag").addEventListener("keyup", checkTyping);
  203.         links = new Array();
  204.         list = new Array();
  205.         page = 1;
  206.         count = 0;
  207.         document.getElementById("_dStart").addEventListener("click", copyLinks);
  208.         document.getElementById("_dStop").addEventListener("click", function(){
  209.             document.getElementById("_dWrapper").parentNode.replaceChild(document.getElementById("_dWrapper").cloneNode(true), document.getElementById("_dWrapper"));
  210.             initialize();
  211.         });
  212.         dummy = document.getElementById("_dWrapper");
  213.         document.getElementById("_dClose").addEventListener("click", function(){
  214.             displayShortcut();
  215.             document.getElementsByTagName("body")[0].removeChild(document.getElementById("_dWrapper"));
  216.         });
  217.     }
  218.    
  219.     function displayShortcut(){
  220.         console.log("displayed");
  221.         document.getElementsByTagName("body")[0].innerHTML += shortcut;
  222.         var elem = document.getElementById("_dShortcut");
  223.         elem.addEventListener("click", displayModule);
  224.         elem.addEventListener("mouseover", function(){elem.style.opacity="1"});
  225.         elem.addEventListener("mouseleave", function(){elem.style.opacity="0.7"});
  226.     }
  227.     window.addEventListener('load', function() {
  228.         displayShortcut();
  229.     }, false);
  230.     loaded = true;
  231.  
  232. })();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement