30.10.26
Difficulté des matchs FPL en Python : guide API11 min de lecture2 291 mots

Difficulté des matchs FPL en Python : guide API

Lisez les notes FDR de l’API FPL et classez les prochains matchs en Python : champs utiles, script prêt à lancer et limites à connaître.

difficulté des matchs FPLAPI FPL Pythonfixture difficulty ratingcalendrier Fantasy Premier Leaguescript Python FPL
Difficulté des matchs FPL en Python : guide API

Exploiter la difficulté des matchs FPL avec l'API et Python

Préparer une équipe en Fantasy Premier League, ce n'est pas seulement chercher les clubs qui jouent bien. Il y a aussi le calendrier : un joueur peut sembler intéressant, mais enchaîner des adversaires coriaces. Pour ça, FPL fournit un Fixture Difficulty Rating (FDR), une note associée à chaque rencontre. L'API gratuite de la FPL permet de récupérer ces données et de les mettre en forme dans un tableau, sans clé d'accès.

Le vrai travail n'est pas « d'appeler une API ». C'est de savoir à quoi correspond chaque valeur, de gérer les semaines sans match, et de ne pas confondre un indicateur de difficulté avec une prédiction de points. Dans cet article, je vous montre où trouver les champs FDR, ce qu'ils semblent refléter, puis comment classer les cinq prochaines journées en Python. Le code gère les doubles journées et les matchs dont la journée n'est pas encore attribuée. Les exemples correspondent à une lecture faite le 14 octobre 2026 : comme l'API se met à jour, vos résultats peuvent varier.

Où trouver la difficulté des matchs dans l'API FPL

L'API publique de Fantasy Premier League expose les rencontres et leurs notes de difficulté dans fixtures/. Pour les matchs à venir, utilisez fixtures/?future=1. Vous pouvez aussi filtrer une journée précise avec fixtures/?event={gw}. L'API ne demande pas de clé, mais elle ne renvoie pas d'en-tête CORS : si vous essayez depuis un navigateur, ça peut échouer. En pratique, un script Python exécuté côté serveur (ou sur votre machine) est plus simple.

Les champs à connaître

