Exemples de code

Documentation complète et exemples pratiques

📚 Exemples de code

JavaScript / Node.js

Client API complet

class BetTrackerClient {
  constructor(apiKey, baseURL = 'https://bettracker.io/api/v1') {
    this.apiKey = apiKey;
    this.baseURL = baseURL;
  }

  async executeTool(tool, args = {}) {
    const response = await fetch(`${this.baseURL}/tools/execute`, {
      method: 'POST',
      headers: {
        'X-API-Key': this.apiKey,
        'Content-Type': 'application/json'
      },
      body: JSON.stringify({ tool, arguments: args })
    });

    if (!response.ok) {
      const error = await response.json();
      throw new Error(`API error: ${error.message || response.statusText}`);
    }

    return response.json();
  }

  // 📊 Statistiques & Paris
  async getUserStats(period = 'month') {
    return this.executeTool('get_user_stats', { period }); // all | month | week
  }

  async getRecentBets(limit = 10) {
    return this.executeTool('get_recent_bets', { limit }); // max 10
  }

  async getBudgetStatus() {
    return this.executeTool('get_budget_status');
  }

  async getUserSettings() {
    return this.executeTool('get_user_settings');
  }

  // 🏇 Statistiques hippiques (sur vos paris)
  async getPmuStats() {
    return this.executeTool('get_pmu_stats');
  }

  async getMyHippodromes() {
    return this.executeTool('get_my_hippodromes');
  }

  async getHippodromeStats(code) {
    return this.executeTool('get_hippodrome_stats', { code });
  }

  async getMyBetHorses() {
    return this.executeTool('get_my_bet_horses');
  }

  async getMyJockeyStats() {
    return this.executeTool('get_my_jockey_stats');
  }

  async getMyHorseJockeyCombinations() {
    return this.executeTool('get_my_horse_jockey_combinations');
  }

  async getMyCrossStats() {
    return this.executeTool('get_my_cross_stats');
  }
}

Exemples d'utilisation

// Initialiser le client
const client = new BetTrackerClient('btk_votre_clé');

// Statistiques du mois
const stats = await client.getUserStats('month');
console.log(`ROI: ${stats.data.roi}, Win Rate: ${stats.data.win_rate}`);

// 10 derniers paris
const bets = await client.getRecentBets(10);
console.log('Derniers paris:', bets.data);

// Mes hippodromes et leurs performances
const hippodromes = await client.getMyHippodromes();
console.log('Mes hippodromes:', hippodromes.data);

// Statistiques d'un hippodrome précis
const vincennes = await client.getHippodromeStats('VIN');
console.log('Vincennes:', vincennes.data);

// Meilleures combinaisons cheval-jockey
const combos = await client.getMyHorseJockeyCombinations();
console.log('Combinaisons:', combos.data);

Python

Client API complet

import requests
from typing import Dict, Any, Optional

class BetTrackerClient:
    def __init__(self, api_key: str, base_url: str = 'https://bettracker.io/api/v1'):
        self.api_key = api_key
        self.base_url = base_url
        self.session = requests.Session()
        self.session.headers.update({
            'X-API-Key': api_key,
            'Content-Type': 'application/json'
        })

    def execute_tool(self, tool: str, arguments: Optional[Dict[str, Any]] = None) -> Dict:
        response = self.session.post(
            f'{self.base_url}/tools/execute',
            json={'tool': tool, 'arguments': arguments or {}}
        )
        response.raise_for_status()
        return response.json()

    # 📊 Statistiques & Paris
    def get_user_stats(self, period: str = 'month') -> Dict:
        return self.execute_tool('get_user_stats', {'period': period})  # all | month | week

    def get_recent_bets(self, limit: int = 10) -> Dict:
        return self.execute_tool('get_recent_bets', {'limit': limit})  # max 10

    def get_budget_status(self) -> Dict:
        return self.execute_tool('get_budget_status')

    def get_user_settings(self) -> Dict:
        return self.execute_tool('get_user_settings')

    # 🏇 Statistiques hippiques (sur vos paris)
    def get_pmu_stats(self) -> Dict:
        return self.execute_tool('get_pmu_stats')

    def get_my_hippodromes(self) -> Dict:
        return self.execute_tool('get_my_hippodromes')

    def get_hippodrome_stats(self, code: str) -> Dict:
        return self.execute_tool('get_hippodrome_stats', {'code': code})

    def get_my_bet_horses(self) -> Dict:
        return self.execute_tool('get_my_bet_horses')

    def get_my_jockey_stats(self) -> Dict:
        return self.execute_tool('get_my_jockey_stats')

    def get_my_horse_jockey_combinations(self) -> Dict:
        return self.execute_tool('get_my_horse_jockey_combinations')

    def get_my_cross_stats(self) -> Dict:
        return self.execute_tool('get_my_cross_stats')

Exemples d'utilisation

# Initialiser le client
client = BetTrackerClient('btk_votre_clé')

