Files
ecoles/api/import_dpe.php
T
Arnaud 5633969d98 Version initiale — carte des établissements scolaires
Carte Leaflet (annuaire Éducation nationale) + API PHP/MySQL :
fiche établissement (effectifs, IPS, population INSEE, DPE ADEME),
GED documents/photos, commentaires par groupe, gestion utilisateurs
et politique de mots de passe. Imports opendata (effectifs, IPS,
population, DPE, IRIS).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-03 21:35:41 +02:00

48 lines
1.7 KiB
PHP

<?php
/**
* Import des DPE ADEME + rattachement aux établissements (super-admin).
* POST body { dep?: "75", radius?: 80 }
* → télécharge le dataset DPE tertiaire, remplit « dpe », puis rattache
* les DPE aux écoles par proximité (table « etab_dpe »).
*
* ⚠ Opération longue (le dataset complet ≈ 532 000 DPE) : à réserver à un
* import ponctuel. Pour de gros volumes, préférez les scripts CLI
* (php import_dpe.php ; php match_dpe.php). Accès Internet requis côté serveur.
*/
declare(strict_types=1);
require __DIR__ . '/dpe_lib.php';
try {
require_super();
if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
json_error('Méthode non supportée.', 405);
}
set_time_limit(0);
ini_set('memory_limit', '512M');
$in = body_json();
$dep = isset($in['dep']) && $in['dep'] !== '' ? preg_replace('/[^0-9AB]/', '', strtoupper((string) $in['dep'])) : null;
$radius = isset($in['radius']) ? max(1, min(2000, (int) $in['radius'])) : 5;
$pdo = db();
$imported = dpe_import($pdo, $dep, static fn(string $m) => null);
$geo = (int) $pdo->query('SELECT COUNT(*) FROM dpe WHERE lat IS NOT NULL')->fetchColumn();
$match = dpe_match($pdo, $radius, static fn(string $m) => null);
json_out([
'ok' => true,
'imported' => $imported,
'geocoded' => $geo,
'radius' => $radius,
'links' => $match['pairs'],
'etabs' => $match['ecoles'],
'dep' => $dep,
]);
} catch (Throwable $e) {
if (isset($pdo) && $pdo->inTransaction()) {
$pdo->rollBack();
}
json_error('Import DPE : ' . $e->getMessage(), 500);
}