Skip to main content
FFBB Data Client Logo

🏀 API FFBB (Python SDK) — ffbb-data-client

Client Officiel & Asynchrone pour l'API de la Fédération Française de BasketBall (2026)

Le SDK Python moderne, ultra-rapide, asynchrone et typé pour exploiter l'API de la Fédération Française de BasketBall (FFBB) : clubs, compétitions nationales & régionales, scores en direct (lives), classements, calendriers, gymnases/salles et détection de niveau.

Alternative officielle, haute performance et maintenue aux anciens packages obsolètes ffbb-api-client et ffbb-api-client-v2.

PyPI version Python versions CI Status Coverage

MCP Ready License Code Style: Black Packaged with uv GitHub Stars API Website


⚡ Démarrage Rapide • 📍 Recherche Géo & Clubs • 🔥 Cas d'Usage • 🧵 Streaming Async • 🤖 Intégration IA / MCP • 🌐 API REST • 📖 Documentation

🔄 Cartographie API synchronisée : 162 collections Directus OpenAPI cartographiées, 17 index Meilisearch surveillés.


🏆 Pourquoi choisir ffbb-data-client ?

Fonctionnalité Ancien client (ffbb-api-client) ffbb-data-client (v2.4+)
Origine Directus & Anti-403 ❌ Bloqué en 403 Forbidden (BunnyCDN) ✅ Origine directe bo.ffbb.com + multi-miroirs
Architecture Asynchrone Native ❌ 100% bloquant / synchrone ✅ Async native (async/await + aiter)
Modèles de Données & Typage ❌ Dictionnaires bruts sans type ✅ Dataclasses & Pydantic v2 validés
Recherche Meilisearch Instantanée ❌ Partielle ou absente ✅ Multi-index (Clubs, Salles, Poules, 3x3)
Recherche Géographique par GPS ❌ Non disponible ✅ Rayon kilométrique autour de coordonnées
Streaming de Masse (Pagination auto) ❌ Manuelle, risque d'OOM ✅ Générateurs streaming aiter_all_*
Résolution d'Adresses de Salles ❌ Nom brut souvent vide ✅ Résolution physique complète (Gymnase, Rue, CP, Ville)
Compatibilité IA & Agents MCP ❌ Incompatible ✅ Connecteur natif Model Context Protocol
Couverture de Tests & Fiabilité ⚠️ < 30% ✅ 680+ tests unitaires & 100% Zero-Red CI

📦 Installation

Installez la dernière version stable via pip ou uv :

# Via pip standard
pip install ffbb-data-client

# Via uv (recommandé pour la rapidité)
uv add ffbb-data-client

Options supplémentaires

# Avec le serveur d'API REST FastAPI intégré
pip install "ffbb-data-client[server]"

# Pour le développement local et la suite de tests complète
pip install "ffbb-data-client[testing]"

Prérequis : Python >=3.10.


⚡ Démarrage Rapide (30 secondes)

Aucun compte développeur ni clé d'API compliquée : FFBBDataClient.create() résout et rafraîchit automatiquement les tokens publics nécessaires :

from ffbb_data_client import FFBBDataClient

# Initialisation en une seule ligne (zéro configuration requise)
client = FFBBDataClient.create()

# 1. Rechercher un club de basket en France
clubs = client.search_organismes("Clermont", limit=3)
for club in clubs.hits:
    print(f"🏀 {club.nom} ({club.codePostal} {club.commune}) - ID: {club.id}")

# 2. Consulter les scores et matchs en direct (Lives FFBB)
lives = client.get_lives()
print(f"Matchs suivis en direct : {len(lives)}")

# 3. Explorer les rencontres d'une compétition (ex: Nationale 1 Masculine)
rencontres = client.search_rencontres("NM1", limit=5)
for m in rencontres.hits:
    print(f"📅 {m.date_rencontre} : {m.equipe1} vs {m.equipe2}")

📍 Recherche Géographique & Clubs de France

Idéal pour concevoir des applications mobiles, des cartes interactives ou des annuaires de basketball :

🌍 Trouver tous les clubs autour d'un point GPS

# Exemple : Clubs dans un rayon de 20 km autour de Lyon / Clermont-Ferrand
clubs = client.search_organismes_by_geo(
    lat=45.7772,
    lng=3.0870,
    radius_km=20,
    limit=15,
)

for club in clubs.hits:
    print(f"📍 {club.nom} à {club.commune} [{club.geo}]")

🔍 Recherche ciblée par Code Postal, Ville ou Catégorie

# Filtrer par département ou code postal
organismes = client.search_organismes(
    "Basket",
    filter=['codePostal = "63000"'],
    sort=["nom:asc"],
    limit=10,
)

🔥 Recettes & Cas d'Usage Concrets

1. Suivre les classements et résultats d'une poule
from ffbb_data_client import FFBBDataClient

client = FFBBDataClient.create()

# Récupération complète d'une poule de championnat
poule = client.get_poule(11111)

print(f"Championnat : {poule.nom}")
for rk in poule.classement or []:
    print(f"#{rk.position} {rk.organisme_nom} - {rk.points} pts ({rk.victoires}V - {rk.defaites}D)")
