ACGN-stock營利統計外掛

try to take over the world!

目前為 2017-10-01 提交的版本,檢視 最新版本

// ==UserScript==
// @name         ACGN-stock營利統計外掛
// @namespace    http://tampermonkey.net/
// @version      2.101
// @description  try to take over the world!
// @author       SoftwareSing
// @match        http://acgn-stock.com/*
// @match        https://acgn-stock.com/*
// @grant        none
// ==/UserScript==

//版本號為'主要版本號 + "." + 次要版本號 + 錯誤修正版本號(兩位),ex 1.801
//修復導致功能失效的錯誤或更新重大功能提升主要或次要版本號
//優化UI,優化效能,優化小錯誤更新錯誤版本號
//兩個錯誤修正版本號防止迫不得已進位到次要版本號
//本腳本修改自 "ACGN股票系統每股營利外掛 2.200 by papago89"

var wasCompany, wasStockSummary, wasaccountInfo, wasfoundationPlan, oldUrl;

// 程式進入點
(function mainfunction() {
    //設定狀態
    wasCompany = (document.location.href.search(/company\/detail/) != -1);
    wasStockSummary = (document.location.href.search(/company\/[0-9]+/) != -1);
    //wasAccountInfo = (document.location.href.search(/accountInfo/) != -1);
    //wasFoundationPlan = document.location.href.search(/foundation/) != -1;
    oldUrl = document.location.href;
    //針對現在的頁面做反應
    if (wasCompany)
    {
        setTimeout(addCompanyClickListener, 1000);
    }
    else if (wasStockSummary)
    {
        //setTimeout(computeProfit, 1000);
        setTimeout(addStockSummaryListener, 1000);
    }
    /*else if (wasaccountInfo)
    {
        setTimeout(AddTaxListener, 1000);
        setTimeout(addShowSubscribesListener,1000);
    }
    else if (wasfoundationPlan)
        setTimeout(addFPEvent, 1000);*/

    //全域事件
    setTimeout(addEvent, 5000);
    checkDividendUpdataTime();
    setTimeout(checkScriptEvent, 500);

})();

//Header新增按鈕並監聽 -----已刪除


// 監測main的變化並判斷當前屬於哪個頁面加入正確的事件監聽
function addEvent()
{
    $('#main').bind("DOMNodeInserted DOMNodeRemoved", function() {
        // 因AJAX動態生成不斷執行,所以有時候main的變動並不代表換頁,此時無須重新加入事件
        if(oldUrl != document.location.href && document.location.href.search(/company\/detail/) != -1)
        {
            setTimeout(addCompanyClickListener, 1000);
        }
        else if(oldUrl != document.location.href && document.location.href.search(/company\/[0-9]+/) != -1)
        {
            //setTimeout(computeProfit, 1000);
            setTimeout(addStockSummaryListener, 1000);
        }
        /*else if(oldUrl != document.location.href && document.location.href.search(/accountInfo/) != -1)
        {
            setTimeout(AddTaxListener, 1000);
            setTimeout(addShowSubscribesListener,1000);
        }
        else if(oldUrl != document.location.href && document.location.href.search(/foundation/) != -1)
            setTimeout(addFPEvent, 1000);*/
        wasCompany = (document.location.href.search(/company\/detail/) != -1);
        wasStockSummary = (document.location.href.search(/company\/[0-9]+/) != -1);
        //wasAccountInfo = (document.location.href.search(/accountInfo/) != -1);
        //wasFoundationPlan = document.location.href.search(/foundation/) != -1;
        oldUrl = document.location.href;
    });
}


function get_abcd1357_JsonObj()
{
    var request = new XMLHttpRequest();
    request.open("GET", "https://jsonbin.org/abcd1357/ACGNstock-company", false); // 連線 POST到該連線位址
    request.send();
    abcd1357_jsonObj = JSON.parse(request.responseText);
}

