<?php function getCalendrier() { // URL de la page à analyser $url = 'https://www.sabradou.com/index.php'; // Récupération du contenu de la page $html = file_get_contents($url); // Création d'un objet DOMDocument $dom = new DOMDocument(); libxml_use_internal_errors(true); // Ignore les erreurs de parsing HTML $dom->loadHTML($html); libxml_clear_errors(); // Recherche de la div avec l'id "calendrier" $calendrierDiv = $dom->getElementById('calendrier'); // Récupération des liens dans la liste $calendrierLinks = $calendrierDiv->getElementsByTagName('a'); // Tableau pour stocker les nodes et les URLs $calendrier = array(); // Parcourir les liens et récupérer les nodes et les URLs foreach ($calendrierLinks as $link) { $node = $link->nodeValue; $url = $link->getAttribute('href'); $calendrier[] = array( 'node' => $node, 'url' => $url, ); } return ($calendrier); } function getCities($html) { // Création d'un objet DOMDocument $html = file_get_contents('https://www.sabradou.com/' . $html); $dom = new DOMDocument(); libxml_use_internal_errors(true); // Ignore les erreurs de parsing HTML $dom->loadHTML($html); libxml_clear_errors(); // Recherche du div avec l'id "sommaire-centre" $sommaireCentreDiv = $dom->getElementById('sommaire-centre'); // Recherche des balises <li> dans le div $liElements = $sommaireCentreDiv->getElementsByTagName('li'); // Tableau pour stocker les villes $cities = array(); // Parcourir les balises <li> et extraire le texte cliquable des liens foreach ($liElements as $liElement) { // Vérifier s'il y a un lien dans le <li> $linkElement = $liElement->getElementsByTagName('a')->item(0); if ($linkElement) { $ville = $linkElement->nodeValue; $ville = preg_replace('/^(B\s|\d{2}\s)/', '', $ville); $href = $linkElement->getAttribute('href'); $cities[] = array( 'name' => $ville, 'href' => $href, ); } } // Créer un tableau temporaire contenant les valeurs de la clé "name" $names = array_column($cities, 'name'); // Trier le tableau temporaire par ordre alphabétique array_multisort($names, SORT_ASC, $cities); ; return $cities; } function geocode($cities) { // Tableau pour stocker les villes et leurs coordonnées $citiesData = array(); // Charger les données existantes depuis la base JSON $jsonData = file_get_contents('cities.json'); $existingData = json_decode($jsonData, true); // Parcourir les villes et géocoder leurs coordonnées foreach ($cities as $city) { $ville = $city['name']; $href = $city['href']; // Vérifier si les coordonnées de la ville existent déjà dans la base if (isset($existingData[$ville])) { // Utiliser les coordonnées existantes $latitude = $existingData[$ville]['lat']; $longitude = $existingData[$ville]['lon']; } else { // Requête à l'API Nominatim $options = array( 'http' => array( 'header' => "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3", ), ); $context = stream_context_create($options); $url = 'https://nominatim.openstreetmap.org/search?city=' . urlencode($ville) . '&format=json'; $response = file_get_contents($url, false, $context); $data = json_decode($response, true); // Vérifier si la requête a réussi if (!empty($data)) { // Récupérer les coordonnées géographiques de la première correspondance $latitude = $data[0]['lat']; $longitude = $data[0]['lon']; // Stocker les coordonnées dans la base JSON $existingData[$ville] = array( 'lat' => $latitude, 'lon' => $longitude, ); } } // Ajouter la ville et ses coordonnées au tableau $citiesData[] = array( 'name' => $ville, 'lat' => $latitude, 'lon' => $longitude, 'href' => $href, ); } // Enregistrer les données mises à jour dans la base JSON file_put_contents('cities.json', json_encode($existingData)); return $citiesData; }