今年一定島 自動下載圖片

汲汲營營大報社

// ==UserScript==
// @name         今年一定島 自動下載圖片
// @description  汲汲營營大報社
// @namespace    https://greasyfork.org/zh-TW/scripts/449572
// @author       稻米
// @version      2022.11.27.0051.build16299
// @grant        none

// @include      *://*.komica.org/00/*
// @include      *://*.komica.org/00/*
// @exclude      *://*.komica.org/00/src/*
// @exclude      *://*.komica.org/00/thumb/*
// @exclude      *.jpg
// @exclude      *.png
// @exclude      *.webm
// @license      WTFPL

// ==/UserScript==

$(document).ready(function() {
    //poi();
    poi();
});


function poi(){ //只在回應模式套用
    //console.log( document.styleSheets );
    //console.log(window.location.href);
    var tmp=window.location.href;
    tmp=tmp.match("\\?res=");
    //window.location.href.match("\\?res=")
    //console.log(tmp);
    if(tmp){
        //沒事
    }else{
        //console.log('非回應');
        return 0;//不正確 中止
    }

    if( $('div.thread').length == 1 ){
        //沒事
    }else{
        //回應模式只有一串討論串
        return 0;//不正確 中止
    }


    var FFF=$('body').attr('poi220815');
    if( FFF == 1 ){
        return 0;//只執行一個腳本 中止
    }else{
        $('body').attr('poi220815','1');
    }

    poi建立啟動按鈕();//

}


function poi建立啟動按鈕(){ //建立啟動按鈕
    //console.log(arguments.callee.name); //poi2
    //$("#threads").before('before');
    $(".thread").before('<poi><button type="reset">自動下載</button></poi>');
    $("poi >button:contains('自動下載')").click(function(){
        poi建立控制台();
    });
    //

}//poi2(){

function poi建立控制台(){ //建立控制台
    var FFF=$('#poi220814box');
    if( FFF.length > 0 ){
        return 0;//只產生一個控制台 中止
    }else{
        //沒事
    }


    $('.thread').prepend('<div id="poi220814box">未完成</div>');
    //$('#poi220814a').attr('style','');
    $('#poi220814box').css({
        'background':'rgb(200,200,200)',
        'color':'rgb(100,100,100)',
        'text-align':'initial',
        'width':'400px',
        'height':'400px',
        'overflow':'auto',
    });
    $('#poi220814box').text('');

    $('#poi220814box').append('<button type="reset" id="poi220814f"> 標示樓層</button><br/>');
    $("#poi220814f").click(function(){
        poi標示樓層();
    });

    $('#poi220814box').append('<input type="text" size="8" value="0,1,2,3-10" placeholder id="poi220814rgi"><button type="reset" id="poi220814rg">輸入範圍</button><br/>');
    $("#poi220814rg").click(function(){
        poi輸入範圍();
    });


    $('#poi220814box').append('<img id="poi220815img01"><a id="poi220815aa01" href="#">†</a><br/>');
    $('#poi220815img01').css({
        'width':'100px',
        'height':'100px',
    });
    $('#poi220815aa01').css({
        'width':'100px',
        'height':'100px',
    });
    //'border-right':'10px solid red',

    $('#poi220814box').append('<div id="poi220815m">訊息</div><br/>');
    $('#poi220815m').css({
        'display':'block',
        'font-family':'monospace',
        'white-space':'pre',
    });



}//