Chaque rencontre contient des identifiants d'équipe, une journée éventuelle, et deux notes :

  • team_h : identifiant de l'équipe à domicile ;
  • team_a : identifiant de l'équipe à l'extérieur ;
  • team_h_difficulty : difficulté, vue du côté de l'équipe à domicile ;
  • team_a_difficulty : difficulté, vue du côté de l'équipe à l'extérieur ;
  • event : numéro de la journée (peut valoir null si le match n'est pas encore calé).

Les identifiants numériques ne sont pas faits pour être lus. bootstrap-static/ contient la liste des équipes : son champ teams permet de mapper un identifiant vers un nom court (par exemple ARS ou CHE).

Un exemple de ligne de rencontre :

{

"id": 64,

"event": 7,

"kickoff_time": "2026-10-17T11:30:00Z",

"team_h": 9,

"team_a": 6,

"team_h_difficulty": 4,

"team_a_difficulty": 3,

"finished": false,

"started": false

}

Ici, l'équipe à domicile a une note de difficulté de 4 et l'équipe à l'extérieur une note de 3. Les deux valeurs ne sont pas « deux scores de la même rencontre », mais deux lectures depuis le point de vue de chaque équipe.

Une autre vue par joueur

Vous pouvez aussi utiliser element-summary/{player_id}/. Dans fixtures, vous trouverez une valeur difficulty et un booléen is_home. C'est pratique pour vérifier le calendrier d'un joueur : comparez les rencontres renvoyées ici avec celles que vous construisez depuis fixtures/ pour le club.

Dans la lecture du 14 octobre 2026, par exemple, un joueur de Chelsea avait, pour les journées 7 à 11, les mêmes adversaires et notes que la ligne du club : Everton à l'extérieur (3), Tottenham à domicile (2), Manchester United à domicile (4), Sunderland à l'extérieur (3) et Leeds à domicile (3). Cette vérification aide à repérer une confusion facile entre domicile et extérieur dans votre propre traitement.

Que mesure réellement la note FDR

FPL ne publie pas la formule de calcul du FDR. Donc on doit distinguer ce que l'API permet de vérifier de ce qu'on pourrait supposer. Sur l'instantané du 14 octobre 2026, les notes semblaient correspondre aux champs strength_overall_home et strength_overall_away de l'équipe adverse, avec une correspondance stable sur l'ensemble des 380 rencontres examinées.

Une note liée à l'adversaire et au lieu

Les « forces » se trouvent dans bootstrap-static/, sous teams. Leurs noms peuvent prêter à confusion : ils décrivent la force globale de l'équipe selon le contexte domicile/extérieur. Ensuite, la difficulté affichée pour un match dépend du point de vue de la rencontre.

Dans l'échantillon étudié, on retrouvait exactement :

  • team_h_difficulty = strength_overall_home de l'adversaire visiteur (380 fois) ;
  • team_a_difficulty = strength_overall_away de l'équipe qui reçoit (380 fois).

Ça donne une correspondance très propre pour ce relevé, mais ce n'est pas une formule « officialisée » par FPL.

Concrètement : une note FDR ne dit pas « à quel point l'équipe est en forme actuellement ». C'est plutôt une lecture de l'adversaire, avec une nuance domicile/extérieur. Par exemple, dans l'échantillon de 2026, Arsenal avait une force globale de 4 à domicile et de 5 à l'extérieur ; les notes attribuées aux adversaires variaient en conséquence, selon que le match se jouait au Emirates ou à l'extérieur.

Une échelle à interpréter avec prudence

La documentation de l'API ne détaille pas le calcul, et rien ne garantit que la distribution reste identique chaque saison. Sur le 14 octobre 2026, les valeurs allaient de 2 à 5 : aucune rencontre n'avait une note 1. Le plus raisonnable est donc de traiter ça comme une échelle FDR « usuelle » de 1 à 5, tout en vérifiant les valeurs réellement présentes dans la réponse au moment où vous interrogez l'API.

FPL peut aussi ajuster ses estimations. Donc, si vous faites une analyse, récupérez fixtures/ juste avant, au lieu de réutiliser des données vieilles de plusieurs semaines. Et attention aussi : les champs strength, strength_attack_* et strength_defence_* ne sont pas forcément exploitables automatiquement. Dans l'échantillon de 2026, strength était nul et les sous-champs d'attaque et de défense étaient à zéro. Le fait qu'un champ existe dans une réponse ne veut pas dire qu'il est renseigné ou pertinent dans votre cas.

Comment classer les cinq prochaines journées en Python

Le script ci-dessous récupère la liste des équipes, puis les matchs à venir. Il choisit les cinq prochaines journées à partir de l'événement marqué comme « prochain », et construit une ligne par équipe avec ses adversaires, le lieu du match, et la difficulté.

Installez d'abord la dépendance si besoin : pip install requests. Le code n'utilise ni clé API ni service tiers.

import requests

API = "https://fantasy.premierleague.com/api/"

session = requests.Session()

session.headers["User-Agent"] = "fpl-fdr/1.0 (script personnel)"

bootstrap = session.get(API + "bootstrap-static/", timeout=30).json()

teams = {team["id"]: team["short_name"] for team in bootstrap["teams"]}

next_gw = next(event["id"] for event in bootstrap["events"] if event["is_next"])

horizon = range(next_gw, next_gw + 5)

fixtures = session.get(API + "fixtures/?future=1", timeout=30).json()

runs = {team_id: [] for team_id in teams}

for fixture in fixtures:

event = fixture["event"]

if event not in horizon:

continue

runs[fixture["team_h"]].append(

(event, teams[fixture["team_a"]], "D", fixture["team_h_difficulty"])

)

runs[fixture["team_a"]].append(

(event, teams[fixture["team_h"]], "E", fixture["team_a_difficulty"])

)

table = []

for team_id, games in runs.items():

games.sort()

average = sum(game[3] for game in games) / len(games) if games else 99

run = " ".join(

f"{opponent}({venue}){difficulty}"

for _, opponent, venue, difficulty in games

)

table.append((average, len(games), teams[team_id], run))

print(f"Difficulté des matchs, J{horizon.start}-J{horizon.stop - 1} (plus facile d'abord)")

for average, count, team, run in sorted(table):

print(f"{team:<4} moyenne {average:.1f} sur {count} match(s) : {run}")

unscheduled = sum(1 for fixture in fixtures if fixture["event"] is None)

print(f"\nRencontres futures sans journée attribuée : {unscheduled}")

Les abréviations D et E correspondent à domicile et extérieur. Le script calcule une moyenne par équipe tout en conservant le nombre de matchs inclus. Ce détail évite de comparer « un calendrier plus court » avec « un calendrier plus long » sans le signaler.

Lire et vérifier le résultat

Dans la sortie relevée le 14 octobre 2026, avant la journée 7, Coventry, Manchester City et Tottenham avaient chacun une moyenne de 2,6 sur cinq matchs. Par exemple, TOT(E)3 signifie que Tottenham est l'adversaire à l'extérieur, et que la note affichée (dans ce contexte) vaut 3.

Attention : ce sont des chiffres figés à un instant. Pour retrouver le même rendu, il faut interroger l'API au même moment et avec les mêmes rencontres programmées. Les matchs reportés ou les changements de journée peuvent modifier la sélection. Le script suppose aussi que les événements contiennent bien un marqueur is_next ; si aucune journée n'a ce marqueur, next_gw déclenche une erreur. Dans un outil utilisé régulièrement, mieux vaut ajouter une gestion d'erreur au lieu de laisser le script planter sans explication.

Quelles limites faut-il intégrer à l'analyse

Un classement FDR sert à résumer rapidement un calendrier, pas à remplacer une projection de performance. Les soucis arrivent surtout quand on agrège des journées incomplètes, ou quand on utilise le même nombre pour répondre à des questions différentes.

Journées sans match et doubles journées

Parfois, une équipe ne joue pas sur une journée (report, etc.). Un total brut de difficulté peut alors donner une impression trompeuse : moins de matchs rime souvent avec une somme plus faible, sans que le calendrier soit réellement « plus facile ». C'est pour ça que le script classe sur la moyenne et affiche le nombre de rencontres prises en compte.

À l'inverse, une double journée peut faire jouer une équipe deux fois dans la période de cinq journées. Dans ce cas, votre fenêtre contient plus de cinq matchs pour ce club. Ce n'est pas un problème à masquer : pour un manager FPL, deux matchs peuvent aussi vouloir dire deux occasions de marquer des points. Simplement, il faut comparer en tenant compte du nombre de rencontres, pas uniquement de la moyenne.

Enfin, les matchs futurs dont event vaut null ne peuvent pas être rangés dans une fenêtre par numéro de journée. Le script les met de côté pour le classement et les compte à part. Si vous voulez les analyser, conservez leur date de coup d'envoi quand elle existe, et traitez-les séparément au lieu de leur attribuer une journée « au hasard ».

Une note unique ne répond pas à tout

Le FDR condense la difficulté de l'adversaire en un seul nombre. Or un défenseur s'intéresse surtout au risque de buts encaissés, tandis qu'un attaquant cherche des occasions et une probabilité de marquer. La note ne sépare pas explicitement les aspects offensifs et défensifs de l'adversaire. Deux matchs notés pareil peuvent donc produire des profils très différents.

Si vous voulez aller plus loin, combinez le calendrier avec d'autres données : tirs, buts attendus, statistiques récentes côté joueurs, etc. Mais attention au piège classique : mélanger des signaux calculés avec des périmètres différents. En pratique, commencez par le FDR si vous cherchez un filtre rapide ; ajoutez ensuite des indicateurs plus spécialisés uniquement si ça change votre décision.

Et si le script tourne « en automatique », prévoyez aussi : un délai d'attente, une vérification du statut HTTP, et une gestion d'erreur. L'API est gratuite et accessible sans clé dans l'exemple, mais ça ne garantit ni une disponibilité constante ni une stabilité du schéma. Pour un usage personnel, une exécution manuelle suffit souvent. Pour un service récurrent, journalisez les réponses inattendues et évitez de supposer que chaque champ sera toujours présent.

Conclusion

L'API FPL fournit les notes FDR dans fixtures/, et bootstrap-static/ sert à traduire les identifiants d'équipe en noms lisibles. Avec quelques lignes de Python, vous pouvez comparer les cinq prochaines journées, afficher les adversaires, et tenir compte des rencontres manquantes ou des doubles journées.

Gardez juste en tête une règle simple : le FDR aide à structurer une première lecture du calendrier, mais il ne doit pas piloter à lui seul un transfert ou un choix de capitaine. Actualisez les données, gardez le nombre de matchs visible, et ajoutez d'autres indicateurs seulement si ça sert vraiment votre décision. C'est cette discipline qui fait que le script reste utile au-delà d'un tableau de plus.

Questions frequentes

Le FDR est généralement présenté sur une échelle de 1 à 5, où une note élevée indique un adversaire plus difficile. Dans les données relevées le 14 octobre 2026, les valeurs observées allaient de 2 à 5. Vérifiez la réponse actuelle de l’API plutôt que de supposer que toutes les notes sont utilisées.
Non, les ressources utilisées ici sont accessibles sans clé. L’absence d’en-tête CORS peut toutefois empêcher un appel direct depuis une page web. Utilisez un script Python, un serveur ou un autre environnement côté serveur pour effectuer la requête.
Une équipe peut avoir moins de matchs dans la période, notamment à cause d’une journée sans rencontre. Son total de difficulté serait alors artificiellement plus bas. La moyenne limite ce biais, à condition d’afficher aussi le nombre de matchs pour ne pas masquer une fenêtre incomplète.
Non. Il synthétise la difficulté associée à l’adversaire, mais ne prédit pas directement les points. Il ne distingue pas complètement les enjeux offensifs et défensifs et ne tient pas lieu d’analyse de forme, de temps de jeu ou de statistiques individuelles.

Articles similaires