diff --git a/src/Controller/AdminController.php b/src/Controller/AdminController.php index f53d7fd..a0439e6 100644 --- a/src/Controller/AdminController.php +++ b/src/Controller/AdminController.php @@ -357,5 +357,17 @@ final class AdminController extends AbstractController return $response; } - + #[Route('/admin/export_csv/{zip_code}', name: 'app_admin_export_csv')] + public function export_csv(string $zip_code): Response + { + $stats = $this->entityManager->getRepository(Stats::class)->findOneBy(['zone' => $zip_code]); + $response = new Response($this->motocultrice->export($zip_code)); + $response->headers->set('Content-Type', 'text/csv'); + + $slug_name = str_replace(' ', '-', $stats->getName()); + + $response->headers->set('Content-Disposition', 'attachment; filename="osm-commerces-export_' . $zip_code . '_' . $slug_name . '_' . date('Y-m-d_H-i-s') . '.csv"'); + + return $response; + } } diff --git a/src/Service/Motocultrice.php b/src/Service/Motocultrice.php index 4efe93e..b031206 100644 --- a/src/Service/Motocultrice.php +++ b/src/Service/Motocultrice.php @@ -61,6 +61,39 @@ class Motocultrice ]; + + + public function export($zone) { + $query = $this->get_export_query($zone); + try { + $response = $this->client->request('GET', 'https://overpass-api.de/api/interpreter', [ + 'query' => [ + 'data' => $query + ] + ]); + + return $response->getContent(); + } catch (\Exception $e) { + return "Erreur lors de la requĂȘte Overpass : " . $e->getMessage(); + } + + } + + public function get_export_query($zone) { + return <<.france; +area["postal_code"="{$zone}"](area.france)->.searchArea; +( + nw["amenity"~"^(cafe|bar|restaurant|library|cinema|fast_food|post_office|marketplace|community_centre|theatre|bank|townhall)$"](area.searchArea); + nw["shop"](area.searchArea); + nw["healthcare"](area.searchArea); + nw["office"](area.searchArea); +); +out body; +QUERY; + } + public function get_query_places($zone) { return <<