今年一定島 自動更新回文

汲汲營營大報社

Version vom 31.12.2023. Aktuellste Version

// ==UserScript==
// @name         今年一定島 自動更新回文
// @description  汲汲營營大報社
// @author       稻米
// @namespace    https://greasyfork.org/zh-TW/scripts/39891
// @version      2024.01.01.0012.build16299

// @match        *://gaia.komica.org/00b/*
// @match        *://gaia.komica1.org/00b/*
// @match        *://gaia.komica2.net/00b/*

// @exclude      *://*/00b/src/*
// @exclude      *://*/00b/thumb/*

// @grant        none
// @license      WTFPL



// ==/UserScript==

//jquery
try{}
catch(err){}
finally{}
//
$(document).ready(function() {
    //var time=new Date();
    //
    //var url = new URL( window.location.href );
    //var res=url.searchParams.get('res');
    //console.log( res );
    //return;
    poi(); //回應模式才執行
});

function poi(){

    var aa=window.location.href.match("\\?res=");
    //console.log( aa );
    if( aa ){
        //ok //確認是回應模式的網址
    }else{
        return;
    }
    //
    var bb=$("div.bar_reply:contains('回應模式')");
    //console.log( bb );
    if( bb.length ){
        //ok //確認是回應模式
    }else{
        return;
    }
    //
    //console.log( '回應模式才執行' );
    poi231230倒數計時器();
}//poi()


function poi231230倒數計時器(){
    //console.log( 'poi231230倒數計時器' );
    //建立元素
    var aa =$('.thread');
    if(aa.length ){
        //ok //元素存在
    }else{
        return;
    }
    //建立元素
    aa.append('<span class="poi231230bigbox"><span class="poi231230">自動更新回文</span></span>');
    $(".poi231230").css({
        "background-color":"yellow",
        "border":"2px solid red",
    });//
    $(".poi231230").after('<span id="poi231230訊息box">.</span>');
    ///
    poi231230倒數計時器2();//倒數
    poi231230手動更新();//倒數

}//poi231230倒數計時器

function poi231230手動更新(){
    //console.log( 'poi231230手動更新' );
    //$('.poi231230bigbox').append('<button type="reset">api資料</button>');
    $(".poi231230").after('<button type="reset">api資料</button>');
    $('.poi231230bigbox').attr('poi240101觸發ajax','0');
    //
    $(".poi231230bigbox >button:contains('api資料')").click(function(){
        //console.log('按鈕');
        var aa=$('.poi231230bigbox').attr('poi240101觸發ajax');
        //console.log( aa );
        if(aa>0){
            //console.log('佔用');
            return;
        }//
        //console.log('沒佔用');
        clearTimeout( $.poi231230計時器 );//停止現有的計時器
        $('#poi231230訊息box').text('更新太快會有429錯誤');//訊息
        poi231230取得資料();//取得頁面的api新資料
    });

}//

function poi231230倒數計時器2(){
    //console.log( 'poi231230倒數計時器2' );
    var 紀錄的時間點= new Date().getTime();//更新當下的時間
    //
    var 計時器a1=function(){
        $.poi231230計時器=setTimeout(function(){
            var 檢查的新時間= new Date().getTime();//
            var 計時間隔=30;//秒
            var diff=檢查的新時間 - 紀錄的時間點;
            $(".poi231230").html(''+ 計時間隔 - Math.floor(diff/1000) );//取整數
            if(diff < 計時間隔*1000){ //設定每隔幾秒 更新頁面的新資料 //更新太快會有429錯誤
                clearTimeout( $.poi231230計時器 );//停止現有的計時器
                計時器a1();//重複
            }else{
                //window.clearTimeout( 計時器a1 );
                紀錄的時間點= new Date().getTime();//更新當下的時間
                //計時器a1();//重複//由getapi啟動
                poi231230取得資料();//取得頁面的api新資料
            }
        }, 1*1000);//setTimeout//每秒更新
        $.poi231230計時器;//啟動
    }//計時器a1
    計時器a1();//啟動
}//poi231230倒數計時器2


