Лига 1
Полный прогноз →
Nice0.0%
Saint Etienne0.0%
DRAW0.0%
Nice0.0%
Saint Etienne0.0%
DRAW0.0%
Лига 1
Полный прогноз →
Saint Etienne0.0%
Nice0.0%
DRAW0.0%
Saint Etienne0.0%
Nice0.0%
DRAW0.0%
Бундеслига
Полный прогноз →
SC Paderborn 070.0%
VfL Wolfsburg0.0%
DRAW0.0%
SC Paderborn 070.0%
VfL Wolfsburg0.0%
DRAW0.0%
Ла Лига
Полный прогноз →
Villarreal0.0%
Atletico Madrid0.0%
DRAW0.0%
Villarreal0.0%
Atletico Madrid0.0%
DRAW0.0%
Серия А
Полный прогноз →
Cremonese0.0%
Como0.0%
DRAW0.0%
Cremonese0.0%
Como0.0%
DRAW0.0%
Серия А
Полный прогноз →
Lecce0.0%
Genoa0.0%
DRAW0.0%
Lecce0.0%
Genoa0.0%
DRAW0.0%
Серия А
Полный прогноз →
AC Milan0.0%
Cagliari0.0%
DRAW0.0%
AC Milan0.0%
Cagliari0.0%
DRAW0.0%
Серия А
Полный прогноз →
Torino0.0%
Juventus0.0%
DRAW0.0%
Torino0.0%
Juventus0.0%
DRAW0.0%
Серия А
Полный прогноз →
Hellas Verona0.0%
AS Roma0.0%
DRAW0.0%
Hellas Verona0.0%
AS Roma0.0%
DRAW0.0%
Серия А
Полный прогноз →
Napoli0.0%
Udinese0.0%
DRAW0.0%
Napoli0.0%
Udinese0.0%
DRAW0.0%
АПЛ
Полный прогноз →
Brighton0.0%
Manchester United0.0%
DRAW0.0%
Brighton0.0%
Manchester United0.0%
DRAW0.0%
АПЛ
Полный прогноз →
Burnley0.0%
Wolves0.0%
DRAW0.0%
Burnley0.0%
Wolves0.0%
DRAW0.0%
АПЛ
Полный прогноз →
Crystal Palace0.0%
Arsenal0.0%
DRAW0.0%
Crystal Palace0.0%
Arsenal0.0%
DRAW0.0%
АПЛ
Полный прогноз →
Fulham0.0%
Newcastle0.0%
DRAW0.0%
Fulham0.0%
Newcastle0.0%
DRAW0.0%
АПЛ
Полный прогноз →
Liverpool0.0%
Brentford0.0%
DRAW0.0%
Liverpool0.0%
Brentford0.0%
DRAW0.0%
АПЛ
Полный прогноз →
Manchester City0.0%
Aston Villa0.0%
DRAW0.0%
Manchester City0.0%
Aston Villa0.0%
DRAW0.0%
АПЛ
Полный прогноз →
Nottingham Forest0.0%
Bournemouth0.0%
DRAW0.0%
Nottingham Forest0.0%
Bournemouth0.0%
DRAW0.0%
АПЛ
Полный прогноз →
Sunderland0.0%
Chelsea0.0%
DRAW0.0%
Sunderland0.0%
Chelsea0.0%
DRAW0.0%
АПЛ
Полный прогноз →
Tottenham0.0%
Everton0.0%
DRAW0.0%
Tottenham0.0%
Everton0.0%
DRAW0.0%
АПЛ
Полный прогноз →
West Ham0.0%
Leeds0.0%
DRAW0.0%
West Ham0.0%
Leeds0.0%
DRAW0.0%
Серия А
Полный прогноз →
Parma0.0%
Sassuolo0.0%
DRAW0.0%
Parma0.0%
Sassuolo0.0%
DRAW0.0%
Ла Лига
Полный прогноз →
Alaves0.0%
Rayo Vallecano0.0%
DRAW0.0%
Alaves0.0%
Rayo Vallecano0.0%
DRAW0.0%
Ла Лига
Полный прогноз →
Real Betis0.0%
Levante0.0%
DRAW0.0%
Real Betis0.0%
Levante0.0%
DRAW0.0%
Ла Лига
Полный прогноз →
Celta Vigo0.0%
Sevilla0.0%
DRAW0.0%
Celta Vigo0.0%
Sevilla0.0%
DRAW0.0%
Ла Лига
Полный прогноз →
Espanyol0.0%
Real Sociedad0.0%
DRAW0.0%
Espanyol0.0%
Real Sociedad0.0%
DRAW0.0%
Ла Лига
Полный прогноз →
Getafe0.0%
Osasuna0.0%
DRAW0.0%
Getafe0.0%
Osasuna0.0%
DRAW0.0%
Ла Лига
Полный прогноз →
Girona0.0%
Elche0.0%
DRAW0.0%
Girona0.0%
Elche0.0%
DRAW0.0%
Ла Лига
Полный прогноз →
Mallorca0.0%
Oviedo0.0%
DRAW0.0%
Mallorca0.0%
Oviedo0.0%
DRAW0.0%
Ла Лига
Полный прогноз →
Real Madrid0.0%
Athletic Club0.0%
DRAW0.0%
Real Madrid0.0%
Athletic Club0.0%
DRAW0.0%
Ла Лига
Полный прогноз →
Valencia0.0%
Barcelona0.0%
DRAW0.0%
Valencia0.0%
Barcelona0.0%
DRAW0.0%
Серия А
Полный прогноз →
Lazio0.0%
Pisa0.0%
DRAW0.0%
Lazio0.0%
Pisa0.0%
DRAW0.0%
Серия А
Полный прогноз →
Bologna0.0%
Inter0.0%
DRAW0.0%
Bologna0.0%
Inter0.0%
DRAW0.0%
РПЛ
Полный прогноз →
Akron0.0%
Rotor Volgograd0.0%
DRAW0.0%
Akron0.0%
Rotor Volgograd0.0%
DRAW0.0%
РПЛ
Полный прогноз →
Dinamo Makhachkala0.0%
Ural0.0%
DRAW0.0%
Dinamo Makhachkala0.0%
Ural0.0%
DRAW0.0%
Серия А
Полный прогноз →
Fiorentina0.0%
Atalanta0.0%
DRAW0.0%
Fiorentina0.0%
Atalanta0.0%
DRAW0.0%
Бундеслига
Полный прогноз →
VfL Wolfsburg0.0%
SC Paderborn 070.0%
DRAW0.0%
VfL Wolfsburg0.0%
SC Paderborn 070.0%
DRAW0.0%
РПЛ
Полный прогноз →
Rotor Volgograd0.0%
Akron0.0%
DRAW0.0%
Rotor Volgograd0.0%
Akron0.0%
DRAW0.0%
РПЛ
Полный прогноз →
Ural0.0%
Dinamo Makhachkala0.0%
DRAW0.0%
Ural0.0%
Dinamo Makhachkala0.0%
DRAW0.0%
АПЛ
Полный прогноз →
Chelsea0.0%
Tottenham0.0%
DRAW0.0%
Chelsea0.0%
Tottenham0.0%
DRAW0.0%
АПЛ
Полный прогноз →
Bournemouth0.0%
Manchester City0.0%
DRAW0.0%
Bournemouth0.0%
Manchester City0.0%
DRAW0.0%
АПЛ
Полный прогноз →
Arsenal0.0%
Burnley0.0%
DRAW0.0%
Arsenal0.0%
Burnley0.0%
DRAW0.0%
Ла Лига
Полный прогноз →
Barcelona0.0%
Real Betis0.0%
DRAW0.0%
Barcelona0.0%
Real Betis0.0%
DRAW0.0%
Лига 1
Полный прогноз →
Stade Brestois 290.0%
Angers0.0%
DRAW0.0%
Stade Brestois 290.0%
Angers0.0%
DRAW0.0%
Лига 1
Полный прогноз →
Lille0.0%
Auxerre0.0%
DRAW0.0%
Lille0.0%
Auxerre0.0%
DRAW0.0%
Лига 1
Полный прогноз →
Lorient0.0%
Le Havre0.0%
DRAW0.0%
Lorient0.0%
Le Havre0.0%
DRAW0.0%
Лига 1
Полный прогноз →
Lyon0.0%
Lens0.0%
DRAW0.0%
Lyon0.0%
Lens0.0%
DRAW0.0%
Лига 1
Полный прогноз →
Marseille0.0%
Rennes0.0%
DRAW0.0%
Marseille0.0%
Rennes0.0%
DRAW0.0%
Лига 1
Полный прогноз →
Nantes0.0%
Toulouse0.0%
DRAW0.0%
Nantes0.0%
Toulouse0.0%
DRAW0.0%
Лига 1
Полный прогноз →
Nice0.0%
Metz0.0%
DRAW0.0%
Nice0.0%
Metz0.0%
DRAW0.0%
Лига 1
Полный прогноз →
Paris FC0.0%
Paris Saint Germain0.0%
DRAW0.0%
Paris FC0.0%
Paris Saint Germain0.0%
DRAW0.0%
Лига 1
Полный прогноз →
Strasbourg0.0%
Monaco0.0%
DRAW0.0%
Strasbourg0.0%
Monaco0.0%
DRAW0.0%
Серия А
Полный прогноз →
Cagliari0.0%
Torino0.0%
DRAW0.0%
Cagliari0.0%
Torino0.0%
DRAW0.0%
Серия А
Полный прогноз →
Sassuolo0.0%
Lecce0.0%
DRAW0.0%
Sassuolo0.0%
Lecce0.0%
DRAW0.0%
Серия А
Полный прогноз →
Udinese0.0%
Cremonese0.0%
DRAW0.0%
Udinese0.0%
Cremonese0.0%
DRAW0.0%
Ла Лига
Полный прогноз →
Athletic Club0.0%
Celta Vigo0.0%
DRAW0.0%
Athletic Club0.0%
Celta Vigo0.0%
DRAW0.0%
Ла Лига
Полный прогноз →
Atletico Madrid0.0%
Girona0.0%
DRAW0.0%
Atletico Madrid0.0%
Girona0.0%
DRAW0.0%
Ла Лига
Полный прогноз →
Elche0.0%
Getafe0.0%
DRAW0.0%
Elche0.0%
Getafe0.0%
DRAW0.0%
Ла Лига
Полный прогноз →
Levante0.0%
Mallorca0.0%
DRAW0.0%
Levante0.0%
Mallorca0.0%
DRAW0.0%
Ла Лига
Полный прогноз →
Osasuna0.0%
Espanyol0.0%
DRAW0.0%
Osasuna0.0%
Espanyol0.0%
DRAW0.0%
Ла Лига
Полный прогноз →
Rayo Vallecano0.0%
Villarreal0.0%
DRAW0.0%
Rayo Vallecano0.0%
Villarreal0.0%
DRAW0.0%
Ла Лига
Полный прогноз →
Real Sociedad0.0%
Valencia0.0%
DRAW0.0%
Real Sociedad0.0%
Valencia0.0%
DRAW0.0%
Ла Лига
Полный прогноз →
Oviedo0.0%
Alaves0.0%
DRAW0.0%
Oviedo0.0%
Alaves0.0%
DRAW0.0%
Ла Лига
Полный прогноз →
Sevilla0.0%
Real Madrid0.0%
DRAW0.0%
Sevilla0.0%
Real Madrid0.0%
DRAW0.0%
АПЛ
Полный прогноз →
Newcastle0.0%
West Ham0.0%
DRAW0.0%
Newcastle0.0%
West Ham0.0%
DRAW0.0%
Серия А
Полный прогноз →
Atalanta0.0%
Bologna0.0%
DRAW0.0%
Atalanta0.0%
Bologna0.0%
DRAW0.0%
РПЛ
Полный прогноз →
Baltika0.0%
Dynamo0.0%
DRAW0.0%
Baltika0.0%
Dynamo0.0%
DRAW0.0%
РПЛ
Полный прогноз →
CSKA Moscow0.0%
Lokomotiv0.0%
DRAW0.0%
CSKA Moscow0.0%
Lokomotiv0.0%
DRAW0.0%
РПЛ
Полный прогноз →
Dinamo Makhachkala0.0%
Spartak Moscow0.0%
DRAW0.0%
Dinamo Makhachkala0.0%
Spartak Moscow0.0%
DRAW0.0%
РПЛ
Полный прогноз →
FC Rostov0.0%
Zenit0.0%
DRAW0.0%
FC Rostov0.0%
Zenit0.0%
DRAW0.0%
РПЛ
Полный прогноз →
FC Krasnodar0.0%
FC Orenburg0.0%
DRAW0.0%
FC Krasnodar0.0%
FC Orenburg0.0%
DRAW0.0%
РПЛ
Полный прогноз →
Krylia Sovetov0.0%
Akron0.0%
DRAW0.0%
Krylia Sovetov0.0%
Akron0.0%
DRAW0.0%
РПЛ
Полный прогноз →
Rubin0.0%
Nizhny Novgorod0.0%
DRAW0.0%
Rubin0.0%
Nizhny Novgorod0.0%
DRAW0.0%
РПЛ
Полный прогноз →
FC Sochi0.0%
Akhmat0.0%
DRAW0.0%
FC Sochi0.0%
Akhmat0.0%
DRAW0.0%
АПЛ
Полный прогноз →
Brentford0.0%
Crystal Palace0.0%
DRAW0.0%
Brentford0.0%
Crystal Palace0.0%
DRAW0.0%
АПЛ
Полный прогноз →
Everton0.0%
Sunderland0.0%
DRAW0.0%
Everton0.0%
Sunderland0.0%
DRAW0.0%
АПЛ
Полный прогноз →
Leeds0.0%
Brighton0.0%
DRAW0.0%
Leeds0.0%
Brighton0.0%
DRAW0.0%
АПЛ
Полный прогноз →
Wolves0.0%
Fulham0.0%
DRAW0.0%
Wolves0.0%
Fulham0.0%
DRAW0.0%
Серия А
Полный прогноз →
Inter0.0%
Hellas Verona0.0%
DRAW0.0%
Inter0.0%
Hellas Verona0.0%
DRAW0.0%
АПЛ
Полный прогноз →
Manchester United0.0%
Nottingham Forest0.0%
DRAW0.0%
Manchester United0.0%
Nottingham Forest0.0%
DRAW0.0%
Серия А
Полный прогноз →
Como0.0%
Parma0.0%
DRAW0.0%
Como0.0%
Parma0.0%
DRAW0.0%
Серия А
Полный прогноз →
Genoa0.0%
AC Milan0.0%
DRAW0.0%
Genoa0.0%
AC Milan0.0%
DRAW0.0%
Серия А
Полный прогноз →
Juventus0.0%
Fiorentina0.0%
DRAW0.0%
Juventus0.0%
Fiorentina0.0%
DRAW0.0%
Серия А
Полный прогноз →
Pisa0.0%
Napoli0.0%
DRAW0.0%
Pisa0.0%
Napoli0.0%
DRAW0.0%
Серия А
Полный прогноз →
AS Roma0.0%
Lazio0.0%
DRAW0.0%
AS Roma0.0%
Lazio0.0%
DRAW0.0%
Бундеслига
Полный прогноз →
Bayer Leverkusen0.0%
Hamburger SV0.0%
DRAW0.0%
Bayer Leverkusen0.0%
Hamburger SV0.0%
DRAW0.0%
Бундеслига
Полный прогноз →
Bayern München0.0%
1. FC Köln0.0%
DRAW0.0%
Bayern München0.0%
1. FC Köln0.0%
DRAW0.0%
Бундеслига
Полный прогноз →
Borussia Mönchengladbach0.0%
1899 Hoffenheim0.0%
DRAW0.0%
Borussia Mönchengladbach0.0%
1899 Hoffenheim0.0%
DRAW0.0%
Бундеслига
Полный прогноз →
Eintracht Frankfurt0.0%
VfB Stuttgart0.0%
DRAW0.0%
Eintracht Frankfurt0.0%
VfB Stuttgart0.0%
DRAW0.0%
Бундеслига
Полный прогноз →
SC Freiburg0.0%
RB Leipzig0.0%
DRAW0.0%
SC Freiburg0.0%
RB Leipzig0.0%
DRAW0.0%
Бундеслига
Полный прогноз →
1. FC Heidenheim0.0%
FSV Mainz 050.0%
DRAW0.0%
1. FC Heidenheim0.0%
FSV Mainz 050.0%
DRAW0.0%
Бундеслига
Полный прогноз →
FC St. Pauli0.0%
VfL Wolfsburg0.0%
DRAW0.0%
FC St. Pauli0.0%
VfL Wolfsburg0.0%
DRAW0.0%
Бундеслига
Полный прогноз →
Union Berlin0.0%
FC Augsburg0.0%
DRAW0.0%
Union Berlin0.0%
FC Augsburg0.0%
DRAW0.0%
Бундеслига
Полный прогноз →
Werder Bremen0.0%
Borussia Dortmund0.0%
DRAW0.0%
Werder Bremen0.0%
Borussia Dortmund0.0%
DRAW0.0%
АПЛ
Полный прогноз →
Aston Villa0.0%
Liverpool0.0%
DRAW0.0%
Aston Villa0.0%
Liverpool0.0%
DRAW0.0%
Лига 1
Полный прогноз →
Saint Etienne0.0%
Rodez0.0%
DRAW0.0%
Saint Etienne0.0%
Rodez0.0%
DRAW0.0%
Ла Лига
Полный прогноз →
Real Madrid0.0%
Oviedo0.0%
DRAW0.0%
Real Madrid0.0%
Oviedo0.0%
DRAW0.0%
Ла Лига
Полный прогноз →
Girona0.0%
Real Sociedad0.0%
DRAW0.0%
Girona0.0%
Real Sociedad0.0%
DRAW0.0%
Ла Лига
Полный прогноз →
Valencia0.0%
Rayo Vallecano0.0%
DRAW0.0%
Valencia0.0%
Rayo Vallecano0.0%
DRAW0.0%
Ла Лига
Полный прогноз →
Alaves0.0%
Barcelona0.0%
DRAW0.0%
Alaves0.0%
Barcelona0.0%
DRAW0.0%
Ла Лига
Полный прогноз →
Getafe0.0%
Mallorca0.0%
DRAW0.0%
Getafe0.0%
Mallorca0.0%
DRAW0.0%
АПЛ
Полный прогноз →
Manchester City0.0%
Crystal Palace0.0%
DRAW0.0%
Manchester City0.0%
Crystal Palace0.0%
DRAW0.0%
Лига 1
Полный прогноз →
Lens0.0%
Paris Saint Germain0.0%
DRAW0.0%
Lens0.0%
Paris Saint Germain0.0%
DRAW0.0%
Лига 1
Полный прогноз →
Stade Brestois 290.0%
Strasbourg0.0%
DRAW0.0%
Stade Brestois 290.0%
Strasbourg0.0%
DRAW0.0%
Ла Лига
Полный прогноз →
Espanyol0.0%
Athletic Club0.0%
DRAW0.0%
Espanyol0.0%
Athletic Club0.0%
DRAW0.0%
Ла Лига
Полный прогноз →
Villarreal0.0%
Sevilla0.0%
DRAW0.0%
Villarreal0.0%
Sevilla0.0%
DRAW0.0%
Ла Лига
Полный прогноз →
Osasuna0.0%
Atletico Madrid0.0%
DRAW0.0%
Osasuna0.0%
Atletico Madrid0.0%
DRAW0.0%
Лига 1
Полный прогноз →
RED Star FC 930.0%
Rodez0.0%
DRAW0.0%
RED Star FC 930.0%
Rodez0.0%
DRAW0.0%
Ла Лига
Полный прогноз →
Real Betis0.0%
Elche0.0%
DRAW0.0%
Real Betis0.0%
Elche0.0%
DRAW0.0%
Ла Лига
Полный прогноз →
Celta Vigo0.0%
Levante0.0%
DRAW0.0%
Celta Vigo0.0%
Levante0.0%
DRAW0.0%
АПЛ
Полный прогноз →
Tottenham0.0%
Leeds0.0%
DRAW0.0%
Tottenham0.0%
Leeds0.0%
DRAW0.0%
Ла Лига
Полный прогноз →
Rayo Vallecano0.0%
Girona0.0%
DRAW0.0%
Rayo Vallecano0.0%
Girona0.0%
DRAW0.0%
Серия А
Полный прогноз →
Napoli0.0%
Bologna0.0%
DRAW0.0%
Napoli0.0%
Bologna0.0%
DRAW0.0%
РПЛ
Полный прогноз →
Dynamo0.0%
FC Krasnodar0.0%
DRAW0.0%
Dynamo0.0%
FC Krasnodar0.0%
DRAW0.0%
РПЛ
Полный прогноз →
Spartak Moscow0.0%
Rubin0.0%
DRAW0.0%
Spartak Moscow0.0%
Rubin0.0%
DRAW0.0%
РПЛ
Полный прогноз →
Nizhny Novgorod0.0%
CSKA Moscow0.0%
DRAW0.0%
Nizhny Novgorod0.0%
CSKA Moscow0.0%
DRAW0.0%
Лига 1
Полный прогноз →
Angers0.0%
Strasbourg0.0%
DRAW0.0%
Angers0.0%
Strasbourg0.0%
DRAW0.0%
Лига 1
Полный прогноз →
Auxerre0.0%
Nice0.0%
DRAW0.0%
Auxerre0.0%
Nice0.0%
DRAW0.0%
Лига 1
Полный прогноз →
Le Havre0.0%
Marseille0.0%
DRAW0.0%
Le Havre0.0%
Marseille0.0%
DRAW0.0%
Лига 1
Полный прогноз →
Metz0.0%
Lorient0.0%
DRAW0.0%
Metz0.0%
Lorient0.0%
DRAW0.0%
Лига 1
Полный прогноз →
Monaco0.0%
Lille0.0%
DRAW0.0%
Monaco0.0%
Lille0.0%
DRAW0.0%
Лига 1
Полный прогноз →
Paris Saint Germain0.0%
Stade Brestois 290.0%
DRAW0.0%
Paris Saint Germain0.0%
Stade Brestois 290.0%
DRAW0.0%
Лига 1
Полный прогноз →
Rennes0.0%
Paris FC0.0%
DRAW0.0%
Rennes0.0%
Paris FC0.0%
DRAW0.0%
Лига 1
Полный прогноз →
Toulouse0.0%
Lyon0.0%
DRAW0.0%
Toulouse0.0%
Lyon0.0%
DRAW0.0%
Ла Лига
Полный прогноз →
Barcelona0.0%
Real Madrid0.0%
DRAW0.0%
Barcelona0.0%
Real Madrid0.0%
DRAW0.0%
Серия А
Полный прогноз →
AC Milan0.0%
Atalanta0.0%
DRAW0.0%
AC Milan0.0%
Atalanta0.0%
DRAW0.0%
Бундеслига
Полный прогноз →
FSV Mainz 050.0%
Union Berlin0.0%
DRAW0.0%
FSV Mainz 050.0%
Union Berlin0.0%
DRAW0.0%
Ла Лига
Полный прогноз →
Oviedo0.0%
Getafe0.0%
DRAW0.0%
Oviedo0.0%
Getafe0.0%
DRAW0.0%
РПЛ
Полный прогноз →
Lokomotiv0.0%
Baltika0.0%
DRAW0.0%
Lokomotiv0.0%
Baltika0.0%
DRAW0.0%
Серия А
Полный прогноз →
Parma0.0%
AS Roma0.0%
DRAW0.0%
Parma0.0%
AS Roma0.0%
DRAW0.0%
АПЛ
Полный прогноз →
West Ham0.0%
Arsenal0.0%
DRAW0.0%
West Ham0.0%
Arsenal0.0%
DRAW0.0%
Бундеслига
Полный прогноз →
1. FC Köln0.0%
1. FC Heidenheim0.0%
DRAW0.0%
1. FC Köln0.0%
1. FC Heidenheim0.0%
DRAW0.0%
Ла Лига
Полный прогноз →
Athletic Club0.0%
Valencia0.0%
DRAW0.0%
Athletic Club0.0%
Valencia0.0%
DRAW0.0%
РПЛ
Полный прогноз →
Akhmat0.0%
Dinamo Makhachkala0.0%
DRAW0.0%
Akhmat0.0%
Dinamo Makhachkala0.0%
DRAW0.0%
Бундеслига
Полный прогноз →
Hamburger SV0.0%
SC Freiburg0.0%
DRAW0.0%
Hamburger SV0.0%
SC Freiburg0.0%
DRAW0.0%
Серия А
Полный прогноз →
Cremonese0.0%
Pisa0.0%
DRAW0.0%
Cremonese0.0%
Pisa0.0%
DRAW0.0%
Серия А
Полный прогноз →
Fiorentina0.0%
Genoa0.0%
DRAW0.0%
Fiorentina0.0%
Genoa0.0%
DRAW0.0%
АПЛ
Полный прогноз →
Burnley0.0%
Aston Villa0.0%
DRAW0.0%
Burnley0.0%
Aston Villa0.0%
DRAW0.0%
АПЛ
Полный прогноз →
Crystal Palace0.0%
Everton0.0%
DRAW0.0%
Crystal Palace0.0%
Everton0.0%
DRAW0.0%
АПЛ
Полный прогноз →
Nottingham Forest0.0%
Newcastle0.0%
DRAW0.0%
Nottingham Forest0.0%
Newcastle0.0%
DRAW0.0%
Ла Лига
Полный прогноз →
Mallorca0.0%
Villarreal0.0%
DRAW0.0%
Mallorca0.0%
Villarreal0.0%
DRAW0.0%
РПЛ
Полный прогноз →
Zenit0.0%
FC Sochi0.0%
DRAW0.0%
Zenit0.0%
FC Sochi0.0%
DRAW0.0%
Серия А
Полный прогноз →
Hellas Verona0.0%
Como0.0%
DRAW0.0%
Hellas Verona0.0%
Como0.0%
DRAW0.0%
РПЛ
Полный прогноз →
FC Orenburg0.0%
Krylia Sovetov0.0%
DRAW0.0%
FC Orenburg0.0%
Krylia Sovetov0.0%
DRAW0.0%
Ла Лига
Полный прогноз →
Real Sociedad0.0%
Real Betis0.0%
DRAW0.0%
Real Sociedad0.0%
Real Betis0.0%
DRAW0.0%
Серия А
Полный прогноз →
Lecce0.0%
Juventus0.0%
DRAW0.0%
Lecce0.0%
Juventus0.0%
DRAW0.0%
АПЛ
Полный прогноз →
Manchester City0.0%
Brentford0.0%
DRAW0.0%
Manchester City0.0%
Brentford0.0%
DRAW0.0%
Бундеслига
Полный прогноз →
VfL Wolfsburg0.0%
Bayern München0.0%
DRAW0.0%
VfL Wolfsburg0.0%
Bayern München0.0%
DRAW0.0%
Ла Лига
Полный прогноз →
Atletico Madrid0.0%
Celta Vigo0.0%
DRAW0.0%
Atletico Madrid0.0%
Celta Vigo0.0%
DRAW0.0%
Серия А
Полный прогноз →
Lazio0.0%
Inter0.0%
DRAW0.0%
Lazio0.0%
Inter0.0%
DRAW0.0%
Ла Лига
Полный прогноз →
Sevilla0.0%
Espanyol0.0%
DRAW0.0%
Sevilla0.0%
Espanyol0.0%
DRAW0.0%
АПЛ
Полный прогноз →
Brighton0.0%
Wolves0.0%
DRAW0.0%
Brighton0.0%
Wolves0.0%
DRAW0.0%
АПЛ
Полный прогноз →
Fulham0.0%
Bournemouth0.0%
DRAW0.0%
Fulham0.0%
Bournemouth0.0%
DRAW0.0%
АПЛ
Полный прогноз →
Sunderland0.0%
Manchester United0.0%
DRAW0.0%
Sunderland0.0%
Manchester United0.0%
DRAW0.0%
Бундеслига
Полный прогноз →
FC Augsburg0.0%
Borussia Mönchengladbach0.0%
DRAW0.0%
FC Augsburg0.0%
Borussia Mönchengladbach0.0%
DRAW0.0%
Бундеслига
Полный прогноз →
1899 Hoffenheim0.0%
Werder Bremen0.0%
DRAW0.0%
1899 Hoffenheim0.0%
Werder Bremen0.0%
DRAW0.0%
Бундеслига
Полный прогноз →
RB Leipzig0.0%
FC St. Pauli0.0%
DRAW0.0%
RB Leipzig0.0%
FC St. Pauli0.0%
DRAW0.0%
Бундеслига
Полный прогноз →
VfB Stuttgart0.0%
Bayer Leverkusen0.0%
DRAW0.0%
VfB Stuttgart0.0%
Bayer Leverkusen0.0%
DRAW0.0%
Серия А
Полный прогноз →
Cagliari0.0%
Udinese0.0%
DRAW0.0%
Cagliari0.0%
Udinese0.0%
DRAW0.0%
Ла Лига
Полный прогноз →
Elche0.0%
Alaves0.0%
DRAW0.0%
Elche0.0%
Alaves0.0%
DRAW0.0%
АПЛ
Полный прогноз →
Liverpool0.0%
Chelsea0.0%
DRAW0.0%
Liverpool0.0%
Chelsea0.0%
DRAW0.0%
Ла Лига
Полный прогноз →
Levante0.0%
Osasuna0.0%
DRAW0.0%
Levante0.0%
Osasuna0.0%
DRAW0.0%
Серия А
Полный прогноз →
Torino0.0%
Sassuolo0.0%
DRAW0.0%
Torino0.0%
Sassuolo0.0%
DRAW0.0%
Лига 1
Полный прогноз →
Lens0.0%
Nantes0.0%
DRAW0.0%
Lens0.0%
Nantes0.0%
DRAW0.0%
Бундеслига
Полный прогноз →
Borussia Dortmund0.0%
Eintracht Frankfurt0.0%
DRAW0.0%
Borussia Dortmund0.0%
Eintracht Frankfurt0.0%
DRAW0.0%
АПЛ
Полный прогноз →
Everton0.0%
Manchester City0.0%
DRAW0.0%
Everton0.0%
Manchester City0.0%
DRAW0.0%
Ла Лига
Полный прогноз →
Sevilla0.0%
Real Sociedad0.0%
DRAW0.0%
Sevilla0.0%
Real Sociedad0.0%
DRAW0.0%
Серия А
Полный прогноз →
AS Roma0.0%
Fiorentina0.0%
DRAW0.0%
AS Roma0.0%
Fiorentina0.0%
DRAW0.0%
Серия А
Полный прогноз →
Cremonese0.0%
Lazio0.0%
DRAW0.0%
Cremonese0.0%
Lazio0.0%
DRAW0.0%
АПЛ
Полный прогноз →
Chelsea0.0%
Nottingham Forest0.0%
DRAW0.0%
Chelsea0.0%
Nottingham Forest0.0%
DRAW0.0%
Ла Лига
Полный прогноз →
Espanyol0.0%
Real Madrid0.0%
DRAW0.0%
Espanyol0.0%
Real Madrid0.0%
DRAW0.0%
Серия А
Полный прогноз →
Inter0.0%
Parma0.0%
DRAW0.0%
Inter0.0%
Parma0.0%
DRAW0.0%
Лига 1
Полный прогноз →
Lyon0.0%
Rennes0.0%
DRAW0.0%
Lyon0.0%
Rennes0.0%
DRAW0.0%
АПЛ
Полный прогноз →
Aston Villa0.0%
Tottenham0.0%
DRAW0.0%
Aston Villa0.0%
Tottenham0.0%
DRAW0.0%
Бундеслига
Полный прогноз →
SC Freiburg0.0%
VfL Wolfsburg0.0%
DRAW0.0%
SC Freiburg0.0%
VfL Wolfsburg0.0%
DRAW0.0%
Ла Лига
Полный прогноз →
Real Betis0.0%
Oviedo0.0%
DRAW0.0%
Real Betis0.0%
Oviedo0.0%
DRAW0.0%
РПЛ
Полный прогноз →
Akhmat0.0%
Nizhny Novgorod0.0%
DRAW0.0%
Akhmat0.0%
Nizhny Novgorod0.0%
DRAW0.0%
Серия А
Полный прогноз →
Juventus0.0%
Hellas Verona0.0%
DRAW0.0%
Juventus0.0%
Hellas Verona0.0%
DRAW0.0%
Бундеслига
Полный прогноз →
Borussia Mönchengladbach0.0%
Borussia Dortmund0.0%
DRAW0.0%
Borussia Mönchengladbach0.0%
Borussia Dortmund0.0%
DRAW0.0%
Лига 1
Полный прогноз →
Auxerre0.0%
Angers0.0%
DRAW0.0%
Auxerre0.0%
Angers0.0%
DRAW0.0%
Лига 1
Полный прогноз →
Paris FC0.0%
Stade Brestois 290.0%
DRAW0.0%
Paris FC0.0%
Stade Brestois 290.0%
DRAW0.0%
Лига 1
Полный прогноз →
Strasbourg0.0%
Toulouse0.0%
DRAW0.0%
Strasbourg0.0%
Toulouse0.0%
DRAW0.0%
АПЛ
Полный прогноз →
Manchester United0.0%
Liverpool0.0%
DRAW0.0%
Manchester United0.0%
Liverpool0.0%
DRAW0.0%
Ла Лига
Полный прогноз →
Getafe0.0%
Rayo Vallecano0.0%
DRAW0.0%
Getafe0.0%
Rayo Vallecano0.0%
DRAW0.0%
РПЛ
Полный прогноз →
Akron0.0%
FC Krasnodar0.0%
DRAW0.0%
Akron0.0%
FC Krasnodar0.0%
DRAW0.0%
Бундеслига
Полный прогноз →
FC St. Pauli0.0%
FSV Mainz 050.0%
DRAW0.0%
FC St. Pauli0.0%
FSV Mainz 050.0%
DRAW0.0%
Серия А
Полный прогноз →
Sassuolo0.0%
AC Milan0.0%
DRAW0.0%
Sassuolo0.0%
AC Milan0.0%
DRAW0.0%
АПЛ
Полный прогноз →
Bournemouth0.0%
Crystal Palace0.0%
DRAW0.0%
Bournemouth0.0%
Crystal Palace0.0%
DRAW0.0%
Лига 1
Полный прогноз →
Lille0.0%
Le Havre0.0%
DRAW0.0%
Lille0.0%
Le Havre0.0%
DRAW0.0%
Ла Лига
Полный прогноз →
Celta Vigo0.0%
Elche0.0%
DRAW0.0%
Celta Vigo0.0%
Elche0.0%
DRAW0.0%
РПЛ
Полный прогноз →
FC Sochi0.0%
FC Orenburg0.0%
DRAW0.0%
FC Sochi0.0%
FC Orenburg0.0%
DRAW0.0%
Серия А
Полный прогноз →
Bologna0.0%
Cagliari0.0%
DRAW0.0%
Bologna0.0%
Cagliari0.0%
DRAW0.0%
Лига 1
Полный прогноз →
Nice0.0%
Lens0.0%
DRAW0.0%
Nice0.0%
Lens0.0%
DRAW0.0%
Ла Лига
Полный прогноз →
Osasuna0.0%
Barcelona0.0%
DRAW0.0%
Osasuna0.0%
Barcelona0.0%
DRAW0.0%
Серия А
Полный прогноз →
Atalanta0.0%
Genoa0.0%
DRAW0.0%
Atalanta0.0%
Genoa0.0%
DRAW0.0%
Лига 1
Полный прогноз →
Metz0.0%
Monaco0.0%
DRAW0.0%
Metz0.0%
Monaco0.0%
DRAW0.0%
АПЛ
Полный прогноз →
Arsenal0.0%
Fulham0.0%
DRAW0.0%
Arsenal0.0%
Fulham0.0%
DRAW0.0%
Бундеслига
Полный прогноз →
Bayer Leverkusen0.0%
RB Leipzig0.0%
DRAW0.0%
Bayer Leverkusen0.0%
RB Leipzig0.0%
DRAW0.0%
Ла Лига
Полный прогноз →
Alaves0.0%
Athletic Club0.0%
DRAW0.0%
Alaves0.0%
Athletic Club0.0%
DRAW0.0%
Серия А
Полный прогноз →
Como0.0%
Napoli0.0%
DRAW0.0%
Como0.0%
Napoli0.0%
DRAW0.0%
РПЛ
Полный прогноз →
CSKA Moscow0.0%
Zenit0.0%
DRAW0.0%
CSKA Moscow0.0%
Zenit0.0%
DRAW0.0%
Лига 1
Полный прогноз →
Paris Saint Germain0.0%
Lorient0.0%
DRAW0.0%
Paris Saint Germain0.0%
Lorient0.0%
DRAW0.0%
Ла Лига
Полный прогноз →
Valencia0.0%
Atletico Madrid0.0%
DRAW0.0%
Valencia0.0%
Atletico Madrid0.0%
DRAW0.0%
АПЛ
Полный прогноз →
Brentford0.0%
West Ham0.0%
DRAW0.0%
Brentford0.0%
West Ham0.0%
DRAW0.0%
АПЛ
Полный прогноз →
Newcastle0.0%
Brighton0.0%
DRAW0.0%
Newcastle0.0%
Brighton0.0%
DRAW0.0%
АПЛ
Полный прогноз →
Wolves0.0%
Sunderland0.0%
DRAW0.0%
Wolves0.0%
Sunderland0.0%
DRAW0.0%
Бундеслига
Полный прогноз →
Bayern München0.0%
1. FC Heidenheim0.0%
DRAW0.0%
Bayern München0.0%
1. FC Heidenheim0.0%
DRAW0.0%
Бундеслига
Полный прогноз →
Eintracht Frankfurt0.0%
Hamburger SV0.0%
DRAW0.0%
Eintracht Frankfurt0.0%
Hamburger SV0.0%
DRAW0.0%
Бундеслига
Полный прогноз →
1899 Hoffenheim0.0%
VfB Stuttgart0.0%
DRAW0.0%
1899 Hoffenheim0.0%
VfB Stuttgart0.0%
DRAW0.0%
Бундеслига
Полный прогноз →
Union Berlin0.0%
1. FC Köln0.0%
DRAW0.0%
Union Berlin0.0%
1. FC Köln0.0%
DRAW0.0%
Бундеслига
Полный прогноз →
Werder Bremen0.0%
FC Augsburg0.0%
DRAW0.0%
Werder Bremen0.0%
FC Augsburg0.0%
DRAW0.0%
РПЛ
Полный прогноз →
Baltika0.0%
Rubin0.0%
DRAW0.0%
Baltika0.0%
Rubin0.0%
DRAW0.0%
Серия А
Полный прогноз →
Udinese0.0%
Torino0.0%
DRAW0.0%
Udinese0.0%
Torino0.0%
DRAW0.0%
Лига 1
Полный прогноз →
Nantes0.0%
Marseille0.0%
DRAW0.0%
Nantes0.0%
Marseille0.0%
DRAW0.0%
Ла Лига
Полный прогноз →
Villarreal0.0%
Levante0.0%
DRAW0.0%
Villarreal0.0%
Levante0.0%
DRAW0.0%
РПЛ
Полный прогноз →
Dinamo Makhachkala0.0%
FC Rostov0.0%
DRAW0.0%
Dinamo Makhachkala0.0%
FC Rostov0.0%
DRAW0.0%
АПЛ
Полный прогноз →
Leeds0.0%
Burnley0.0%
DRAW0.0%
Leeds0.0%
Burnley0.0%
DRAW0.0%
Ла Лига
Полный прогноз →
Girona0.0%
Mallorca0.0%
DRAW0.0%
Girona0.0%
Mallorca0.0%
DRAW0.0%
Серия А
Полный прогноз →
Pisa0.0%
Lecce0.0%
DRAW0.0%
Pisa0.0%
Lecce0.0%
DRAW0.0%
РПЛ
Полный прогноз →
Lokomotiv0.0%
Dynamo0.0%
DRAW0.0%
Lokomotiv0.0%
Dynamo0.0%
DRAW0.0%
РПЛ
Полный прогноз →
Krylia Sovetov0.0%
Spartak Moscow0.0%
DRAW0.0%
Krylia Sovetov0.0%
Spartak Moscow0.0%
DRAW0.0%
АПЛ
Полный прогноз →
Manchester United0.0%
Brentford0.0%
DRAW0.0%
Manchester United0.0%
Brentford0.0%
DRAW0.0%
Ла Лига
Полный прогноз →
Espanyol0.0%
Levante0.0%
DRAW0.0%
Espanyol0.0%
Levante0.0%
DRAW0.0%
Серия А
Полный прогноз →
Lazio0.0%
Udinese0.0%
DRAW0.0%
Lazio0.0%
Udinese0.0%
DRAW0.0%
РПЛ
Полный прогноз →
Baltika0.0%
Akron0.0%
DRAW0.0%
Baltika0.0%
Akron0.0%
DRAW0.0%
Серия А
Полный прогноз →
Cagliari0.0%
Atalanta0.0%
DRAW0.0%
Cagliari0.0%
Atalanta0.0%
DRAW0.0%
Ла Лига
Полный прогноз →
Villarreal0.0%
Celta Vigo0.0%
DRAW0.0%
Villarreal0.0%
Celta Vigo0.0%
DRAW0.0%
Серия А
Полный прогноз →
AC Milan0.0%
Juventus0.0%
DRAW0.0%
AC Milan0.0%
Juventus0.0%
DRAW0.0%
Лига 1
Полный прогноз →
Marseille0.0%
Nice0.0%
DRAW0.0%
Marseille0.0%
Nice0.0%
DRAW0.0%
Ла Лига
Полный прогноз →
Osasuna0.0%
Sevilla0.0%
DRAW0.0%
Osasuna0.0%
Sevilla0.0%
DRAW0.0%
РПЛ
Полный прогноз →
Zenit0.0%
Akhmat0.0%
DRAW0.0%
Zenit0.0%
Akhmat0.0%
DRAW0.0%
Серия А
Полный прогноз →
Torino0.0%
Inter0.0%
DRAW0.0%
Torino0.0%
Inter0.0%
DRAW0.0%
Бундеслига
Полный прогноз →
Borussia Dortmund0.0%
SC Freiburg0.0%
DRAW0.0%
Borussia Dortmund0.0%
SC Freiburg0.0%
DRAW0.0%
Лига 1
Полный прогноз →
Le Havre0.0%
Metz0.0%
DRAW0.0%
Le Havre0.0%
Metz0.0%
DRAW0.0%
Лига 1
Полный прогноз →
Paris FC0.0%
Lille0.0%
DRAW0.0%
Paris FC0.0%
Lille0.0%
DRAW0.0%
Лига 1
Полный прогноз →
Rennes0.0%
Nantes0.0%
DRAW0.0%
Rennes0.0%
Nantes0.0%
DRAW0.0%
Ла Лига
Полный прогноз →
Oviedo0.0%
Elche0.0%
DRAW0.0%
Oviedo0.0%
Elche0.0%
DRAW0.0%
РПЛ
Полный прогноз →
Dynamo0.0%
FC Sochi0.0%
DRAW0.0%
Dynamo0.0%
FC Sochi0.0%
DRAW0.0%
РПЛ
Полный прогноз →
FC Krasnodar0.0%
Dinamo Makhachkala0.0%
DRAW0.0%
FC Krasnodar0.0%
Dinamo Makhachkala0.0%
DRAW0.0%
Бундеслига
Полный прогноз →
VfB Stuttgart0.0%
Werder Bremen0.0%
DRAW0.0%
VfB Stuttgart0.0%
Werder Bremen0.0%
DRAW0.0%
Серия А
Полный прогноз →
Genoa0.0%
Como0.0%
DRAW0.0%
Genoa0.0%
Como0.0%
DRAW0.0%
Лига 1
Полный прогноз →
Lorient0.0%
Strasbourg0.0%
DRAW0.0%
Lorient0.0%
Strasbourg0.0%
DRAW0.0%
Ла Лига
Полный прогноз →
Rayo Vallecano0.0%
Real Sociedad0.0%
DRAW0.0%
Rayo Vallecano0.0%
Real Sociedad0.0%
DRAW0.0%
Серия А
Полный прогноз →
Fiorentina0.0%
Sassuolo0.0%
DRAW0.0%
Fiorentina0.0%
Sassuolo0.0%
DRAW0.0%
РПЛ
Полный прогноз →
Nizhny Novgorod0.0%
Spartak Moscow0.0%
DRAW0.0%
Nizhny Novgorod0.0%
Spartak Moscow0.0%
DRAW0.0%
Серия А
Полный прогноз →
Нет оценки Claude (PCT_JSON) для этого матча
Bologna0.0%
AS Roma0.0%
DRAW0.0%
Серия А
Полный прогноз →
Нет оценки Claude (PCT_JSON) для этого матча
Hellas Verona0.0%
Lecce0.0%
DRAW0.0%
АПЛ
Полный прогноз →
Нет оценки Claude (PCT_JSON) для этого матча
Arsenal0.0%
Newcastle0.0%
DRAW0.0%
Лига 1
Полный прогноз →
Нет оценки Claude (PCT_JSON) для этого матча
Angers0.0%
Paris Saint Germain0.0%
DRAW0.0%
Лига 1
Полный прогноз →
Нет оценки Claude (PCT_JSON) для этого матча
Toulouse0.0%
Monaco0.0%
DRAW0.0%
Бундеслига
Полный прогноз →
Нет оценки Claude (PCT_JSON) для этого матча
Hamburger SV0.0%
1899 Hoffenheim0.0%
DRAW0.0%
Ла Лига
Полный прогноз →
Нет оценки Claude (PCT_JSON) для этого матча
Atletico Madrid0.0%
Athletic Club0.0%
DRAW0.0%
Ла Лига
Полный прогноз →
Нет оценки Claude (PCT_JSON) для этого матча
Valencia0.0%
Girona0.0%
DRAW0.0%
РПЛ
Полный прогноз →
Нет оценки Claude (PCT_JSON) для этого матча
Rubin0.0%
CSKA Moscow0.0%
DRAW0.0%
* layout: compare | feed (на корне по умолчанию compare). Системная настройка sportwtf_predictions_parent_id. */ if (!function_exists('sportwtf_media_url')) { $sportwtfMediaLib = rtrim($modx->getOption('core_path', null, ''), '/') . '/components/sportwtf/sportwtf_media.php'; if (is_readable($sportwtfMediaLib)) { require_once $sportwtfMediaLib; } } if (!function_exists('sportwtf_predictions_hub_under_root')) { function sportwtf_predictions_hub_under_root($modx, $res, $rootId) { $rootId = (int)$rootId; if ($rootId <= 0 || !$res) { return false; } $pid = (int)$res->get('parent'); for ($i = 0; $i < 40 && $pid > 0; $i++) { if ($pid === $rootId) { return true; } $p = $modx->getObject('modResource', $pid, false); if (!$p) { return false; } $pid = (int)$p->get('parent'); } return false; } } if (!function_exists('sportwtf_predictions_hub_league_label')) { function sportwtf_predictions_hub_league_label($uri) { $uri = trim((string)$uri, '/'); if ($uri === '') { return 'Прогноз ИИ'; } $slug = ''; if (preg_match('#^football/predictions/([^/]+)(?:/|$)#', $uri, $m)) { $slug = $m[1]; } static $map = array( 'premier-league' => 'АПЛ', 'la-liga' => 'Ла Лига', 'serie-a' => 'Серия А', 'bundesliga' => 'Бундеслига', 'ligue-1' => 'Лига 1', 'russian-premier-league' => 'РПЛ', ); if ($slug !== '' && isset($map[$slug])) { return $map[$slug]; } return 'Прогноз ИИ'; } } if (!function_exists('sportwtf_predictions_hub_league_id_label')) { function sportwtf_predictions_hub_league_id_label($leagueId) { static $map = array( 235 => 'РПЛ', 39 => 'АПЛ', 140 => 'Ла Лига', 78 => 'Бундеслига', 135 => 'Серия А', 61 => 'Лига 1', ); $lid = (int)$leagueId; return isset($map[$lid]) ? $map[$lid] : 'Футбол'; } } if (!function_exists('sportwtf_predictions_force_https_url')) { /** * Абсолютные ссылки с http:// → https:// (продакшен). Localhost / 127.0.0.1 не трогаем. * * @param string $url * @return string */ function sportwtf_predictions_force_https_url($url) { $url = trim((string)$url); if ($url === '' || !preg_match('#^http://#i', $url)) { return $url; } $host = parse_url($url, PHP_URL_HOST); if (is_string($host) && $host !== '') { $h = strtolower($host); if ($h === 'localhost' || $h === '127.0.0.1') { return $url; } } return preg_replace('#^http://#i', 'https://', $url, 1); } } if (!function_exists('sportwtf_predictions_hub_row_url')) { function sportwtf_predictions_hub_row_url($modx, $resourceId) { $resourceId = (int)$resourceId; $siteUrl = rtrim($modx->getOption('site_url', null, ''), '/'); $url = $modx->makeUrl($resourceId, '', '', 'full'); if (!is_string($url) || $url === '') { $url = $siteUrl . $modx->makeUrl($resourceId); } $res = $modx->getObject('modResource', $resourceId, false); if ($res) { $uri = trim((string)$res->get('uri'), '/'); $home = rtrim($siteUrl, '/'); if (($url === $home || $url === $home . '/') && $uri !== '') { $url = $home . '/' . ltrim($uri, '/'); } } return sportwtf_predictions_force_https_url($url); } } if (!function_exists('sportwtf_predictions_hub_team_abbr')) { function sportwtf_predictions_hub_team_abbr($team) { if (!empty($team['code']) && is_string($team['code'])) { $c = trim($team['code']); if ($c !== '' && strlen($c) <= 4) { return strtoupper($c); } } $name = isset($team['name']) ? (string)$team['name'] : ''; $clean = preg_replace('/[^a-zA-Z]/u', '', $name); if (strlen($clean) >= 3) { return strtoupper(substr($clean, 0, 3)); } $name = preg_replace('/\s+/u', '', $name); return strtoupper(substr($name, 0, min(3, max(1, strlen($name))))); } } if (!function_exists('sportwtf_predictions_hub_merge_friendlies')) { function sportwtf_predictions_hub_merge_friendlies($dataDir) { $map = array(); if (!@is_dir($dataDir)) { return $map; } $predFilesGl = @glob(rtrim($dataDir, '/') . '/predictions_friendlies_*.json'); if (!is_array($predFilesGl) || $predFilesGl === array()) { return $map; } usort($predFilesGl, function ($a, $b) { return filemtime($a) - filemtime($b); }); foreach ($predFilesGl as $pf) { $predRaw = @file_get_contents($pf); if ($predRaw === false || $predRaw === '') { continue; } $predDec = @json_decode($predRaw, true); if (!is_array($predDec) || empty($predDec['by_fixture_id']) || !is_array($predDec['by_fixture_id'])) { continue; } foreach ($predDec['by_fixture_id'] as $fid => $row) { $map[(string)(int)$fid] = $row; } } return $map; } } if (!function_exists('sportwtf_predictions_hub_find_match')) { function sportwtf_predictions_hub_find_match($dataDir, $fixtureId, array $insight) { $fixtureId = (int)$fixtureId; $dates = array(); foreach (array('fixture_date', 'date', 'generated_at') as $k) { if (!empty($insight[$k])) { $t = @strtotime((string)$insight[$k]); if ($t !== false) { $dates[] = date('Y-m-d', $t); } } } $dates[] = date('Y-m-d', strtotime('-1 day')); $dates[] = date('Y-m-d'); $dates[] = date('Y-m-d', strtotime('+1 day')); $dates = array_unique($dates); foreach ($dates as $d) { $path = rtrim($dataDir, '/') . '/fixtures_' . $d . '.json'; if (!is_readable($path)) { continue; } $raw = @file_get_contents($path); if ($raw === false || $raw === '') { continue; } $dec = @json_decode($raw, true); if (!is_array($dec)) { continue; } foreach ($dec as $m) { if (!is_array($m) || empty($m['fixture']['id'])) { continue; } if ((int)$m['fixture']['id'] !== $fixtureId) { continue; } return $m; } } return null; } } if (!function_exists('sportwtf_predictions_hub_render_pred_card')) { function sportwtf_predictions_hub_render_pred_card($home, $away, $predRow, $cardExtra = null) { $ph = isset($predRow['p_home']) ? (float)$predRow['p_home'] : null; $pd = isset($predRow['p_draw']) ? (float)$predRow['p_draw'] : null; $pa = isset($predRow['p_away']) ? (float)$predRow['p_away'] : null; if ($ph === null || $pd === null || $pa === null) { return ''; } $cardExtra = is_array($cardExtra) ? $cardExtra : array(); $dlgId = isset($cardExtra['data_dlg']) ? trim((string)$cardExtra['data_dlg']) : ''; $predUrl = sportwtf_predictions_force_https_url(isset($cardExtra['prediction_url']) ? trim((string)$cardExtra['prediction_url']) : ''); $rootClass = 'sportwtf-pred-card sportwtf-pred-card--hub-compare'; if (!empty($cardExtra['root_class'])) { $rootClass .= ' ' . trim((string)$cardExtra['root_class']); } $modelStrip = (isset($cardExtra['model_strip']) && is_array($cardExtra['model_strip'])) ? $cardExtra['model_strip'] : null; $hasModelStrip = $modelStrip !== null && (!empty($modelStrip['label']) || !empty($modelStrip['icon'])); if ($hasModelStrip) { $rootClass .= ' sportwtf-pred-card--with-model-strip'; } $fmt = function ($x) { return htmlspecialchars(number_format($x, 1, '.', '') . '%', ENT_QUOTES, 'UTF-8'); }; $pctTargetAttr = function ($x) { return htmlspecialchars(number_format((float)$x, 1, '.', ''), ENT_QUOTES, 'UTF-8'); }; $hubFullName = function ($team, $predRow, $side) { $n = ''; if ($side === 'home' && !empty($predRow['home_name']) && is_string($predRow['home_name'])) { $n = trim((string)$predRow['home_name']); } elseif ($side === 'away' && !empty($predRow['away_name']) && is_string($predRow['away_name'])) { $n = trim((string)$predRow['away_name']); } if ($n === '' && is_array($team) && !empty($team['name'])) { $n = trim((string)$team['name']); } if ($n === '') { if ($side === 'home' && !empty($predRow['home_abbr'])) { return strtoupper(substr((string)$predRow['home_abbr'], 0, 3)); } if ($side === 'away' && !empty($predRow['away_abbr'])) { return strtoupper(substr((string)$predRow['away_abbr'], 0, 3)); } return sportwtf_predictions_hub_team_abbr($team); } return $n; }; $ha = $hubFullName($home, $predRow, 'home'); $aa = $hubFullName($away, $predRow, 'away'); $hl = function_exists('sportwtf_media_url') ? sportwtf_media_url(isset($home['logo']) ? $home['logo'] : '', 'team', isset($home['id']) ? (int)$home['id'] : 0) : (isset($home['logo']) ? $home['logo'] : ''); $al = function_exists('sportwtf_media_url') ? sportwtf_media_url(isset($away['logo']) ? $away['logo'] : '', 'team', isset($away['id']) ? (int)$away['id'] : 0) : (isset($away['logo']) ? $away['logo'] : ''); $aria = isset($cardExtra['aria_label']) ? (string)$cardExtra['aria_label'] : 'Вероятности исхода'; $outerClose = ''; if ($predUrl !== '') { $out = ''; $outerClose = ''; } elseif ($dlgId !== '') { $out = '
'; } else { $out = '
'; } if ($hasModelStrip) { $stripLabel = isset($modelStrip['label']) ? trim((string)$modelStrip['label']) : ''; $stripLabelEsc = $stripLabel !== '' ? htmlspecialchars($stripLabel, ENT_QUOTES, 'UTF-8') : ''; $stripIcon = isset($modelStrip['icon']) ? trim((string)$modelStrip['icon']) : ''; $stripImgClass = 'sportwtf-pred-card-model-strip-img'; if (!empty($modelStrip['icon_class'])) { $stripImgClass .= ' ' . trim((string)$modelStrip['icon_class']); } $out .= ''; $out .= '
'; } $out .= '
'; $out .= '
'; if (!empty($hl)) { $out .= '' . htmlspecialchars($ha, ENT_QUOTES, 'UTF-8') . ''; } else { $out .= '' . htmlspecialchars($ha, ENT_QUOTES, 'UTF-8') . ''; } $out .= '0.0%
'; $out .= '
'; if (!empty($al)) { $out .= '' . htmlspecialchars($aa, ENT_QUOTES, 'UTF-8') . ''; } else { $out .= '' . htmlspecialchars($aa, ENT_QUOTES, 'UTF-8') . ''; } $out .= '0.0%
'; $out .= '
'; $out .= '
DRAW0.0%
'; if ($hasModelStrip) { $out .= '
'; } $out .= $outerClose; return $out; } } $predictionsRoot = (int)$modx->getOption('predictionsRoot', $scriptProperties, 0); if ($predictionsRoot <= 0) { $predictionsRoot = (int)$modx->getOption('sportwtf_predictions_parent_id', null, 0); } $predictionTplId = (int)$modx->getOption('predictionTemplateId', $scriptProperties, 9); $limit = (int)$modx->getOption('limit', $scriptProperties, 300); if ($limit < 1) { $limit = 300; } if ($limit > 500) { $limit = 500; } if (!$modx->resource) { return ''; } $currentId = (int)$modx->resource->get('id'); $useFlat = ((int)$modx->getOption('flatList', $scriptProperties, 0) === 1) || ($predictionsRoot > 0 && $currentId === $predictionsRoot); $layout = strtolower(trim((string)$modx->getOption('layout', $scriptProperties, ''))); if ($layout === '') { $layout = ($useFlat ? 'compare' : 'feed'); } if (!in_array($layout, array('compare', 'feed'), true)) { $layout = 'compare'; } if (!$useFlat) { $layout = 'feed'; } $claudeLeagues = array(39, 140, 135, 78, 61, 235); $dataDir = rtrim($modx->getOption('core_path', null, ''), '/') . '/data/sportwtf/'; $assetsUrl = rtrim($modx->getOption('assets_url', null, '/assets/'), '/'); $claudeMarkUrl = $assetsUrl . '/images/claude-analyst.svg'; $apiSportsLogoUrl = $assetsUrl . '/images/api-sports-logo.png'; /* ---------- Режим compare: insight JSON + friendlies + fixtures ---------- */ if ($layout === 'compare' && $useFlat) { $friendliesMap = sportwtf_predictions_hub_merge_friendlies($dataDir); $insightGl = @glob(rtrim($dataDir, '/') . '/predictions_claude/insight_*.json'); if (!is_array($insightGl)) { $insightGl = array(); } $insights = array(); foreach ($insightGl as $ip) { $ir = @file_get_contents($ip); if ($ir === false || $ir === '') { continue; } $idec = @json_decode($ir, true); if (!is_array($idec) || empty($idec['fixture_id']) || empty($idec['text'])) { continue; } $lid = isset($idec['league_id']) ? (int)$idec['league_id'] : 0; if (!in_array($lid, $claudeLeagues, true)) { continue; } $fid = (int)$idec['fixture_id']; $insights[] = $idec; } if ($insights === array()) { return '

Прогнозов ИИ пока нет (нет insight_*.json).

'; } usort($insights, function ($a, $b) { $ta = 0; $tb = 0; foreach (array('fixture_date', 'date') as $k) { if (!empty($a[$k]) && $ta === 0) { $ta = @strtotime((string)$a[$k]); } if (!empty($b[$k]) && $tb === 0) { $tb = @strtotime((string)$b[$k]); } } if ($ta === false) { $ta = 0; } if ($tb === false) { $tb = 0; } return (int)$tb - (int)$ta; }); $insights = array_slice($insights, 0, $limit); $dialogs = array(); ob_start(); ?>
isset($idec['home']) ? $idec['home'] : '—', 'logo' => ''); $away = isset($m['teams']['away']) ? $m['teams']['away'] : array('name' => isset($idec['away']) ? $idec['away'] : '—', 'logo' => ''); } else { $home = array('name' => isset($idec['home']) ? $idec['home'] : '—', 'logo' => ''); $away = array('name' => isset($idec['away']) ? $idec['away'] : '—', 'logo' => ''); } $pkey = (string)$fixtureId; $apiRow = (!empty($friendliesMap[$pkey]) && is_array($friendliesMap[$pkey])) ? $friendliesMap[$pkey] : null; $cPredUrl = sportwtf_predictions_force_https_url(isset($idec['prediction_url']) ? trim((string)$idec['prediction_url']) : ''); $hasClaudePct = isset($idec['p_home'], $idec['p_draw'], $idec['p_away']); $claudeHtml = ''; if ($hasClaudePct) { $predRowClaude = array( 'p_home' => (float)$idec['p_home'], 'p_draw' => (float)$idec['p_draw'], 'p_away' => (float)$idec['p_away'], ); $cDlgId = 'sportwtf-claude-dlg-hub-' . $fixtureId; $claudeHtml = sportwtf_predictions_hub_render_pred_card($home, $away, $predRowClaude, array( 'data_dlg' => $cPredUrl === '' ? $cDlgId : '', 'prediction_url' => $cPredUrl, 'root_class' => 'sportwtf-pred-card--claude-pct', 'aria_label' => 'Claude: оценка исходов', 'model_strip' => array( 'label' => 'CLAUDE', 'icon' => $claudeMarkUrl, ), )); } $apiHtml = ''; if ($apiRow !== null) { $apiHtml = sportwtf_predictions_hub_render_pred_card($home, $away, $apiRow, array( 'aria_label' => 'Прогноз API Sports (API-Football predictions)', 'root_class' => 'sportwtf-pred-card--api-sports-pred', 'model_strip' => array( 'label' => 'API SPORTS', 'icon' => $apiSportsLogoUrl, 'icon_class' => 'sportwtf-pred-card-model-strip-img--api-sports', ), )); } $kickTs = false; if ($m && !empty($m['fixture']['date'])) { $kickTs = @strtotime((string)$m['fixture']['date']); } if ($kickTs === false) { $kickTs = !empty($idec['fixture_date']) ? @strtotime((string)$idec['fixture_date']) : false; } $kickLabel = ($kickTs !== false && $kickTs > 0) ? date('d.m H:i', $kickTs) : ''; $leagueLabel = sportwtf_predictions_hub_league_id_label(isset($idec['league_id']) ? $idec['league_id'] : 0); if ($cPredUrl === '' && $hasClaudePct && !empty($idec['text'])) { $cDlgId = 'sportwtf-claude-dlg-hub-' . $fixtureId; $dialogs[] = array( 'id' => $cDlgId, 'home' => isset($idec['home']) ? $idec['home'] : $home['name'], 'away' => isset($idec['away']) ? $idec['away'] : $away['name'], 'text' => (string)$idec['text'], ); } ?>
Нет оценки Claude (PCT_JSON) для этого матча
Нет блока API (запустите cron_friendlies_predictions или проверьте predictions_friendlies_*.json)
'; $sectionHtml .= '
'; $sectionHtml .= '

Прогноз Claude

'; $sectionHtml .= '
'; $sectionHtml .= '

' . htmlspecialchars($dlg['home'], ENT_QUOTES, 'UTF-8') . ' — ' . htmlspecialchars($dlg['away'], ENT_QUOTES, 'UTF-8') . '

'; $sectionHtml .= '
' . nl2br(htmlspecialchars($dlg['text'], ENT_QUOTES, 'UTF-8')) . '
'; $sectionHtml .= '

Оценка исходов на карточке — субъективная; не гарантия результата.

'; $sectionHtml .= ''; } if ($dialogs !== array()) { $sectionHtml .= ''; } $sectionHtml .= ''; return $sectionHtml; } /* ---------- Режим feed (MODX-ресурсы) ---------- */ $rowsOut = array(); if ($useFlat && $predictionsRoot > 0 && $predictionTplId > 0) { $c = $modx->newQuery('modResource'); $c->where(array( 'template' => $predictionTplId, 'published' => 1, 'deleted' => 0, )); $c->sortby('publishedon', 'DESC'); $all = $modx->getCollection('modResource', $c); foreach ($all as $res) { if (!sportwtf_predictions_hub_under_root($modx, $res, $predictionsRoot)) { continue; } $uri = trim((string)$res->get('uri'), '/'); if ($uri !== '' && stripos($uri, 'football/predictions/') !== 0) { continue; } $pub = (int)$res->get('publishedon'); $title = trim((string)$res->get('pagetitle')); if ($title === '') { continue; } $rowsOut[] = array( 'id' => (int)$res->get('id'), 'title' => $title, 'published' => $pub, 'league_label' => sportwtf_predictions_hub_league_label($uri), ); } usort($rowsOut, function ($a, $b) { return (int)$b['published'] - (int)$a['published']; }); $rowsOut = array_slice($rowsOut, 0, $limit); } else { $c = $modx->newQuery('modResource'); $c->where(array( 'parent' => $currentId, 'published' => 1, 'deleted' => 0, )); $collection = $modx->getCollection('modResource', $c); if (empty($collection)) { return '

В этом разделе пока нет страниц.

'; } $rows = array_values($collection); usort($rows, function ($a, $b) { $fa = (int)$a->get('isfolder'); $fb = (int)$b->get('isfolder'); if ($fa !== $fb) { return $fb - $fa; } if (!$fa && !$fb) { return (int)$b->get('publishedon') - (int)$a->get('publishedon'); } return strcasecmp((string)$a->get('pagetitle'), (string)$b->get('pagetitle')); }); foreach ($rows as $r) { $id = (int)$r->get('id'); $isFolder = (bool)$r->get('isfolder'); $pub = (int)$r->get('publishedon'); $title = trim((string)$r->get('pagetitle')); if ($title === '') { continue; } $uri = trim((string)$r->get('uri'), '/'); $rowsOut[] = array( 'id' => $id, 'title' => $title, 'published' => $pub, 'league_label' => $isFolder ? 'Раздел' : sportwtf_predictions_hub_league_label($uri), ); } } if ($rowsOut === array()) { return '

Прогнозов пока нет.

'; } ob_start(); ?>
    0 ? date('d.m H:i', $r['published']) : ''; $label = $r['league_label']; ?>