您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
This is a userscript that will download multi episodes form KissAnime. It also can create m3u8 playlist.
当前为
- // ==UserScript==
- // @name KissAnime Multi Downloader
- // @namespace https://greasyfork.org/en/users/135934-anime-bro1
- // @version 0.1
- // @description This is a userscript that will download multi episodes form KissAnime. It also can create m3u8 playlist.
- // @author AnimeBro1
- // @homepage https://github.com/Eltion/Kissanime-Downloader
- // @match http://kissanime.ru/Anime/*
- // @exclude http://kissanime.ru/Anime/*/*
- // @grant GM_setValue
- // @grant GM_getValue
- // @grant GM_xmlhttpRequest
- // @require http://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js
- // @require https://cdn.rawgit.com/Eltion/Kissanime-Downloader/ee154d713ce5af9c031b4abdd20fae8bb7cc2dc5/css.js
- // @require https://cdn.rawgit.com/Eltion/Kissanime-Downloader/ee154d713ce5af9c031b4abdd20fae8bb7cc2dc5/vr.js
- // ==/UserScript==
- var images = ["","","","",""];
- var words = [];
- var k = "";
- var eps = [];
- var epsName = [];
- var epsLinks = [];
- var failedLinks = [];
- var count = 1;
- var failedCount = 0;
- var start = "";
- var end = "";
- var isText = false;
- var isHTML = false;
- var isM3U8 = false;
- var quality = [];
- var failed = true;
- var animebro;
- var max = 1;
- (function() {
- if(!isBasicJson()){
- getBasicJson();
- }
- max = $(".listing").find("a").toArray().length;
- createButton();
- $("#aend").attr('value',max+"");
- $("#startscript").on('click',function(){
- start = $("#astart").val();
- end = $("#aend").val();
- if($("#aquality").val().includes(",")){
- quality = $("#aquality").val().split(",");
- }else{
- alert("Wrong quality format, plese read the help");
- return;
- }
- isText = $("#atxt").get(0).checked;
- isHTML = $("#ahtml").get(0).checked;
- isM3U8 = $("#am3u8").get(0).checked;
- getAllEps();
- });
- //getEP();
- //getLinks(GM_getValue("html3"));
- })();
- function createButton(){
- var imgSrc = "https://assets.ubuntu.com/v1/4cd0df1c-picto-download-orange.svg";
- var html = "<div id='adownloader' style='position:fixed; bottom:10px; left:10px'><img id='startscript' style='cursor:pointer;float:left;position: relative; top:5px;margin-right:10px;' width='70px' src='https://assets.ubuntu.com/v1/4cd0df1c-picto-download-orange.svg' /><div style='background:#dd4814; position: relative;height:70px;padding:10px; border-radius: 10px; text-align:center; color: white;float: left;'><div style='display: inline-block;float: left;'>Start: <input value='1' id='astart' style='color:white; text-align:center; width: 30px; background: transparent; border:0.3px solid white; border-radius:5px;' type='text'></input> End: <input id='aend' value='5' style='color:white; text-align:center; width: 30px; background: transparent; border:0.3px solid white; border-radius:5px;' type='text'></input><br /><br />Quality: <input id='aquality' value='720,480,360' style='color:white; text-align:center; width: 75px; background: transparent; border:0.3px solid white; border-radius:5px;' type='text'></input></div><div style='display:inline-block;float:left;'><input id='atxt' type='checkbox' />Text List <br /><input id='ahtml' type='checkbox' />html List<br /><input id='am3u8' type='checkbox' />m3u8 List</div><a style='display:block; text-align:center;' href='https://github.com/Eltion/Kissanime-Downloader' target='_blank' >Help?</a></div></div>";
- var html2 = "<div id='ainfo' style=' padding:10px; border-radius:20px;position:fixed; display: none; bottom:10px; right:10px; background:#dd4814;height:100px;width:400px;'><h3 style='text-align: center'>KissAnime Downloader</h3><p style='width:100%; word-wrap: break-word;' id='aoutput'></p><p id='aprogress'></p></div>";
- //var html3 = "<div id='ainfo2' style='background: red; padding: 10px; position: a'>"
- $('body').append(html);
- $('body').append(html2);
- }
- function getAllEps(){
- eps = [];
- epsName = [];
- epsLinks = [];
- var x = $(".listing").find("a").toArray();
- for(var i =0; i < x.length; i++){
- eps.push(x[i].href);
- epsName.push(x[i].innerText);
- }
- if(start < 0 || end < start || end > eps.length || !(isText || isHTML || isM3U8)){
- alert("Wrong Options. Max number:"+eps.length);
- return;
- }
- $("#adownloader").hide(500);
- $("#ainfo").show(500);
- eps.reverse();
- epsName.reverse();
- eps = eps.slice( parseInt(start)-1, parseInt(end));
- epsName = epsName.slice(parseInt(start)-1,parseInt(end));
- console.log(epsName);
- alert("Don't try to use the page until it's over!");
- getEP(eps[0]);
- }
- function getEP(url){
- console.log(url);
- words = [];
- images=["","","","",""];
- k = url + "&s=default";
- $('#aoutput').html("Grabbing: "+url+"...");
- var msg = $.ajax({type: "GET", url: url, async: false}).responseText;
- $('#aoutput').append(" <b style='color:green'>Done</b>");
- if(isCapacha(msg)){
- GetWords(msg);
- getImages(msg);
- }else{
- //alert("x");
- noCapacha(msg);
- }
- // var persentage = (epsLinks.length/eps.length)*100;
- //$('#aprogress').html(persentage+"%");
- }
- function isCapacha(html){
- return html.includes("formVerify");
- }
- function noCapacha(html){
- getLinks(html);
- if(count < eps.length){
- getEP(eps[count]);
- count++;
- }
- }
- function isBasicJson(){
- return GM_getValue("AnimeBro1",false);
- }
- function Complete() {
- var jj = 0;
- var postData = "";
- for(var j = 0; j <2; j++){
- var w1 = GM_getValue( words[j], false );
- if(w1 !== false){
- if(w1.includes(" ")){
- w1 = w1.split(" ");
- }else{
- w1 = [w1];
- }
- for(var k =0; k < w1.length; k++){
- for(var i = 0; i < images.length; i++){
- if((images[i] === w1[k]) && postData.length < 4){
- postData += i+",";
- }
- }
- }
- }
- }
- if(postData.length == 4){
- postdata(postData);
- console.log("EP Grabed");
- }else{
- CaptachaNotCompleted(eps[count]);
- }
- }
- function CaptachaNotCompleted(url){
- console.log("Eltioni: "+ url);
- var x = $.ajax({type: "POST", url:"http://kissanime.ru/Mobile/GetEpisode", data:{eID:2693},async: false}).responseText;
- x = x.split("|||")[0];
- epsLinks.push(x);
- }
- function postdata(answer){
- var data = {reUrl: k, answerCap: answer};
- var msg = $.ajax({type: "POST", url: "http://kissanime.ru/Special/AreYouHuman2",data: data ,async: false}).responseText;
- //console.log(msg);
- getLinks(msg);
- }
- function whatServer(html){
- re = /https:\/\/www.rapidvideo.com\/e\/[^"']*/g;
- if(html.includes("slcQualix")){
- return 1;
- }else if(re.exec(html)){
- return 3;
- }
- }
- function getLinks(html){
- //console.log(html);
- server = whatServer(html);
- //GM_setValue("html3",html);
- if(server == 1){
- var b = [];
- var $rr = $($.parseHTML(html,document,true));
- if(animebro == null){
- //alert("xx");
- var script1 = $rr.find("script").toArray()[6].innerHTML;
- var script2 = $rr.find("script").toArray()[7].innerHTML;
- eval("animebro = 1;"+script1);
- eval("animebro = 1;"+script2);
- }
- var x = $rr.find("#slcQualix").find("option").toArray();
- for(var i = 0; i < x.length; i++){
- var c = {"file": ovelWrap(x[i].value), "label": x[i].innerText};
- b.push(c);
- }
- console.log(b);
- getLinkWithSetQuality(b);
- }else if(server == 2){
- var openload = html.match(/https:\/\/openload.co\/embed\/[^"']*/g);
- console.log(openload);
- }else if(server == 3){
- var url = html.match(/https:\/\/www.rapidvideo.com\/e\/[^"']*/g);
- rapidvideo(url);
- }
- }
- function rapidvideo(url){
- GM_xmlhttpRequest({
- method: "GET",
- url: ""+url,
- synchronous: true,
- onload: function(response) {
- var e = JSON.parse(response.responseText.split('"sources": ')[1].split("]")[0]+"]");
- if (e === undefined || e === null) {
- console.log(response.responseText);
- }else{
- console.log(e);
- getLinkWithSetQuality(e);
- }
- }
- });
- }
- function getLinkWithSetQuality(ee){
- //console.log(e);
- for(var i =0; i < quality.length; i++){
- for(var j =0; j < ee.length; j++){
- if(ee[j].label.includes(quality[i])){
- //var b = {"link":ee[j].file,"name":epsName[count-1],"quality":quality[i]};
- epsLinks.push(ee[j].file);
- console.log(ee[j].file);
- return;
- }
- }
- }
- epsLinks.push("");
- console.log("Wrong quality");
- }
- function getBasicJson(){
- var msg = $.ajax({type: "GET", url: "https://rawgit.com/Eltion/Kissanime-Chaptcha-Auto-Complete/master/BasicJson.json", async: false}).responseText;
- msg = JSON.parse(msg);
- for(var i = 0; i < msg.length; i++){
- GM_setValue(msg[i].n,msg[i].v);
- }
- location.reload();
- }
- function getImages(html){
- //console.log(html);
- var items = html.match(/CapImg\?f=[^"']*/g);
- //console.log(items);
- loader(items, loadImage, function () {
- Complete();
- //alert(count);
- console.log(failedLinks);
- if(count < eps.length){
- getEP(eps[count]);
- count++;
- }else{
- $("#ainfo").html('Done, <a href="https://github.com/Eltion/Kissanime-Downloader" target="_blank">What to do now??</a>');
- console.log("DONE");
- console.log(epsLinks);
- if(isText){
- createTxtList();
- }
- if(isHTML){
- createHTMLlist();
- }if(isM3U8){
- createM3U8();
- }
- }
- });
- }
- function GetWords(html){
- var form = html.split("formVerify")[1].split("</form")[0];
- var x = form.match(/(?:<span[^>]*>\s*)([^<]*)/g);
- var word1 = x[0].split(">")[1].replace(/\s\s/g,"");
- var word2 = x[1].split(">")[1].replace(/\s\s/g,"");
- words = [word1,word2];
- }
- function createTxtList(){
- var list ="";
- for(var i = 0; i < epsLinks.length; i++){
- list += encodeURI(epsLinks[i]) + "[" + epsName[i].replace(/[\s:\|\[\]\{\}]+/g,"_") + ".mp4\n";
- }
- download("list.txt","text/plain",list);
- }
- function createHTMLlist(){
- var list ="";
- for(var i = 0; i < epsLinks.length; i++){
- list += '<a href="' + epsLinks[i] + '" download="' + epsName[i] + '">' + epsName[i] + '</a><br>';
- }
- download("list.html","text/html",list);
- }
- function createM3U8(){
- var list =" #EXTM3U\n\n";
- for(var i = 0; i < epsLinks.length; i++){
- list += '#EXTINF:-1,'+epsName[i]+"\n"+encodeURI(epsLinks[i])+"\n\n";
- }
- download("list.m3u8","text/plain",list);
- }
- function download(filename, datatype, text) {
- var element = document.createElement('a');
- element.setAttribute('href', 'data:' + datatype + ';charset=utf-8,' + encodeURIComponent(text));
- element.setAttribute('download', filename);
- // element.setAttribute('target', '_blank');
- // ^^ problems with safari
- element.style.display = 'none';
- document.body.appendChild(element);
- element.click();
- document.body.removeChild(element);
- }
- function loader(items, thingToDo, allDone) {
- if (!items) {
- // nothing to do.
- return;
- }
- if ("undefined" === items.length) {
- // convert single item to array.
- items = [items];
- }
- var count = items.length;
- // this callback counts down the things to do.
- var thingToDoCompleted = function (items, i) {
- count--;
- if (0 === count) {
- allDone(items);
- }
- };
- for (var i = 0; i < items.length; i++) {
- // 'do' each thing, and await callback.
- thingToDo(items, i, thingToDoCompleted);
- }
- }
- function loadImage(items, i, onComplete) {
- var img = new Image();
- var canvas = document.createElement("canvas");
- var ctx = canvas.getContext("2d");
- var dataURL ="";
- var onLoad = function (e) {
- canvas.width = img.naturalWidth;
- canvas.height = img.naturalHeight;
- ctx.drawImage(img, 0, 0);
- dataURL = canvas.toDataURL("image/jpeg");
- images[i] = dataURL;
- e.target.removeEventListener("load", onLoad);
- onComplete(items, i);
- };
- img.addEventListener("load", onLoad, false);
- img.src = "http://kissanime.ru/Special/"+items[i];
- }