function poi輸入範圍(){ //輸入範圍
    //console.log( 'poi輸入範圍' );
    var FFF='';
    FFF=$('#poi220814rgi').val();
    //console.log( FFF );
    FFF=FFF.split(',');//字串轉陣列
    //console.log( FFF );
    var str_ary=FFF;
    str_ary.forEach(function( item,index ){//遍歷元素
        //console.log( item,index );
        var aa=item.search("-");
        //console.log( aa );
        if(aa != -1){
            //console.log( 'yy' );
            var aa2=item.split('-');
            //console.log( aa2 );
            var str='';
            if(aa2[0]==''){str='skip';}
            if(aa2[1]==''){str='skip';}
            if(str=='skip'){
                $('#poi220815m').append('<br/>輸入範圍 錯誤');
            }else{
                //console.log( '???' );
                aa2[0]=parseInt(aa2[0]);
                aa2[1]=parseInt(aa2[1]);
                //console.log( aa2 );
                for(let i = aa2[0]; i <= aa2[1]; i++) {
                    //console.log( i );
                    str_ary.push(i);
                }//for
                //delete str_ary[index];//處理過的元素就刪除
            }
            //console.log( str_ary );

        }//if
    });//foreach
    //
    poi輸入範圍2(str_ary);


}//輸入範圍
function poi輸入範圍2(in1){
    var str_ary=in1;
    //
    str_ary.forEach(function( item,index ){//遍歷元素
        str_ary[index]=parseInt(item);//轉換成整數
    });
    //console.log( FFF );

   	str_ary=str_ary.filter(function(item,index){
        //console.log( FFF );
        //var found=item.isInteger();
  		if( parseInt(item) === item ){return true;}//留下整數
    });

    str_ary.sort(function(a, b){return a - b});//排序 //由小到大

    str_ary.forEach(function( item,index ){//遍歷元素
        str_ary[index]=parseInt(item);//轉換成整數
    });

    str_ary.forEach(function( item,index ){//遍歷元素
        var found = str_ary.indexOf( item );
        if(found == index){
            //沒事
        }else{
            delete str_ary[index];//刪除
        }
    });

    //console.log( str_ary );

   	str_ary=str_ary.filter(function(item,index){
        //console.log( FFF );
        //var found=item.isInteger();
  		if( parseInt(item) === item ){return true;}//留下整數
    });

    //console.log( str_ary );//使用者輸入的範圍
    poi有效的樓層(str_ary);
}

function poi有效的樓層(str_ary){
    //console.log( 'poi有效的樓層' );

    var FFF=$('.thread').find('.post');
    //console.log( FFF );

    var aaa1=[];
    str_ary.forEach(function( item,index ){//遍歷元素 item=指定的樓層
        //console.log( item,index );
        //console.log( FFF[item] );
        aaa1.push( FFF[item] );
    });

    //console.log( aaa1 );//指定範圍內的文章

    FFF='';
    var aaa1b=[];
    aaa1.forEach(function( item,index ){//遍歷元素
        //console.log( item,index );
        FFF= $(item).find('.file-thumb');//img

        if( FFF.length > 0){ //有找到縮圖
            //console.log( FFF );
            //aaa1b.push( item );
            //aaa1b.push( $(FFF[0]).attr('src') );//縮圖

            var 連結=$(FFF[0]).attr('href');
            //console.log( 連結 );
            var chk=0;
            if(連結.match(/jpg$/)){chk=chk+1;}
            if(連結.match(/png$/)){chk=chk+1;}
            if( chk >0 ){
                aaa1b.push( 連結 );
            }else{
                //只接受jpg
                delete str_ary[index];
            }
        }else{
            //沒找到圖片
            delete str_ary[index];
        }
    });

    //console.log( str_ary );
   	str_ary=str_ary.filter(function(item,index){
        //console.log( FFF );
        //var found=item.isInteger();
  		if( parseInt(item) === item ){return true;}//留下整數 去掉空陣列
    });
    //
    if( str_ary.length > 0){ //有
        FFF=''+str_ary.toString();
    }else{
        FFF='無';
    }

    console.log( FFF );//有效的樓層
    $('#poi220815m').append('<br/>有效的樓層:'+FFF);

    //console.log( aaa1b );//要下載的圖片連結
    FFF='';
    FFF=[0,aaa1b];
    var traveler=FFF;
    //
    poi下載圖片(traveler); //啟動下載程序

}//





