Advertisement
Guest User

Asukafag's Zerochan Links Grabber

a guest
Apr 8th, 2017
89
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. // @noframes
  9. // ==/UserScript==
  10.  
  11. (function() {
  12.     var d;
  13.     var tag = "Souryuu+Asuka+Langley";
  14.     var page = 1;
  15.     var site = "http://zerochan.net";
  16.     var parser = new DOMParser();
  17.     var links = new Array();
  18.     var list;
  19.     var data;
  20.     var count;
  21.     var gotList = new CustomEvent("_dGotList");
  22.     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" style="background-color: #FFFFFF;position: fixed;width: 500px;top: 50%;margin-top: -244px;left: 50%;margin-left: -300px;border: 2px solid blue;border-radius: 25px;padding-top: 25px;padding-bottom: 25px;padding-left: 45px;padding-right: 45px;z-index: 5;opacity: 1;font-family: Tahoma, Verdana;"> <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="process" style=" font-size: 12px; opacity: 0.3; margin-bottom: 5px;"></div> <div id="loading" style=" 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="" cols="30" rows="10" style="width: 80%;margin: 0 auto;display: block;height: 260px;resize: none;margin-bottom: 20px;"></textarea> <div style="clear:both"></div> <button id="_dStart">Поехали!</button> <button id="_dClose">Закрыть</button></div></div>';
  23.     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 style="     font-family: Helvetica, Verdana;     font-weight: bold;     font-size: 18px;     color: #71d266;     background-color: #fff1c8;     width: 60px;     text-align: center;     padding: 3px;     border-radius: 15px 15px 0px 0px;     border: 2px solid #f3e4b8;     position: fixed;     top: 100%;     margin-top: -30px;     left: 100%;     margin-left: -75px; "><div style="     display: inline;     color: #e22d2d; ">A</div>ZLG</div></a>';
  24.    
  25.    
  26.     function updateBar(current, total){
  27.         document.getElementById("loaded").style.width=Math.floor(current/(total/100))+"%";
  28.     }
  29.     function updateStatus(str){
  30.          document.getElementById("process").innerHTML = str;
  31.     }
  32.     function addLink(link){
  33.         document.getElementById("_downloader").getElementsByTagName("textarea")[0].value += link+"\r\n";
  34.     }
  35.    
  36.     function loadList(){
  37.         if (d.getElementById("children")) {
  38.             updateStatus("Это <a href='http://zerochan.net/"+tag+"' style='text-decoration:underline'>неполный тег</a>.");
  39.             return;
  40.         }
  41.         list = d.getElementById("thumbs2").getElementsByTagName("li");
  42.         for (var a=0; a<list.length; a++) {
  43.             links.push(list[a].getElementsByTagName("a")[0].getAttribute("href"));
  44.         }
  45.         updateBar(page, count);
  46.         if (page < count) {
  47.             page++;
  48.             loadPage(tag+"?p="+page);
  49.         }
  50.         else {
  51.         page = 0;
  52.         count = links.length-1;
  53.         document.removeEventListener("_dReady", loadList);
  54.         document.addEventListener("_dReady", getLinks);
  55.         document.dispatchEvent(gotList);
  56.         loadPage(links[0]);
  57.         updateStatus("Копируем ссылки...");
  58.         }
  59.     }
  60.  
  61.     function getLinks(){
  62.         var link;
  63.         a = d.getElementById("large").getElementsByTagName("img")[0];
  64.         if (a.parentNode.tagName == "A") link = a.parentNode.getAttribute("href");
  65.             else link = a.getAttribute("src");
  66.         updateBar(page+1, count+1);
  67.         addLink(link);
  68.         if (page < count) {
  69.             page++;
  70.             console.log(page+" from "+links.length);
  71.             loadPage(links[page]);
  72.         }
  73.         else {
  74.             console.log(links);
  75.             updateStatus("Готово!");
  76.         }
  77.     }
  78.  
  79.     function loadPage(url) {
  80.         console.log("url: "+url);
  81.         xhr = new XMLHttpRequest();
  82.         xhr.open('GET', url, true);
  83.         xhr.onreadystatechange = (function(){
  84.             if (xhr.readyState != 4) return;
  85.             if (xhr.status == "404") {
  86.                 updateStatus("Такого тега нет.");
  87.                 return;
  88.             }
  89.             d = parser.parseFromString(xhr.responseText, "text/html");
  90.             document.dispatchEvent(new CustomEvent("_dReady"));
  91.         });
  92.         xhr.send();
  93.     }
  94.  
  95.     function getCount(){
  96.         updateStatus("Получаем информацию о количестве ссылок....");
  97.         console.log("getCount");
  98.         var p = d.getElementById("content").getElementsByTagName("p");
  99.         p = p[p.length-1];
  100.         console.log(p);
  101.         count = Number(p.innerHTML.match(/из ([0-9]+?.)/i)[1]);
  102.         document.removeEventListener("_dReady", getCount);
  103.         document.addEventListener("_dReady", loadList);
  104.         document.dispatchEvent(new CustomEvent("_dReady"));
  105.     }
  106.  
  107.     function copyLinks() {
  108.         if (document.getElementById("tag").value.length > 0) tag = document.getElementById("tag").value.replace(/ /ig, "+");
  109.         document.addEventListener("_dReady", getCount);
  110.         loadPage(tag);
  111.     }
  112.    
  113.     function displayModule(){
  114.         document.getElementsByTagName("body")[0].removeChild(document.getElementById("_dShortcut"));
  115.         document.getElementsByTagName("body")[0].innerHTML = box+document.getElementsByTagName("body")[0].innerHTML;
  116.         document.getElementById("_dStart").addEventListener("click", copyLinks);
  117.         document.getElementById("_dClose").addEventListener("click", function(){
  118.             displayShortcut();
  119.             document.getElementsByTagName("body")[0].removeChild(document.getElementById("_dWrapper"));
  120.         });
  121.     }
  122.    
  123.     function displayShortcut(){
  124.         console.log("displayed");
  125.         document.getElementsByTagName("body")[0].innerHTML += shortcut;
  126.         var elem = document.getElementById("_dShortcut");
  127.         elem.addEventListener("click", displayModule);
  128.         elem.addEventListener("mouseover", function(){elem.style.opacity="1"});
  129.         elem.addEventListener("mouseleave", function(){elem.style.opacity="0.7"});
  130.     }
  131.     window.addEventListener('load', function() {
  132.         displayShortcut();
  133.     }, false);
  134.     loaded = true;
  135.  
  136. })();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement