🌹 Happy Valentine's Day from FoodsUse! ❤️ Wishing you love and new opportunities today.
Wednesday, April 1, 2026
Breaking
FoodsUse LiveScores Live Match Data
⚽ Real-Time Sports

FoodsUse LiveScores

Football · Basketball · Tennis · Handball — Auto-refreshes every 60s

Live Now
Today
4Sports
Connecting…
🔄 Loading…

Connecting to live data…

Fan Chat
'); return; } proxyCall('apifootball','fixtures/statistics',{fixture:fid}, function(r){ var res=r.response||r; if(!Array.isArray(res)||res.length<2){ $p.html('

Stats not yet available.

'); return; } var h=res[0],a=res[1],sm={}; h.statistics.forEach(function(s){ sm[s.type]={h:s.value||0}; }); a.statistics.forEach(function(s){ if(sm[s.type]) sm[s.type].a=s.value||0; else sm[s.type]={h:0,a:s.value||0}; }); var hp='50',ap='50'; if(sm['Ball Possession']){ hp=String(sm['Ball Possession'].h||'50').replace('%',''); ap=String(sm['Ball Possession'].a||'50').replace('%',''); } var out='
' +'
'+esc(h.team.name)+' '+hp+'%Possession'+ap+'% '+esc(a.team.name)+'
' +'
' +'
'; ['Total Shots','Shots on Goal','Corner Kicks','Fouls','Yellow Cards','Red Cards'].forEach(function(k){ if(!sm[k]) return; out+='
'+sm[k].h+'
'+k+'
'+sm[k].a+'
'; }); out+='
'; $p.html(out); }, function(){ $p.html('

Stats unavailable.