function poi下載圖片(traveler){
    var cc=traveler[0];
    var aaa1b=traveler[1];
    //
    console.log( cc,aaa1b.length );
    //
    if( cc < aaa1b.length){
        //沒事
        console.log( 'yy' );
    }else{
        console.log( 'nn' );
        $('#poi220815m').append('<br/>正常結束');
        return 0;//不正確 中止
    }//if
    var FFF=cc+1;
    $('#poi220815m').append('<br/>'+'('+FFF+'/'+aaa1b.length+')');

    var imgurl=aaa1b[cc];//取得原圖網址



    console.log( imgurl );
    var xhr = new XMLHttpRequest();
	xhr.onprogress = function(e){
		//console.log( 'xhr.onprogress' );
		var aa=0.0 + (e.loaded / e.total);
		aa= (aa * 100);//百分比
		var aa3 = aa.toFixed(2);//取小數2位
		var new_aa='';
		new_aa=''+aa3+'%';
		//console.log( new_aa );
	    var ee = document.querySelector("#poi220815aa01");
        //var aa = document.getElementById('poi220815aa01');
		ee.innerHTML=new_aa;


	};

    xhr.onreadystatechange = function(e){
        if(this.readyState == 4){
            if( this.status == 200 ){
                console.log( this.getAllResponseHeaders() );
                poi下載圖片2(traveler,this);//讀取圖片
            }
        }
    };



    xhr.open('GET', imgurl);
    xhr.responseType = 'blob';
    xhr.send();

}

function poi下載圖片2(traveler,this2){
    //console.log( traveler,this2 );
    var cc=traveler[0];
    //
    var img = document.getElementById('poi220815img01');
    img.onload = function(e){
        poi下載圖片3(traveler,img.src);
    };
    img.src = window.URL.createObjectURL(this2.response);

}//

function poi下載圖片3(traveler,in1){
    //console.log( traveler,in1 );
    var cc=traveler[0];
    //
    var aa = document.getElementById('poi220815aa01');
    aa.href = in1;
    aa.download='';//自動下載blob
    aa.click();
    //aa.href = '#';
    //使用jq動畫做計時器
    //$("#poi220815img01").slideUp( 1000 ).slideDown( 1000 ,function(){
    $("#poi220815img01").animate({width: "20px"}, 1000).animate({width: "100px"}, 1000 ,function(){
        traveler[0]=cc+1;
        //console.log( traveler );
        poi下載圖片(traveler);
    });
}


function poi標示樓層(){ //標示樓層
    var FFF='';
    FFF=$('.thread').find('.post-head');
    //console.log( FFF );
    var cc=0;
    FFF.each(function( index,item ){//遍歷元素
        //console.log( index,item );
        $(item).prepend('<h1 style="text-align:left;">'+cc+'</h1>');//append
        cc++;
    });

}


function poi_處理(){
    var aa = $('.file-text');
    //console.log( aa );
    aa.each(function( index,item ){//個別討論串
        var FFF=$(item).find('a').attr('href');
        console.log( FFF );
        if( /jpg$/.test( FFF ) ){
            poi4(item);
        } //不處理
    });

}


function 沒用到(){

    if( /jpg$/.test( imgurl ) ){
        //CDN1
        //imgurl=imgurl.substr(2);
        //imgurl='https://i0.wp.com/'+imgurl+'?fit=2048,2048&quality=85';//&&quality=85
    }//允許jpg
    if( /png$/.test( imgurl ) ){
        //CDN2
        //imgurl='http:'+imgurl;
        //imgurl='https://images.weserv.nl/?url=' + imgurl + '&output=jpg&q=85&filename=' + imgurl.match(/[0-9]{10,}/) +'&w=2048&h=2048&fit=inside&we';//
    }//允許png


    //blocked by CORS policy: No 'Access-Control-Allow-Origin'
    //K島圖片沒有允許跨來源資源共用 用圖片CDN處理一下



}