function poi231230取得資料(){
    //console.log('poi231230取得api資料');
    //var url = new URL( document.location.href );
    //var thread_no=url.searchParams.get("res");
    var thread_no = $('.post.threadpost').attr('data-no'); //首篇編號
    var apiurl='./pixmicat.php?mode=module&load=mod_ajax&action=thread&html=true&op='+thread_no; //綜合版原生api
    //console.log(apiurl);


    var [poi231231time1,poi231231time2]=[0,0];//計算ajax的反應時間
    var jqXHR=$.ajax({
        url: apiurl,
        type: 'GET',
        data: {},
        beforeSend:function(x,y,z){
            poi231231time1=Date.now();//performance.now();
            $('.poi231230bigbox').attr('poi240101觸發ajax','1');

        },
    });
    $('.poi231230').text('正在取得api資料');//拋出訊息

    jqXHR.done(function(  data, textStatus, jqXHR ) {
        console.log( 'jqXHR.done' );
        var json = $.parseJSON( data );//分析parse
        if(json.error >0){//出現錯誤 有可能是串被砍了
            console.log( json.msg );//來自api的錯誤訊息
            return;
        }
        //console.log( json.posts );//ok
        //return;
        var bb=json.posts; //post_json_ary
        var apidata_文章編號=[];
        var apidata_文章內容=[];
        $.each(bb,function(index,item){
            //console.log( item );
            //var bb2 = item.no;
            apidata_文章編號[index]=''+item.no;//用字串儲存
            apidata_文章內容[item.no]=item.html;
        });
        //console.log( apidata_文章編號,apidata_文章內容 );
        //return;
        var FFF=[apidata_文章編號,apidata_文章內容];
        poi231230比對資料( FFF );//比對資料
        //
    });//jqXHR.done

    ///
    jqXHR.fail(function( jqXHR, textStatus, errorThrown ){
        console.log( 'jqXHR.fail' );
        //console.log( jqXHR, textStatus, errorThrown );
        $('.poi231230').text(textStatus+jqXHR.status);
        var time = new Date()
        console.log(jqXHR.status+'錯誤 5分鐘後重新嘗試'+time);
        setTimeout(function(){//5分鐘後重新嘗試
            console.log('再次嘗試');
            poi231230取得資料();//取得頁面的api新資料
        }, 300*1000);
    });
    jqXHR.always(function( data, textStatus, jqXHR ){
        //console.log( 'jqXHR.always' );
        //console.log( textStatus );//success
    });
    jqXHR.then(function( data, textStatus, jqXHR ){
        //console.log( 'jqXHR.then' );
        poi231231time2=Date.now();//performance.now();
        //console.log( poi231231time1,poi231231time2 );//ok
        var FFF=poi231231time2-poi231231time1;//反應時間
        console.log( 'ajax反應時間='+FFF+'ms' );//ajax反應時間
        if(FFF<1000){
            //ok
        }else{
            FFF='';
            FFF='伺服器回應時間大於一秒(較長)';
            console.log( FFF );//success
            $('#poi231230訊息box').text( FFF );//在網頁上顯示訊息
        }
        //結束
        $('.poi231230bigbox').attr('poi240101觸發ajax','0');
        //console.log( Date() );//Sun Dec 31 2023 12:18:00 GMT+0800 (台北標準時間)
    });
/*
jqXHR.done
jqXHR.always
jqXHR.then
*/
}//poi231230取得資料()

function poi231230比對資料(FFF){
    //console.log( 'poi231230比對資料' );
    var [apidata_文章編號,apidata_文章內容]=FFF;
    //console.log( apidata_文章編號,apidata_文章內容 );//ok

    //找出現有的文章編號
    var aa =$('div.thread').find('div.post');
    var html_文章編號=[];
    //var html_文章編號2=[];
    FFF='';
    aa.each(function(index,item){
        FFF = $(item).find('span.qlink').attr('data-no');//.data('no')
        //console.log( FFF );
        html_文章編號[index]=''+FFF;//用字串儲存
        //html_文章編號2[index]=''+FFF;//用字串儲存
    });//each
    //console.log( html_文章編號 );

    //用新的文章編號 進行比對

    //遍歷
    //var html_文章編號2=html_文章編號;//淺拷貝
    //var html_文章編號2=JSON.parse(JSON.stringify( html_文章編號 ));//深拷貝

    $.each( apidata_文章編號 , function( index, item ) {
        //console.log( index, item );
        //var aa = html_文章編號.includes(item);//回傳T/F
        //var aa =$.inArray( item, html_文章編號 );
        //console.log( html_文章編號, item ,index );
        var aa =html_文章編號.indexOf( item );
        //console.log( aa );//回傳找到的index位置 //找不到會回傳-1
        if( aa == -1 ){
            //沒找到=新的 //更新
            //將api中的新資料放到html裡
            //$('div.thread').append( apidata_文章內容[item] );//prepend
            console.log( '新內容:'+ item );//
            $('.poi231230bigbox').before( apidata_文章內容[item] );//after
            poi231230更新標題();//
        }else{
            //找到位置=已經存在
            var aa2 =$.inArray( item, html_文章編號 );
            //console.log( item,html_文章編號2[aa2] );//ok
            html_文章編號.splice(aa2,1);//移除aa2位置的1個陣列元素
        }//if
    });//each

    //console.log( html_文章編號2 );
    if(html_文章編號.length >0){
        console.log( '有文章遺失' );
        console.log( html_文章編號 );
        $.each( apidata_文章編號 , function( index, item ){
            var aaa=$(".post>.post-head>.qlink:contains('"+item+"')");
            console.log( aaa );
            aaa.css({
                "background-color":"Silver",
            });//
        });
    }

    //完成
    poi231230倒數計時器2();//重複

/*
    html_文章編號.forEach(function(value,index){
        //console.log(value,index);
    });//js

*/

}//poi231230比對資料(FFF)

function poi231230更新標題(){
    //console.log( 'poi231230更新標題' );
    //紀錄新文章累積數量
    var aa1=$('.poi231230bigbox').attr('poi231230新文章累積數量');
    //console.log( aa1 );
    //
    if(aa1>0){
        aa1= parseInt(aa1) + 1;
    }else{
        aa1=1;
    }
    //console.log( aa1 );
    $('.poi231230bigbox').attr('poi231230新文章累積數量',aa1);//寫下紀錄
    //紀錄原始標題
    var aa2=$('.poi231230bigbox').attr('poi231230原始標題');
    //console.log( aa2 );
    if(aa2){//檢查是否有這個值
        //ok
    }else{
        //沒有=增加
        $('.poi231230bigbox').attr('poi231230原始標題',document.title);//寫下紀錄
        aa2=$('.poi231230bigbox').attr('poi231230原始標題');//再抓一次
    }
    //console.log( aa2 );
    document.title='('+aa1+')'+aa2;
    //$('title').text();


}




/*
舊版本
https://greasyfork.org/zh-TW/scripts/39891-?version=1139339
*/