function checkDividendUpdataTime()
{
    get_abcd1357_JsonObj();
    //window.localStorage.removeItem ("Dividend_UpdataTime");

    var Dividend_UpdataTime = null !== window.localStorage.getItem ("Dividend_UpdataTime") ? JSON.parse(window.localStorage.getItem ("Dividend_UpdataTime")) : null;
    if (abcd1357_jsonObj.updataTime === Dividend_UpdataTime)
    {
        console.log("dont need updata    " + Dividend_UpdataTime);
    }
    else
    {
        console.log("server updata time:  " + abcd1357_jsonObj.updataTime);
        console.log("local updata time:  " + Dividend_UpdataTime);
        console.log("start updata data");
        updataDividendData();
    }
}

function updataDividendData()
{
    get_abcd1357_JsonObj();
    var Dividends = [];
    //console.log(abcd1357_jsonObj.companys[0].companyID);
    //console.log(abcd1357_jsonObj.companys[0].companyDividend);
    for (var n in abcd1357_jsonObj.companys)
    {
        Dividends.push({"companyID": String(abcd1357_jsonObj.companys[n].companyID), "companyDividend": String(abcd1357_jsonObj.companys[n].companyDividend)});
        //console.log("push success");
    }
    window.localStorage.setItem ("Dividend", JSON.stringify(Dividends));
    window.localStorage.setItem ("Dividend_UpdataTime", JSON.stringify(abcd1357_jsonObj.updataTime));
    console.log("Dividend Cookie Updata Success!!");
}



/************UpdateScript*************/
function checkScriptEvent()
{
    var myVersion = GM_info.script.version;
    var oReq = new XMLHttpRequest();
    oReq.addEventListener("load", checkScriptVersion);
    oReq.open("GET", "https://gf.qytechs.cn/scripts/33542.json");
    oReq.send();
}

function checkScriptVersion()
{
    var obj = JSON.parse(this.responseText);
    var myVersion = GM_info.script.version;
    //console.log(obj.version.substr(0, 3) + "," + myVersion.substr(0, 3) + "," + (obj.version.substr(0, 3) > myVersion.substr(0, 3)));
    if(obj.version.substr(0, 3) > myVersion.substr(0, 3))
        $('<li class="nav-item"><a class="nav-link btn btn-primary" href="https://gf.qytechs.cn/zh-TW/scripts/33542" id="UpdateDividendScript" target="Blank">' + Dict[lan].updateDividendScript + '</a></li>').insertAfter($('.nav-item')[$('.nav-item').length - 1]);
    else
		setTimeout(checkScriptEvent, 600000);
}
/************UpdateScript*************/
/************stockSummary*************/
function addStockSummaryListener() {
    setTimeout(computeProfit, 2100);
    $(".btn.btn-secondary.mr-1")[0].addEventListener("click", ComputeEvt);
    $(".btn.btn-secondary.mr-1")[1].addEventListener("click", ComputeEvt);

    var pagesbtn = $(".page-item");
    for (var i = 0; i < pagesbtn.length; i++) {
        pagesbtn[i].addEventListener("click", ComputeEvt);
    }
    console.log("Triggered StockSummary");
}

function ComputeEvt() {
    setTimeout(addStockSummaryListener, 2000);
}