# Statistiques du mois
stats = client.get_user_stats('month')
print(f"ROI: {stats['data']['roi']}, Win Rate: {stats['data']['win_rate']}")

# Derniers paris
bets = client.get_recent_bets(limit=10)
print('Derniers paris:', bets['data'])

# Mes hippodromes et leurs performances
hippodromes = client.get_my_hippodromes()
print('Mes hippodromes:', hippodromes['data'])

# Statistiques de mes jockeys
jockeys = client.get_my_jockey_stats()
print('Mes jockeys:', jockeys['data'])

# Statistiques croisées
cross = client.get_my_cross_stats()
print('Stats croisées:', cross['data'])

React / Next.js

Hook personnalisé TypeScript

import { useState, useEffect } from 'react';

const API_KEY = process.env.NEXT_PUBLIC_BETTRACKER_API_KEY;
const API_URL = process.env.NEXT_PUBLIC_BETTRACKER_API_URL || 'https://bettracker.io/api/v1';

interface ToolResult<T> {
  success: boolean;
  tool: string;
  data: T;
}

export function useBetTrackerTool<T>(tool: string, args?: any) {
  const [data, setData] = useState<T | null>(null);
  const [loading, setLoading] = useState(true);
  const [error, setError] = useState<Error | null>(null);

  useEffect(() => {
    async function fetchData() {
      try {
        setLoading(true);
        const response = await fetch(`${API_URL}/tools/execute`, {
          method: 'POST',
          headers: {
            'X-API-Key': API_KEY!,
            'Content-Type': 'application/json'
          },
          body: JSON.stringify({ tool, arguments: args || {} })
        });

        if (!response.ok) {
          throw new Error(`API error: ${response.statusText}`);
        }

        const result: ToolResult<T> = await response.json();
        setData(result.data);
      } catch (err) {
        setError(err as Error);
      } finally {
        setLoading(false);
      }
    }

    fetchData();
  }, [tool, JSON.stringify(args)]);

  return { data, loading, error };
}

// Composant exemple - Dashboard
function DashboardStats() {
  const { data: stats, loading, error } = useBetTrackerTool('get_user_stats', { period: 'month' });

  if (loading) return <div>Chargement...</div>;
  if (error) return <div>Erreur: {error.message}</div>;
  if (!stats) return null;

  return (
    <div className="grid grid-cols-4 gap-4">
      <div className="p-4 bg-white rounded-lg shadow">
        <h3 className="text-sm text-gray-500">Paris total</h3>
        <p className="text-2xl font-bold">{stats.total_bets}</p>
      </div>
      <div className="p-4 bg-white rounded-lg shadow">
        <h3 className="text-sm text-gray-500">Win Rate</h3>
        <p className="text-2xl font-bold text-green-600">{stats.win_rate}</p>
      </div>
      <div className="p-4 bg-white rounded-lg shadow">
        <h3 className="text-sm text-gray-500">ROI</h3>
        <p className="text-2xl font-bold text-blue-600">{stats.roi}</p>
      </div>
      <div className="p-4 bg-white rounded-lg shadow">
        <h3 className="text-sm text-gray-500">Profit</h3>
        <p className="text-2xl font-bold">{stats.total_profit}€</p>
      </div>
    </div>
  );
}

// Composant exemple - Mes hippodromes
function MyHippodromes() {
  const { data, loading, error } = useBetTrackerTool('get_my_hippodromes');

  if (loading) return <p>Chargement des hippodromes...</p>;
  if (error) return <p>Erreur: {error.message}</p>;
  if (!data) return null;

  return (
    <div>
      <h2 className="text-xl font-bold mb-4">Mes hippodromes</h2>
      <div className="space-y-2">
        {(data.hippodromes || []).map((hippo, index) => (
          <div key={index} className="p-3 bg-gray-50 rounded">
            <span className="font-semibold">{hippo.name}</span> — {hippo.bets} paris
          </div>
        ))}
      </div>
    </div>
  );
}

Dashboard complet

Récupérer toutes les données en parallèle

async function getDashboardData(apiKey) {
  const client = new BetTrackerClient(apiKey);

  // Exécuter plusieurs requêtes en parallèle
  const [stats, recentBets, budget, hippodromes, jockeys] = await Promise.all([
    client.getUserStats('month'),
    client.getRecentBets(10),
    client.getBudgetStatus(),
    client.getMyHippodromes(),
    client.getMyJockeyStats()
  ]);

  return {
    stats: stats.data,
    recentBets: recentBets.data,
    budget: budget.data,
    hippodromes: hippodromes.data,
    jockeys: jockeys.data
  };
}

// Utilisation
const dashboard = await getDashboardData('btk_votre_clé');
console.log('Dashboard complet:', dashboard);

📚 Ressources

💡 Besoin d'aide ?

Consultez notre chatbot IA pour une assistance personnalisée

Ouvrir le chatbot →

🔑 Clé API

Générez votre clé API pour utiliser ces intégrations

Gérer mes clés →

📊 Statistiques

Explorez vos données PMU et paris hippiques

Voir mes stats →