2. Résoudre l'adresse complète et exacte d'un gymnase
# Fini les adresses partielles : résolution déterministe certifiée FFBB
salles = client.search_salles("Maison des Sports", limit=3)
for salle in salles.hits:
    print(f"🏟️ {salle.nom} : {salle.adresse}, {salle.codePostal} {salle.ville}")
3. Détection automatique du niveau et de la catégorie (U13, R1, D2...)
from ffbb_data_client import NiveauExtractor, NiveauType

# Détection intelligente du niveau hiérarchique
niveau = NiveauExtractor.extract_niveau("RÉGIONALE MASCULINE SENIORS - DIVISION 2")
print(niveau.type)       # NiveauType.REGIONAL
print(niveau.division)   # 2
4. Extraire les contacts d'un club (Président, Correspondant, Email)
# Contacts administratifs officiels
contacts = client.get_club_contacts(organisme_id=9326)
if contacts:
    print(f"Club : {contacts.club_contact.nom}")
    print(f"Email : {contacts.club_contact.email}")
    for membre in contacts.membres:
        print(f" - {membre.role} : {membre.prenom} {membre.nom} ({membre.email})")

🧵 Haute Performance & Streaming Asynchrone

Pour traiter de gros volumes de données sans saturer la mémoire vive ni bloquer la boucle d'événements :

import asyncio
from ffbb_data_client import FFBBDataClient

async def main():
    client = FFBBDataClient.create()

    # Streaming asynchrone mémoire-constant (aiter)
    count = 0
    async for rencontre in client.aiter_all_rencontres(page_size=100, max_items=500):
        count += 1
        if count % 100 == 0:
            print(f"Traitement du match #{count} : {rencontre.id}")

    # Recherche asynchrone non-bloquante
    results = await client.search_organismes_async("ASVEL")
    print(f"Résultats trouvés : {results.estimated_total_hits}")

asyncio.run(main())

🤖 IA, Agents & MCP Server

Le SDK ffbb-data-client est le moteur officiel du serveur Model Context Protocol (MCP) pour le basket français.

Il permet aux LLMs (Claude, ChatGPT, Cursor, Gemini, Antigravity) d'interagir nativement avec les championnats de basket :

  • 💬 "Quels sont les prochains matchs du SCBA ce week-end ?"
  • 💬 "Donne-moi le classement de la Poule Haute U13M2."
  • 💬 "Quelle est l'adresse exacte de la salle pour le match de samedi ?"

👉 Découvrez le projet dédié : FFBB-MCP-Server


🌐 Serveur REST FastAPI Embarqué

Besoin d'une API web pour votre application React, Vue, Next.js ou mobile ? ffbb-data-client intègre une API FastAPI prête à l'emploi :

# Démarrer le serveur API local
uvicorn ffbb_data_client.api:app --host 0.0.0.0 --port 8000 --reload

Accédez ensuite à la documentation Swagger interactive sur http://localhost:8000/docs !

Endpoints phares :

  • GET /health : Statut de santé et horodatage UTC.
  • GET /api/v1/club/{id}/matches : Calendrier optimisé du club avec adresses de salles résolues.
  • GET /api/v1/lives : Matchs en direct agrégés.

📚 Référence des Méthodes (Sync & Async)

💡 Pattern standard : Toutes les méthodes existent en version synchrone (nom()) et asynchrone (nom_async()).

Domaine Méthodes (Sync & Async) Description
🌐 Multi-Search multi_search()
multi_search_async()
Recherche globale simultanée sur tous les index Meilisearch
🏀 Clubs & Organismes search_organismes()
search_organismes_async()
Recherche par nom, commune, département ou code postal
📍 Géo-Localisation search_organismes_by_geo()
search_organismes_by_geo_async()
Recherche de clubs par rayon GPS (lat/lng, km)
👤 Contacts Club get_club_contacts()
get_club_contacts_async()
Fiche contacts officielle (président, correspondants, emails)
📅 Rencontres & Matchs search_rencontres()
search_rencontres_async()
Calendriers, résultats de matchs et scores
⚡ Streaming Continu aiter_all_rencontres() Générateur asynchrone paginé en streaming (aiter)
🏟️ Salles & Gymnases search_salles()
search_salles_async()
Adresses physiques complètes, gymnases et coordonnées
🏆 Compétitions search_competitions()
search_competitions_async()
Championnats nationaux (NM1, LF2...), régionaux, départ.
📊 Poules & Classement get_poule()
get_poule_async()
Classement officiel complet (V/D, pts) et matchs de poule
⚡ Scores en Direct get_lives()
get_lives_async()
Flux officiel des scores en temps réel (Lives FFBB)
🎯 Tournois 3x3 search_tournois()
search_tournois_async()
Tournois officiels homologués 3x3 FFBB