//總獲利計算--加入分紅計算
function computeProfit() {
    //加入變數 profit為總獲利, ID是公司網址, earnPerShare是每股獲利
    var profit = 0,
        tag, price, hold, classProfit, ID, earnPerShare, index;
    var Dividends = null !== window.localStorage.getItem ("Dividend") ? JSON.parse(window.localStorage.getItem ("Dividend")) : [];

    //方格模式
    if ($(".col-12.col-md-6.col-lg-4.col-xl-3").length > 0)
    {
        for (var i = 0; i < $('.company-card').length; ++i)
        {
            price = Number($('.company-card')[i].innerText.match(/\$ [0-9]+\(([0-9]+)\)/)[1]);
            hold = Number($('.company-card')[i].innerText.match(/([0-9]+).+%.+/)[1]);

            ID = $('.company-card')[i].innerHTML.match(/<a href="\/company\/detail\/([0-z]+)">/)[1];
            console.log("companyID = " + ID);

            index = Dividends.findIndex(x => x.companyID == ID);
            if (index == -1)
            {
                earnPerShare = 0;
            }
            else
            {
                earnPerShare = Dividends[index].companyDividend;
                profit += earnPerShare * hold;
            }
            //console.log("companyID = " + ID);
            console.log("earnPerShare = " + earnPerShare);
            console.log("");
        }
        console.log("本頁預計分紅: " + profit);

        classProfit = $("#totalProfitNumber");
        if (classProfit.length === 0)
        {
            $('<div class="media company-summary-item border-grid-body" id = "totalProfit"><div class="col-6 text-right border-grid" id = "totalProfitTitle"><h2>' + Dict[lan].totalProfitInThisPage + '</h2></div></div>').insertAfter($('.card-title.mb-1')[0]);
            $('<div class="col-6 text-right border-grid" id = "totalProfitNumber"><h2>$ ' + profit.toFixed() + '</h2></div>').insertAfter($('#totalProfitTitle')[0]);
        }
        else
        {
            $("#totalProfitNumber")[0].innerHTML = "<h2>$ " + profit.toFixed() + "</h2>";
        }

    }
    /*else
    { //列表模式
     //列表模式暫不開放
        //console.log($(".col-8.col-lg-3.text-right.border-grid"));
        for (var j = 0; j < $('.media-body.row.border-grid-body').length; ++j) {
            price = Number($('.media-body.row.border-grid-body')[j].innerText.match(/\$ [0-9]+\(([0-9]+)\)/)[1]);
            hold = Number($('.media-body.row.border-grid-body')[j].innerText.match(/您在該公司持有([0-9]+)數量的股份/)[1]); // 找出持股量
            console.log("價= " + price + ",持= " + hold + ",總= " + (price * hold) );
            assets += price * hold;
        }
        console.log("本頁持股價值: " + assets);
        classAssets = $("#totalAssetsNumber");
        if (classAssets.length === 0) {
            $('<div class="media company-summary-item border-grid-body" id = "totalAssets"><div class="col-6 text-right border-grid" id = "totalAssetsTitle"><h2>' + Dict[lan].totalAssetsInThisPage + '</h2></div></div>').insertAfter($('.card-title.mb-1')[0]);
            $('<div class="col-6 text-right border-grid" id = "totalAssetsNumber"><h2>$ ' + assets + '</h2></div>').insertAfter($('#totalAssetsTitle')[0]);
        } else {
            $("#totalAssetsNumber")[0].innerHTML = "<h2>$ " + assets + "</h2>";
        }
    }*/
    //setTimeout(computeAssets,1000);
}



/************stockSummary*************/
/*************************************/
/**************company****************/

//---------------按鍵區---------------//
function addCompanyClickListener() {

    if ($('.d-block.h4').length === 6) {
        // 初始化 先看使用者有沒有預設打開資料夾
        folderOpenString = "fa-folder-open";
        folderCloseString = "12345678";
        //chartEvent();
        numbersEvent();
        //orderEvent();
        //productEvent();
        //directorEvent();
        //logEvent();
        folderOpenString = "fa-folder";
        folderCloseString = "fa-folder-open";

        // 註冊事件
        //$('.d-block.h4')[0].addEventListener("click", chartEvent); //股價趨勢
        $('.d-block.h4')[1].addEventListener("click", numbersEvent); //數據資訊
        //$('.d-block.h4')[2].addEventListener("click", orderEvent); //交易訂單
        //$('.d-block.h4')[3].addEventListener("click", productEvent); //產品中心
        //$('.d-block.h4')[4].addEventListener("click", directorEvent); //董事會
        //$('.d-block.h4')[5].addEventListener("click", logEvent); //所有紀錄
        console.log("OnclickListener Registered");
    } else {
        setTimeout(addCompanyClickListener, 500);
    }
    console.log("Triggered Company");

}

