📚 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