🛠️ Robustesse, CI/CD & Découverte Quotidienne

  • Origine Directus & Anti-403 : Bascule native vers l'origine Directus https://bo.ffbb.com/ (et fallback miroir https://bo.ffbb.app/) avec User-Agent mobile Safari authentique, éliminant définitivement les erreurs 403 Forbidden de l'ancienne pullzone BunnyCDN.
  • Auto-Résolution des Tokens : Découverte et rotation dynamiques des jetons Bearer Directus et Meilisearch sans configuration requise.
  • Découverte Quotidienne du Schéma : Un cron GitHub Actions analyse chaque matin à 5h17 UTC l'OpenAPI spec officielle de la FFBB et détecte automatiquement tout nouveau champ ou collection Directus.
  • Cache Intelligent Sécurisé : Gestionnaire de cache HTTP hishel avec SQLite distinct pour les flux synchrones et asynchrones.
  • CodeQL & Zéro Dette : Conformité aux normes de sécurité, zéro alerte d'injection de log, 100% typé.

⚙️ Configuration & Variables d'Environnement

Le SDK fonctionne instantanément sans configuration. Des variables d'environnement permettent de surcharger les comportements réseaux si nécessaire :

Variable Description Valeur par défaut
API_FFBB_BASE_URL URL de base du backend Directus https://bo.ffbb.com/
FFBB_USER_AGENT En-tête User-Agent transmis aux requêtes iOS Safari Mobile
API_FFBB_APP_BEARER_TOKEN Jeton Directus explicite (override l'auto-résolution) Auto-résolu dynamiquement
MEILISEARCH_BEARER_TOKEN Jeton Meilisearch explicite (override l'auto-résolution) Auto-résolu dynamiquement
HTTP_PROXY / HTTPS_PROXY Proxy HTTP/HTTPS sortant (ex: swarm / environnement conteneurisé) Aucun

🤝 Contribuer

Les contributions, signalements de bugs et suggestions sont les bienvenus !

  1. Forkez le projet.
  2. Créez une branche (git checkout -b feat/ma-nouvelle-fonctionnalite).
  3. Installez l'environnement de développement : pip install -e ".[testing]".
  4. Vérifiez que tous les tests passent : pytest tests/ et pre-commit run --all-files.
  5. Ouvrez une Pull Request claire et documentée.

📄 Licence

Distribué sous la licence Apache-2.0. Voir LICENSE.txt pour plus de détails.


Développé avec passion pour la communauté du basketball français. 🇫🇷🏀

Si cette bibliothèque vous est utile, n'hésitez pas à ajouter une étoile ⭐ sur GitHub pour encourager le projet !

GitHub stars

Metadata

Release files for ffbb-data-client 2.4.39

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for ffbb-data-client 2.4.39
File Size Uploaded
ffbb_data_client-2.4.39.tar.gz 696.1 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for ffbb-data-client 2.4.39
File Interpreter ABI Platform
ffbb_data_client-2.4.39-py3-none-any.whl Python 3 none any Details

Total release size: 961.7 kB

Release files / ffbb_data_client-2.4.39.tar.gz

Download URL ffbb_data_client-2.4.39.tar.gz
Size 696.1 kB
Tags Source
SHA-256 checksum
How to use checksums
b28d9738d05aa3b94dbb16397e3d2b7207a125351e60a338d4d8cde9034dec15
BLAKE2b-256 checksum
How to use checksums
57d2ca0fd5ed7b0b279df0ecb6175ce6e6db15b4afd85bab5d4ab52627fe5b5c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.13

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 14, 2026.

Transparency log

Release files / ffbb_data_client-2.4.39-py3-none-any.whl

Download URL ffbb_data_client-2.4.39-py3-none-any.whl
Size 265.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
68b56f74e4da0fca4f2bac5bfcf107884a1120916b91465788670a8c7ccd7b2d
BLAKE2b-256 checksum
How to use checksums
68656f7e237c7b50de6ebc428043d747afbbf4f3b54abf79f6015756bbae746b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.13

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 14, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

2.4.39 This release

2 release files

2.4.38

2 release files

2.4.37

2 release files

2.4.36

2 release files

2.4.35

2 release files

2.4.34

2 release files

2.4.33

2 release files

2.4.32

2 release files

2.4.31

2 release files

2.4.30

2 release files

2.4.29

2 release files

2.4.28

2 release files

2.4.27

2 release files

2.4.26

2 release files

2.4.25

2 release files

2.4.24

2 release files

2.4.23

2 release files

2.4.22

2 release files

2.4.21

2 release files

2.4.20

2 release files

2.4.19

2 release files

2.4.18

2 release files

2.4.17

2 release files

2.4.16

2 release files

2.4.15

2 release files

2.4.14

2 release files

2.4.13

2 release files

2.4.12

2 release files

2.4.11

2 release files

2.4.10

2 release files

2.4.9

2 release files

2.4.8

2 release files

2.4.7

2 release files

2.4.6

2 release files

2.4.5

2 release files

2.4.4

2 release files

2.4.3

2 release files

2.4.2

2 release files

2.4.1

2 release files

2.4.0

2 release files

2.3.5

2 release files

2.3.4

2 release files

2.3.3

2 release files

2.3.2

2 release files

2.3.1

2 release files

2.3.0

2 release files

2.2.0

2 release files

2.1.0

2 release files

2.0.2

2 release files

2.0.1

2 release files

2.0.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page