var folderOpenString, folderCloseString;
// 數據資訊
function numbersEvent() {
    var folderstate = $(".d-block.h4 i")[1].classList[1];
    if (folderstate === folderOpenString) {
        //Open Event
        console.log("Open numbersfolder");
        //setTimeout(addSomeInfo, 1000);
        setTimeout(AddDividendCookie, 1000);    //總獲利計算--紀錄分紅

    } else if (folderstate === folderCloseString) {
        //Close Event
        console.log("close numbersfolder");
    }
}

//總獲利計算--紀錄分紅cookie 09/27
function AddDividendCookie()
{
    //window.localStorage.removeItem ("Dividend");

    var revenue, totalStock, earnPerShare, ID;
    revenue = $('.col-8.col-md-4.col-lg-2.text-right.border-grid')[3].innerHTML.match(/[0-9]+/);
    totalStock = $('.col-8.col-md-4.col-lg-2.text-right.border-grid')[4].innerHTML.match(/[0-9]+/);
    earnPerShare = 0.8075 * revenue / totalStock;
    //name = $('.card-title.text-truncate')[0].innerText;
    ID = document.location.href.substr(38,99);

    var Dividends = null !== window.localStorage.getItem ("Dividend") ? JSON.parse(window.localStorage.getItem ("Dividend")) : [];

    //如果先前紀錄過該公司,則刪除重記
    var index = Dividends.findIndex(x => x.companyID == ID);
    if (index != -1)
    {
        if (Dividends[index].companyDividend == earnPerShare)
        {
            console.log(ID + "---" + earnPerShare);
            console.log("dont need updata cookie");
        }
        else
        {
            Dividends.splice(index, 1);
            console.log("AddDividendCookie---splice");

            Dividends.push({"companyID":ID, "companyDividend":earnPerShare});
            window.localStorage.setItem ("Dividend", JSON.stringify(Dividends));

            console.log(ID + "---" + earnPerShare);
            console.log("Add Dividend Cookie!!");
        }
    }
    else
    {
        Dividends.push({"companyID":ID, "companyDividend":earnPerShare});
        window.localStorage.setItem ("Dividend", JSON.stringify(Dividends));

        console.log(ID + "---" + earnPerShare);
        console.log("AddDividendCookie!!");
    }
}


/**************company****************/
/*************************************/
/************accountInfo**************/
// -----已刪除
/************accountInfo**************/

/*************************************/

/************foundationPlan***********/
//-----已刪除
/************foundationPlan***********/
/**************aboutMe****************/
// -----已刪除
/**************aboutMe****************/
/*************Language***************/

var lan =  "";
lan = null !== window.localStorage.getItem ("PM_language") ? window.localStorage.getItem ("PM_language") : "tw";
/*function ChangeLanguage(l){
    if(lan === l)return;
    lan = l;
    window.localStorage.setItem ("PM_language",l);
    window.location.reload();
}*/
var Dict = {
    tw:
    {
        totalProfitInThisPage: "本頁預計分紅:",
        updateDividendScript: "更新預估分紅腳本",
    },
    en:
    {
        totalProfitInThisPage: "Total profit in this page :",
        updateDividendScript: "Update Dividend Script",
    },
    jp:
    {
        totalProfitInThisPage: "本頁預計分紅:",
        updateDividendScript: "更新預估分紅腳本",
    },
    marstw:
    {
        totalProfitInThisPage: "這ㄘ可yee拿ㄉ$$:",
        updateDividendScript: "有★版",
    }
};
/*************Language***************/
/*************Subscribe***************/
// -----已刪除
/*************Subscribe***************/

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址