159 lines
4.4 KiB
Python
159 lines
4.4 KiB
Python
#!/usr/bin/env python3
|
|
"""
|
|
TurfFish Bridge - Connect Turf Scraper à MiroFish
|
|
"""
|
|
import sqlite3
|
|
import json
|
|
import os
|
|
from datetime import datetime, date
|
|
from pathlib import Path
|
|
|
|
DB_PATH = "/home/h3r7/turf_scraper/turf.db"
|
|
OUTPUT_DIR = "/home/h3r7/MiroFish/docs/turf_data"
|
|
|
|
def get_upcoming_races(days_ahead=1):
|
|
"""Récupère les courses à venir depuis la DB"""
|
|
conn = sqlite3.connect(DB_PATH)
|
|
conn.row_factory = sqlite3.Row
|
|
c = conn.cursor()
|
|
|
|
today = date.today().isoformat()
|
|
from datetime import timedelta
|
|
future = (date.today() + timedelta(days=days_ahead)).isoformat()
|
|
|
|
c.execute("""
|
|
SELECT DISTINCT date, race_name, race_hippodrome, race_time
|
|
FROM predictions
|
|
WHERE date >= ? AND date <= ?
|
|
ORDER BY date, race_time
|
|
""", (today, future))
|
|
|
|
races = c.fetchall()
|
|
conn.close()
|
|
return races
|
|
|
|
def get_race_details(race_date, race_name):
|
|
"""Récupère les détails d'une course (chevaux, cotes, pronostics)"""
|
|
conn = sqlite3.connect(DB_PATH)
|
|
conn.row_factory = sqlite3.Row
|
|
c = conn.cursor()
|
|
|
|
# Predictions pour cette course
|
|
c.execute("""
|
|
SELECT horse_number, horse_name, odds, prediction_rank, source
|
|
FROM predictions
|
|
WHERE date = ? AND race_name = ?
|
|
ORDER BY prediction_rank
|
|
""", (race_date, race_name))
|
|
|
|
horses = c.fetchall()
|
|
|
|
# Résultats existants (si course passée)
|
|
c.execute("""
|
|
SELECT position, horse_name, odds
|
|
FROM results
|
|
WHERE date = ? AND race_name = ?
|
|
ORDER BY position
|
|
""", (race_date, race_name))
|
|
|
|
results = c.fetchall()
|
|
conn.close()
|
|
|
|
return {
|
|
"predictions": [dict(h) for h in horses],
|
|
"results": [dict(r) for r in results] if results else None
|
|
}
|
|
|
|
def generate_mirofish_input(race_date, race_name, race_hippodrome, race_time, horses):
|
|
"""Génère un fichier Markdown compatible MiroFish"""
|
|
|
|
markdown = f"""# Course du {race_date} - {race_name}
|
|
|
|
## Informations
|
|
|
|
- **Date**: {race_date}
|
|
- **Hippodrome**: {race_hippodrome}
|
|
- **Heure**: {race_time}
|
|
|
|
## Chevaux partants
|
|
|
|
"""
|
|
for h in horses:
|
|
rank = h.get('prediction_rank', '')
|
|
name = h.get('horse_name', '')
|
|
odds = h.get('odds', 'N/A')
|
|
number = h.get('horse_number', '')
|
|
source = h.get('source', '')
|
|
|
|
markdown += f"### {number}. {name}\n"
|
|
if rank:
|
|
markdown += f"- **Classement prédit**: {rank}e choix\n"
|
|
if odds and odds != 'N/A':
|
|
markdown += f"- **Cote**: {odds}\n"
|
|
if source:
|
|
markdown += f"- **Source**: {source}\n"
|
|
markdown += "\n"
|
|
|
|
# Ajouter contexte marché
|
|
markdown += """## Contexte des parieurs
|
|
|
|
Les parieurs hippiques suivent généralement:
|
|
- Les pronostics des tipsters professionnels
|
|
- Les cotes des bookmakers
|
|
- La forme récente des chevaux
|
|
- Les statistiques jockeys/entraineurs
|
|
|
|
## Objectif de prédiction
|
|
|
|
Prédire:
|
|
1. Le favori probable basé sur les cotes et pronostics
|
|
2. Les outsiders intéressante pour les places
|
|
3. La réaction du "marché" (parieurs) à cette course
|
|
"""
|
|
|
|
return markdown
|
|
|
|
def export_races_to_mirofish(days_ahead=1):
|
|
"""Exporte les courses à venir vers des fichiers MiroFish"""
|
|
|
|
# Créer le dossier de sortie
|
|
os.makedirs(OUTPUT_DIR, exist_ok=True)
|
|
|
|
races = get_upcoming_races(days_ahead)
|
|
|
|
if not races:
|
|
print("Aucune course à venir trouvée")
|
|
return
|
|
|
|
print(f"Exported {len(races)} courses")
|
|
|
|
for race in races:
|
|
race_date = race['date']
|
|
race_name = race['race_name']
|
|
race_hippodrome = race['race_hippodrome']
|
|
race_time = race['race_time']
|
|
|
|
# Récupérer les détails
|
|
details = get_race_details(race_date, race_name)
|
|
horses = details['predictions']
|
|
|
|
if not horses:
|
|
print(f"Pas de pronostics pour {race_name}")
|
|
continue
|
|
|
|
# Générer le fichier Markdown
|
|
content = generate_mirofish_input(
|
|
race_date, race_name, race_hippodrome, race_time, horses
|
|
)
|
|
|
|
# Nom de fichier safe
|
|
safe_name = f"{race_date}_{race_name.replace(' ', '_')[:30]}.md"
|
|
filepath = os.path.join(OUTPUT_DIR, safe_name)
|
|
|
|
with open(filepath, 'w', encoding='utf-8') as f:
|
|
f.write(content)
|
|
|
|
print(f"✓ {safe_name}")
|
|
|
|
if __name__ == "__main__":
|
|
export_races_to_mirofish(days_ahead=2) |