Skip to content
Snippets Groups Projects

Roussmou main patch 50643

1 file
+ 112
1
Compare changes
  • Side-by-side
  • Inline
+ 112
1
okay errtn
\ No newline at end of file
import http.server
import socketserver
from urllib.parse import urlparse, parse_qs, unquote
import json
import sqlite3
import os
# Configuration du serveur
port_serveur = 8080
BD_name = "ProjetB-Pluviometrie.sqlite" # Nom de la base de données SQLite
static_dir = os.path.dirname(os.path.abspath(__file__)) # Répertoire contenant les fichiers statiques
class RequestHandler(http.server.SimpleHTTPRequestHandler):
"""Classe dérivée pour traiter les requêtes entrantes"""
def __init__(self, *args, **kwargs):
"""Initialise le gestionnaire avec le répertoire des fichiers statiques"""
super().__init__(*args, directory=static_dir, **kwargs)
def do_GET(self):
"""Gère les requêtes GET"""
# Analyse le chemin de la requête
self.init_params()
if self.path_info[0] == 'stations': # Route pour récupérer les stations
self.send_stations()
elif self.path_info[0] == 'create': # Route pour gérer la création des marqueurs
self.create_map_data()
else:
super().do_GET() # Gère les fichiers statiques par défaut
def send_stations(self):
"""Récupère et envoie les données des stations pluviométriques"""
try:
# Connexion à la base de données
conn = sqlite3.connect(BD_name)
cursor = conn.cursor()
# Exécuter la requête pour récupérer les coordonnées
cursor.execute("SELECT lon, lat FROM 'stations-pluvio'")
stations = cursor.fetchall()
conn.close()
# Debug : Afficher les données récupérées
print("Stations récupérées :", stations)
# Préparer les données au format JSON
data = [{'lon': lon, 'lat': lat} for lon, lat in stations]
response = json.dumps(data)
# Envoyer la réponse au client
self.send_response(200)
self.send_header("Content-Type", "application/json")
self.end_headers()
self.wfile.write(bytes(response, "utf-8"))
except Exception as e:
# Gestion des erreurs
print("Erreur lors de l'accès à la base de données :", e)
self.send_response(500)
self.end_headers()
self.wfile.write(bytes("Erreur serveur", "utf-8"))
def create_map_data(self):
"""Crée les données nécessaires pour afficher les marqueurs sur la carte"""
try:
# Connexion à la base de données
conn = sqlite3.connect(BD_name)
cursor = conn.cursor()
# Récupérer les coordonnées des stations
cursor.execute("SELECT lon, lat FROM 'stations-pluvio'")
stations = cursor.fetchall()
conn.close()
# Construire un fichier JavaScript pour la carte
map_data = """
var map = L.map('map').setView([45.75, 4.85], 12);
L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {
attribution: '&copy; <a href="http://osm.org/copyright">OpenStreetMap</a> contributors'
}).addTo(map);
"""
for lon, lat in stations:
map_data += f"L.marker([{lat}, {lon}]).addTo(map).bindPopup('Station: [{lat}, {lon}]');\n"
# Envoyer le fichier JavaScript
self.send_response(200)
self.send_header("Content-Type", "application/javascript")
self.end_headers()
self.wfile.write(bytes(map_data, "utf-8"))
except Exception as e:
# Gestion des erreurs
print("Erreur lors de la création des données pour la carte :", e)
self.send_response(500)
self.end_headers()
self.wfile.write(bytes("Erreur serveur", "utf-8"))
def init_params(self):
"""Initialise les paramètres de la requête"""
info = urlparse(self.path)
self.path_info = [unquote(v) for v in info.path.split('/')[1:]]
# Vérification de la base de données
if not os.path.exists(BD_name):
raise FileNotFoundError(f"Base de données {BD_name} non trouvée !")
# Instanciation et lancement du serveur
httpd = socketserver.TCPServer(("", port_serveur), RequestHandler)
print("Serveur lancé sur le port :", port_serveur)
httpd.serve_forever()
Loading