'); } ); }; /* ── Toggle league ── */ window.futpToggleLeague=function(hd){ var $b=$(hd).next('.futp-league-body'); $b.toggle(); $(hd).find('.futp-lg-arr').text($b.is(':visible')?'▼':'▶'); }; /* ── Fan Chat — server-side, persists 48 hours ── */ window.futpOpenChat=function(fid,title){ activeFID=fid; $('#futp-chat-title').text('💬 '+title); $('#futp-chat-msgs').html('
Loading chat…
'); $('#futp-chat-drawer').addClass('futp-chat-open'); $('#futp-chat-overlay').fadeIn(200); // Load existing messages from server $.post(ajaxUrl,{action:'futp_chat_load',fid:fid},function(r){ if(r&&r.success&&r.msgs) renderChat(r.msgs); else renderChat([]); setTimeout(function(){ $('#futp-chat-msg').focus(); },200); }); }; window.futpCloseChat=function(){ $('#futp-chat-drawer').removeClass('futp-chat-open'); $('#futp-chat-overlay').fadeOut(200); }; function renderChat(msgs){ var $list=$('#futp-chat-msgs'); if(!msgs||!msgs.length){ $list.html('
No comments yet — be the first! 👋
'); return; } var html=''; msgs.forEach(function(m){ html+='
' +''+esc(m.name)+'' +''+esc(m.time)+'' +'
'+esc(m.msg)+'
' +'
'; }); $list.html(html); $list.scrollTop($list[0].scrollHeight); } window.futpSendMsg=function(){ var name=$.trim($('#futp-chat-name').val()); var msg= $.trim($('#futp-chat-msg').val()); if(!name){ $('#futp-chat-name').css('border-color','#c8102e').focus(); setTimeout(function(){ $('#futp-chat-name').css('border-color',''); },1500); return; } if(!msg) return; var $btn=$('.futp-chat-send'); $btn.prop('disabled',true).text('Sending…'); $.post(ajaxUrl,{action:'futp_chat_save',fid:activeFID,name:name,msg:msg},function(r){ $btn.prop('disabled',false).text('Send'); if(r&&r.success){ $('#futp-chat-msg').val(''); // Reload chat after sending $.post(ajaxUrl,{action:'futp_chat_load',fid:activeFID},function(r2){ if(r2&&r2.msgs) renderChat(r2.msgs); // Update button chat count var cnt=r2&&r2.msgs?r2.msgs.length:0; $('#futp-chat-btn-'+activeFID).text('💬 Fan Chat ('+cnt+')'); }); } }); }; $(document).on('keypress','#futp-chat-msg',function(e){ if(e.which===13) window.futpSendMsg(); }); /* ── NBA ── */ function loadNBA(){ proxyCall('nba','games',{date:dt(dayOff)}, function(r){ var res=r.response||r; if(!Array.isArray(res)||!res.length){ $('#futp-matches').html('
No NBA games today.
'); return; } var html='
🏀NBA — Today'+res.length+'
'; res.forEach(function(g){ var hs=g.scores.home.points||'', as=g.scores.visitors.points||''; var isL=(g.status.short===2), isFT=(g.status.short===3); var td=isL?('Q'+g.periods.current):isFT?'FT':(g.date.start||'').substr(11,5); html+=buildRow('nba_'+g.id,g.teams.home.name,g.teams.visitors.name,(hs||as)?(hs+' – '+as):'vs',td,isL,isFT,hs,as,'',''); }); html+='
'; $('#futp-matches').html(html); }, function(){ $('#futp-matches').html('
NBA data unavailable.
'); } ); } /* ── Provider: SoccerDataAPI ── */ function loadViaSoccerDataAPI(p){ var date = dt(dayOff); // SoccerDataAPI correct endpoint: v1/matches/?date=YYYY-MM-DD proxyCall( p.slug, 'v1/matches/', {date_after: date, date_before: date}, function(r){ loadTry=0; console.log('[FoodsUse] SoccerDataAPI raw response:', r ? JSON.stringify(r).substr(0,200) : 'null'); // SoccerDataAPI returns { count, next, previous, results: [...] } var matches = []; if(r && Array.isArray(r.results)) matches = r.results; else if(r && Array.isArray(r.data)) matches = r.data; else if(r && Array.isArray(r.matches)) matches = r.matches; else if(Array.isArray(r)) matches = r; if(!matches.length){ console.log('[FoodsUse] SoccerDataAPI: no matches, falling through'); markFailed(p,'nodata'); loadFootball(); return; } var byLeague={}, liveN=0, totalN=0; matches.forEach(function(m){ var lg = (m.competition&&m.competition.name)||(m.league&&m.league.name)||'Other'; if(!byLeague[lg]) byLeague[lg]={name:lg, flag:lgEmoji(lg), fx:[]}; byLeague[lg].fx.push(m); totalN++; var st=(m.status||'').toLowerCase(); if(st==='live'||st==='in_play'||st==='1h'||st==='2h'||st==='ht') liveN++; }); $('#ls-live-n').text(liveN); $('#ls-total-n').text(totalN); $('#ls-refresh').text('🔄 '+ts()+' · SoccerDataAPI'); var html=''; Object.keys(byLeague).forEach(function(lgName){ var lg=byLeague[lgName]; html+='
'+ ''+lg.flag+''+esc(lg.name)+''+ ''+lg.fx.length+'
'+ '
'; lg.fx.forEach(function(f){ var home=(f.home_team&&f.home_team.name)||(f.homeTeam&&f.homeTeam.name)||'Home'; var away=(f.away_team&&f.away_team.name)||(f.awayTeam&&f.awayTeam.name)||'Away'; var hg=(f.score&&f.score.home!=null)?f.score.home:(f.home_score!=null?f.home_score:''); var ag=(f.score&&f.score.away!=null)?f.score.away:(f.away_score!=null?f.away_score:''); var st=(f.status||'').toLowerCase(); var isLive=(st==='live'||st==='in_play'||st==='1h'||st==='2h'||st==='ht'); var isFT =(st==='finished'||st==='ft'||st==='full_time'); var time =f.utc_date||f.time||f.kickoff||''; if(time && time.length>10) time=new Date(time).toLocaleTimeString([],{hour:'2-digit',minute:'2-digit'}); var tDisp =isLive?(f.minute||st):isFT?'FT':time; var score =(hg!==''&&hg!=null&&ag!==''&&ag!=null)?(hg+' – '+ag):'vs'; html+=buildRow('sda_'+(f.id||f.match_id||Math.random()),home,away,score,tDisp,isLive,isFT,hg,ag,'',''); }); html+='
'; }); if(!html) html='
No matches found.
'; $('#futp-matches').html(html); loadSidebar_always(); }, function(msg, code){ console.warn('[FoodsUse] SoccerDataAPI failed:', msg, code); markFailed(p,'error'); loadFootball(); } ); } /* ── Sidebars — always use apifootball for PL data regardless of match provider ── */ function loadSidebar_always(){ // Top scorers proxyCall('apifootball','players/topscorers',{league:'39',season:'2025'}, function(r){ var res=r.response||r; if(!Array.isArray(res)||!res.length){ $('#w-scorers').html('
No scorer data yet.
'); return; } var h=''; res.slice(0,8).forEach(function(pp,i){ h+='
' +''+(i+1)+'' +(pp.player&&pp.player.photo?'':'') +'
' +'
'+esc(pp.player?pp.player.name:'—')+'
' +'
'+esc(pp.statistics&&pp.statistics[0]?pp.statistics[0].team.name:'')+'
' +'
' +'
'+(pp.statistics&&pp.statistics[0]?pp.statistics[0].goals.total:0)+' goals
' +'
'; }); $('#w-scorers').html(h); }, function(){ $('#w-scorers').html('
Scorers load via API-Football after today\'s quota resets.
'); } ); // PL Standings proxyCall('apifootball','standings',{league:'39',season:'2025'}, function(r){ var res=r.response||r; if(!Array.isArray(res)||!res.length){ $('#w-standings').html('
No standings yet.
'); return; } var rows=res[0].league.standings[0].slice(0,10); var h=''; rows.forEach(function(t){ var d=t.description||''; var dc=d.indexOf('Champions')>-1?'futp-cl':d.indexOf('Europa')>-1?'futp-el':d.indexOf('Relegation')>-1?'futp-rel':''; h+=''; }); h+='
#TeamPPtsForm
'+t.rank+''+esc(t.team.name)+''+t.all.played+''+t.points+'
'; (t.form||'').split('').slice(-5).forEach(function(c){ h+=''+c+''; }); h+='
'; $('#w-standings').html(h); }, function(){ $('#w-standings').html('
Standings load via API-Football.
'); } ); // Upcoming proxyCall('apifootball','fixtures',{league:'39',season:'2025',next:'5'}, function(r){ var res=r.response||r; if(!Array.isArray(res)||!res.length){ $('#w-upcoming').html('
No upcoming fixtures.
'); return; } var h=''; res.slice(0,5).forEach(function(f){ var d=new Date(f.fixture.date); h+='
' +'
'+esc(f.teams.home.name)+' vs '+esc(f.teams.away.name)+'
' +'
Premier League
' +'
'+d.toLocaleDateString([],{month:'short',day:'numeric'})+' '+d.toLocaleTimeString([],{hour:'2-digit',minute:'2-digit'})+'
'; }); $('#w-upcoming').html(h); }, function(){} ); } /* ── League flag helper ── */ function lgEmoji(n){ n=(n||'').toLowerCase(); if(n.indexOf('champions')>-1)return'🏆'; if(n.indexOf('premier')>-1)return'🏴󠁧󠁢󠁥󠁮󠁧󠁿'; if(n.indexOf('la liga')>-1||n.indexOf('spain')>-1)return'🇪🇸'; if(n.indexOf('serie')>-1||n.indexOf('italy')>-1)return'🇮🇹'; if(n.indexOf('bundesliga')>-1||n.indexOf('german')>-1)return'🇩🇪'; if(n.indexOf('ligue')>-1||n.indexOf('french')>-1)return'🇫🇷'; return'🏟️'; } /* ── Tab & date switching ── */ $(document).on('click','.futp-tab',function(){ $('.futp-tab').removeClass('futp-tab-on'); $(this).addClass('futp-tab-on'); sport=$(this).data('sport'); if(sport==='football') loadFootball(); else if(sport==='basketball') loadNBA(); else $('#futp-matches').html('
'+$(this).text()+' scores coming soon.
'); }); $(document).on('click','.futp-date-btn',function(){ $('.futp-date-btn').removeClass('futp-date-on'); $(this).addClass('futp-date-on'); dayOff=parseInt($(this).data('d')); if(sport==='football') loadFootball(); else if(sport==='basketball') loadNBA(); }); /* ── Init (no auto-refresh — users manually reload) ── */ loadFootball(); })(jQuery);