Greasy Fork is available in English.

投后结案(定时生成报告)

云图扩展工具

// ==UserScript==
// @name         投后结案(定时生成报告)
// @namespace    http://tampermonkey.net/
// @version      0.1
// @description  云图扩展工具
// @author       siji-Xian
// @match        *://yuntu.oceanengine.com/yuntu_ng/evaluation_brand/task_list?*
// @icon         https://lf3-static.bytednsdoc.com/obj/eden-cn/prhaeh7pxvhn/yuntu/yuntu-logo_default.svg
// @grant        none
// @license      MIT
// @require      https://lf26-cdn-tos.bytecdntp.com/cdn/expire-1-M/jquery/3.2.1/jquery.min.js
// @require      https://greasyfork.org/scripts/404478-jsonexportexcel-min/code/JsonExportExcelmin.js?version=811266
// @require      https://greasyfork.org/scripts/463728-lodash-js/code/lodashjs.js?version=1174104
// @require      https://greasyfork.org/scripts/455576-qmsg/code/Qmsg.js?version=1122361
// ==/UserScript==

(function () {
    "use strict";
    var new_element = document.createElement('link');
    new_element.setAttribute('rel', 'stylesheet');
    new_element.setAttribute('href', 'https://qmsg.refrain.xyz/message.min.css');
    document.body.appendChild(new_element);

    const button = document.createElement("div");
    button.textContent = "生成报告";
    Object.assign(button.style, {
        height: "34px",
        lineHeight: "var(--line-height, 34px)",
        alignItems: "center",
        color: "white",
        background: "linear-gradient(90deg, rgba(0, 239, 253), rgba(64, 166, 254))",
        borderRadius: "5px",
        marginLeft: "10px",
        fontSize: "13px",
        padding: "0 10px",
        cursor: "pointer",
        fontWeight: "500",
    });
    button.addEventListener("click", urlClick); //监听按钮点击事件
    const getRequestOptions = {
        method: 'GET',
        redirect: 'follow'
    };

    //message.js
    let loadingMsg = null

    function appendDoc() {
        setTimeout(() => {
        var like_comment = document.querySelector('.index__btnWrapper--gvaIn');
            if (like_comment) {
                like_comment.append(button); //把按钮加入到 x 的子节点中
                return
            }
            appendDoc()
        }, 1000);
    }
    appendDoc()

    function getQueryVariable(variable) {
        var query = window.location.search.substring(1);
        var vars = query.split("&");
        for (var i = 0; i < vars.length; i++) {
          var pair = vars[i].split("=");
          if (pair[0] == variable) {
            return pair[1];
          }
        }
        return false;
      }
        
      //获取aadvid
      const aadvid = getQueryVariable("aadvid");
    
    
    async function fetchFun(url, data, requestOptions = getRequestOptions()) {
        const params = new URLSearchParams(data).toString();
        try {
          const response = await fetch(`${url}?${params}`, requestOptions);
          if (response.ok) {
            const result = await response.json();
            return result;
          } else {
            throw new Error(`Fetch failed: ${response.status}`);
          }
        } catch (error) {
          loadingMsg.close();
          Qmsg.error({
            content: `网络请求错误: ${error.message}`,
            timeout: 5000
          });
          throw error;
        }
      }

    let myHeaders = new Headers();
    myHeaders.append("authority", "yuntu.oceanengine.com");
    myHeaders.append("accept", "application/json, text/plain, */*");
    myHeaders.append("accept-language", "zh-CN,zh;q=0.9");
    myHeaders.append("content-type", "application/json");
    myHeaders.append("origin", "https://yuntu.oceanengine.com");
    myHeaders.append("referer", "https://yuntu.oceanengine.com/yuntu_ng/evaluation_brand/task_create?task_id=677363&mode=2&aadvid=1672744301182989");

    async function getList(){
        let raw = JSON.stringify({
            "main_brand_id": "1094484",
            "level_1_industry_id": 13,
            "offset": 0,
            "count": 10,
            "order_type": 1,
            "task_statuses": [
                2,
                1
            ]
        });
        let data = {
            aadvid
        }
        const postRequestOptions = {
            method: "POST",
            headers: myHeaders,
            body: raw,
            redirect: "follow",
        };
        let total = await fetchFun(
            "https://yuntu.oceanengine.com/measurement/api/eva/get_evaluation_task_list_v2",
            data,
            postRequestOptions
        );

        return total
    }

    async function getNotList(){
        let raw = JSON.stringify({
            "main_brand_id": "1094484",
            "level_1_industry_id": 13,
            "offset": 0,
            "count": 10,
            "order_type": 1,
            "task_statuses": [
                0
            ]
        });
        let data = {
            aadvid
        }
        const postRequestOptions = {
            method: "POST",
            headers: myHeaders,
            body: raw,
            redirect: "follow",
        };
        let total = await fetchFun(
            "https://yuntu.oceanengine.com/measurement/api/eva/get_evaluation_task_list_v2",
            data,
            postRequestOptions
        );

        return total
    }

    async function createdTask(task_id){
        let raw = JSON.stringify({
            "main_brand_id": "1094484",
            "level_1_industry_id": 13,
            "user_id": "99406591190",
            "staff_id": "",
            "task_id": task_id
        });
        let data = {
            aadvid
        }
        const postRequestOptions = {
            method: "POST",
            headers: myHeaders,
            body: raw,
            redirect: "follow",
        };
        let total = await fetchFun(
            "https://yuntu.oceanengine.com/measurement/api/eva/start_calculate_evaluation_task",
            data,
            postRequestOptions
        );

        return total
    }

    async function urlClick() {
        loadingMsg = Qmsg.loading("任务开启成功~");
        let interval = setInterval(async () => {
            let notList = await getNotList()
            if (notList?.data?.task_list?.length > 1) {
                let res = await getList()
                if (res?.code===0 && res?.data?.task_list?.length<=5) {
                    createdTask(notList?.data?.task_list[1]?.task_id)
                }
            }else{
                clearInterval(interval)
            }
        }, 60000);
    }
})();