Logo Modelo BetApi
Ontem Hoje Amanhã Classificações
Todos (0) Ao Vivo (0) Finalizados (0) Agendados (0)
Erro na API: ["JSON Error: Syntax error | Body: Parked Domain "] <p>Isso pode ocorrer se a chave da API for inválida ou o limite de requisições diárias for atingido.</p> </div> <!-- Lista Unificada de Jogos --> </div> <!-- Script para carregar Odds via AJAX --> <script> document.addEventListener('DOMContentLoaded', function() { loadOddsByLeague(); }); async function loadOddsByLeague() { // Pega todas as ligas listadas na tela const leagues = document.querySelectorAll('.league-games'); // Processa uma liga por vez (Sequencial) for (const league of leagues) { const containers = league.querySelectorAll('.odds-container'); // Filtra apenas os que ainda têm placeholder (não carregados pelo PHP) const ids = Array.from(containers) .filter(c => c.querySelector('.odd-box-placeholder')) .map(c => c.dataset.fixtureId); if (ids.length > 0) { // Aguarda essa liga terminar antes de ir para a próxima ("vai caçando uma por uma") await fetchOdds(ids); } } } function fetchOdds(ids) { // Retorna a Promise para que o await funcione return fetch('ajax/fetch_odds.php', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ date: '2026-01-18', ids: ids }) }) .then(response => { if (!response.ok) throw new Error('Erro na rede'); return response.json(); }) .then(data => { const foundIds = new Set(); if (data.response) { data.response.forEach(game => { const fixtureId = game.fixture.id; foundIds.add(String(fixtureId)); // Marca como encontrado const container = document.querySelector(`.odds-container[data-fixture-id="${fixtureId}"]`); if (!container) return; // Pega as odds do primeiro bookmaker let bets = null; if (game.bookmakers && game.bookmakers.length > 0 && game.bookmakers[0].bets && game.bookmakers[0].bets.length > 0) { bets = game.bookmakers[0].bets[0].values; } if (bets && bets.length >= 3) { const homeOdd = bets.find(b => b.value === 'Home')?.odd || '-'; const drawOdd = bets.find(b => b.value === 'Draw')?.odd || '-'; const awayOdd = bets.find(b => b.value === 'Away')?.odd || '-'; // Pega nomes dos times para o cupom let teamHome = 'Casa'; let teamAway = 'Fora'; try { const card = container.closest('.game-card'); teamHome = card.querySelector('.team:first-child .team-name').textContent.trim(); teamAway = card.querySelector('.team:last-child .team-name').textContent.trim(); } catch(e) {} // Sanitiza strings para evitar quebra de HTML (aspas) const safeHome = teamHome.replace(/"/g, '"'); const safeAway = teamAway.replace(/"/g, '"'); const safeGameName = `${safeHome} x ${safeAway}`; container.innerHTML = ` <div class="odd-box" data-fixture-id="${fixtureId}" data-game="${safeGameName}" data-selection="${safeHome}" data-odd="${homeOdd}" data-market="Vencedor" data-sport="football"> <div class="odd-label">1</div><div class="odd-value">${homeOdd}</div> </div> <div class="odd-box" data-fixture-id="${fixtureId}" data-game="${safeGameName}" data-selection="Empate" data-odd="${drawOdd}" data-market="Vencedor" data-sport="football"> <div class="odd-label">X</div><div class="odd-value">${drawOdd}</div> </div> <div class="odd-box" data-fixture-id="${fixtureId}" data-game="${safeGameName}" data-selection="${safeAway}" data-odd="${awayOdd}" data-market="Vencedor" data-sport="football"> <div class="odd-label">2</div><div class="odd-value">${awayOdd}</div> </div> `; } else { container.innerHTML = '<div style="font-size:0.8rem; color:#666;">Odds indisponíveis</div>'; } }); } // Limpa os placeholders dos jogos que NÃO retornaram dados (para não ficar carregando infinito) ids.forEach(id => { if (!foundIds.has(String(id))) { const container = document.querySelector(`.odds-container[data-fixture-id="${id}"]`); if (container) container.innerHTML = '<div style="font-size:0.8rem; color:#666;">-</div>'; } }); }) .catch(err => { console.error('Erro ao buscar odds:', err); // Em caso de erro geral, limpa tudo ids.forEach(id => { const container = document.querySelector(`.odds-container[data-fixture-id="${id}"]`); if (container) container.innerHTML = '<div style="font-size:0.8rem; color:#666;">Erro</div>'; }); }); } </script> <!-- Popup Secundário (Roleta) --> <style> .bottom-nav { position: fixed; bottom: 0; left: 0; width: 100%; background-color: var(--card-color); display: flex; justify-content: space-around; padding: 12px 0; box-shadow: 0 -2px 10px rgba(0,0,0,0.3); z-index: 999; border-top: 1px solid rgba(255,255,255,0.05); } .nav-item { display: flex; flex-direction: column; align-items: center; color: var(--text-color-secondary); font-size: 0.8rem; gap: 5px; flex: 1; text-align: center; transition: color 0.3s; } .nav-item.active { color: var(--primary-color); } .nav-item i { font-size: 1.3rem; margin-bottom: 2px; } </style> <nav class="bottom-nav"> <a href="https://sorte-pix.fun/index.php" class="nav-item active"> <i class="fa-solid fa-house"></i> <span>Início</span> </a> <a href="https://sorte-pix.fun/leagues.php" class="nav-item "> <i class="fa-solid fa-trophy"></i> <span>Ligas</span> </a> </nav> </body> </html>