新球体育网亚盘统计

新球体育网(球探)手机端网页,在对赛往绩和近期战绩点击输赢直接跳转到让球页面,让球水位高亮显示,并加入多场比赛的让球命中率统计功能。

当前为 2025-03-19 提交的版本,查看 最新版本

// ==UserScript==
// @name         新球体育网亚盘统计
// @namespace    http://dol.freevar.com/
// @version      0.8
// @description  新球体育网(球探)手机端网页,在对赛往绩和近期战绩点击输赢直接跳转到让球页面,让球水位高亮显示,并加入多场比赛的让球命中率统计功能。
// @author       Dolphin
// @run-at       document-idle
// @match        https://m.titan007.com/analy/Analysis/*
// @match        https://m.titan007.com/asian/*
// @grant        GM_addStyle
// @license      MIT
// ==/UserScript==

(function() {
    'use strict';

    // 样式定义
    GM_addStyle(`
        .stats-table {border-collapse: collapse;
                      margin:auto;
                      width:80%;}
        .stats-table td, .stats-table th {
            border-bottom: 1px solid #ccf;
            text-align: center;
        }
        .highlight-green { background-color: #cfc; }
        .highlight-red { background-color: #fcc; }
        #calcStats { background-color: #cfc; padding: 5px 15px; border-radius:8px;}
        #showStats { background-color: #ccf; padding: 5px 15px; border-radius:8px;}
        #clearStats { background-color: #fcc; padding: 5px 15px; border-radius:8px;}
    `);

    // 解析让球数
    function parseHandicap(text) {
        if(text === '-') return null;
        let value = 0;
        if(text.startsWith('-')) {
            text = text.substring(1);
            value = -parseFloat(text.split('/')[0]) - 0.25;
        } else {
            const parts = text.split('/');
            value = parseFloat(parts[0]) + (parts[1] ? 0.25 : 0);
        }
        return value;
    }

    // 判断是否命中
    function checkHit(scoreDiff, handicap, homeValue, awayValue) {
        homeValue = parseFloat(homeValue);
        awayValue = parseFloat(awayValue);
        handicap = parseHandicap(handicap);

        if(scoreDiff === handicap) return true;
        if(scoreDiff > handicap && homeValue < awayValue) return true;
        if(scoreDiff < handicap && awayValue < homeValue) return true;
        return false;
    }

    // 插入控制按钮
    function insertControlButtons() {
        const contentdiv = document.getElementById('content');
        if(!contentdiv) return;

        const buttons = document.createElement('div');
        buttons.style.textAlign= 'center';
        buttons.innerHTML= `<button class="control-btn" id="calcStats">统计</button>
        <button class="control-btn" id="showStats">显示</button>
        <button class="control-btn" id="clearStats">清除</button>`;

        contentdiv.appendChild(buttons);

        // 绑定事件
        document.getElementById('showStats').addEventListener('click', handleShow);
        document.getElementById('calcStats').addEventListener('click', handleCalc);
        document.getElementById('clearStats').addEventListener('click', handleClear);
    }

    // 显示处理
    function handleShow() {
        // 清除现有高亮
        document.querySelectorAll('.oddsdata span').forEach(span => {
            span.classList.remove('highlight-green', 'highlight-red');
        });

        // 处理初始和即时数据
        document.querySelectorAll('#oddsData > div').forEach(row => {
            const [initial, instant] = row.querySelectorAll('.oddsdata');
            processCell(initial);
            processCell(instant);
        });

        // 显示统计结果
        showStatistics();
    }

    function processCell(cell) {
        if(!cell) return;
        const spans = cell.querySelectorAll('span');
        if(spans.length < 3) return;

        const home = parseFloat(spans[0].textContent);
        const away = parseFloat(spans[2].textContent);

        if(isNaN(home) || isNaN(away)) return;

        if(home < away) {
            spans[0].classList.add('highlight-green');
            spans[2].classList.add('highlight-red');
        } else if(home > away) {
            spans[0].classList.add('highlight-red');
            spans[2].classList.add('highlight-green');
        }
    }

    // 统计处理
    function handleCalc() {
        const scoreDiff = getScoreDifference();
        const stats = JSON.parse(localStorage.getItem('asianStats')) || {};

document.querySelectorAll('#oddsCompany > .CBtn').forEach(company => {
    const cid = company.id.split('_')[1];
    const dataRow = document.querySelector(
        `#oddsData > div:nth-child(${Array.from(company.parentNode.children).indexOf(company) + 1})`
    );

    if(!dataRow) return;

    const [initialData, instantData] = dataRow.querySelectorAll('.oddsdata');

    // 处理初始数据(总是有效)
    updateStats(stats, cid, 'initial', initialData, scoreDiff);

    // 处理即时数据
    if(instantData) {
        const spans = instantData.querySelectorAll('span');
        const isValid = !Array.from(spans).every(span =>
            span.textContent.trim() === '-'
        );

        if(isValid) {
            updateStats(stats, cid, 'instant', instantData, scoreDiff);
        }
    }
});

        localStorage.setItem('asianStats', JSON.stringify(stats));
        if(Object.values(stats).every(c => c.initial.hits === 0 && c.instant.hits === 0)) {
            alert('本轮统计没有公司命中!');
        }
    }

    function updateStats(stats, cid, type, data, scoreDiff) {
        const spans = data.querySelectorAll('span');
        if(spans.length < 3) return;

        const company = stats[cid] = stats[cid] || {
            initial: { count: 0, hits: 0 },
            instant: { count: 0, hits: 0 }
        };

        company[type].count++;
        if(checkHit(scoreDiff, spans[1].textContent, spans[0].textContent, spans[2].textContent)) {
            company[type].hits++;
        }
    }

    // 显示统计结果
    function showStatistics() {
        const stats = JSON.parse(localStorage.getItem('asianStats')) || {};
        const table = document.createElement('table');
        table.className = 'stats-table';

        // 创建表头
        const header = '<tr><th>公司</th><th>开盘数</th><th>命中数</th><th>命中率</th>'
                     + '<th>开盘数</th><th>命中数</th><th>命中率</th></tr>';
        table.innerHTML = header;

        // 填充数据
        Object.entries(stats).forEach(([cid, data]) => {
            const row = document.createElement('tr');
            row.innerHTML = `
                <td>${getCompanyName(cid)}</td>
                <td>${data.initial.count}</td>
                <td>${data.initial.hits}</td>
                <td>${(data.initial.hits / data.initial.count * 100 || 0).toFixed(1)}%</td>
                <td>${data.instant.count}</td>
                <td>${data.instant.hits}</td>
                <td>${(data.instant.hits / data.instant.count * 100 || 0).toFixed(1)}%</td>
            `;
            table.appendChild(row);
        });

        // 插入页面
        const existingTable = document.querySelector('.stats-table');
        if(existingTable) existingTable.remove();
        document.getElementById('oddsBox').after(table);
    }

    // 辅助函数
    function getScoreDifference() {
        const home = parseInt(document.getElementById('homeScore').textContent);
        const away = parseInt(document.getElementById('guestScore').textContent);
        return home - away;
    }

    function getCompanyName(cid) {
        const element = document.querySelector(`#main_${cid}_0 .companyName`);
        return element ? element.textContent : `公司${cid}`;
    }

    function handleClear() {
        localStorage.removeItem('asianStats');
        document.querySelector('.stats-table')?.remove();
        alert('已清除所有统计数据');
    }

    // 初始化
    if(location.href.startsWith('https://m.titan007.com/asian/')) {
        insertControlButtons();
    }else if(location.href.startsWith('https://m.titan007.com/analy/Analysis/')){
    // 提取参数并绑定点击事件
    function bindClicks() {
        // 选择所有包含 GoAnalyUrl(数字) 的 tr 元素
        const targetTrs = document.querySelectorAll('tr[onclick*="GoAnalyUrl("]');

        targetTrs.forEach(tr => {
            // 提取 onclick 中的数字参数
            const onClickAttr = tr.getAttribute('onclick');
            const paramMatch = onClickAttr.match(/GoAnalyUrl\((\d+)\)/);
            if (!paramMatch) return;

            const id = paramMatch[1]; // 提取 ID

            // 获取第五个 td(索引从 0 开始)
            const tds = tr.querySelectorAll('td');
            if (tds.length < 5) return;

            const fifthTd = tds[4];

            // 防止重复绑定
            if (fifthTd._hasClickHandler) return;
            fifthTd._hasClickHandler = true;

            // 添加点击事件
            fifthTd.addEventListener('click', (e) => {
                e.preventDefault();
                e.stopPropagation(); // 阻止冒泡触发 tr 的点击事件
                window.open(`https://m.titan007.com/asian/${id}.htm`, '_blank');
            });
        });
    }
        setTimeout(bindClicks,2000);
    }
})();

QingJ © 2025

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