manque css et retour page d'accueil

This commit is contained in:
Fred Tempez 2023-07-11 14:08:23 +02:00
parent fd6123210c
commit 1ffe2763d4
3 changed files with 146 additions and 76 deletions

108
index.php
View File

@ -12,91 +12,47 @@ 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 de la div avec l'id "calendrier"
$calendrierDiv = $dom->getElementById('calendrier');
// Recherche des balises <li> dans le div
$liElements = $sommaireCentreDiv->getElementsByTagName('li');
// Récupération des liens dans la liste
$calendrierLinks = $calendrierDiv->getElementsByTagName('a');
// Tableau pour stocker les villes et leurs coordonnées
$cities = array();
// Tableau pour stocker les nodes et les URLs
$calendrier = 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;
$href = $linkElement->getAttribute('href');
//echo $ville . "<br />";
//echo "Lien : " . $href . "<br />";
// 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'];
//echo "Latitude : " . $latitude . "<br />";
//echo "Longitude : " . $longitude . "<br />";
// Ajouter la ville et ses coordonnées au tableau
$cities[] = array(
'name' => $ville,
'lat' => $latitude,
'lon' => $longitude
);
} else {
echo "Erreur : Impossible de géocoder la ville.";
}
}
// 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' => 'https://www.sabradou.com/' . $url
);
}
?>
// Afficher le tableau $calendrier
// foreach ($calendrier as $item) {
// echo "Node : " . $item['node'] . "<br />";
// echo "URL : " . $item['url'] . "<br />";
// }
?>
<!DOCTYPE html>
<html>
<head>
<title>Carte OpenStreetMap</title>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/leaflet/1.7.1/leaflet.css" />
<style>
#map {
height: 400px;
}
</style>
<title>Formulaire de sélection</title>
</head>
<body>
<div id="map"></div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/leaflet/1.7.1/leaflet.js"></script>
<script>
// Tableau des villes et des coordonnées
var cities = <?php echo json_encode($cities); ?>;
// Créer la carte
var map = L.map('map').setView([48.8566, 2.3522], 13);
// Ajouter une couche de tuiles OpenStreetMap à la carte
L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {
attribution: 'Carte OpenStreetMap'
}).addTo(map);
// Placer des marqueurs pour chaque ville sur la carte
cities.forEach(function(city) {
var marker = L.marker([city.lat, city.lon]).addTo(map);
marker.bindPopup(city.name);
});
</script>
<form action="map.php" method="GET">
<label for="calendrier-list">Sélectionnez un élément :</label>
<select name="calendrier" id="calendrier-list">
<?php foreach ($calendrier as $item) : ?>
<option value="<?php echo $item['url']; ?>"><?php echo $item['node']; ?></option>
<?php endforeach; ?>
</select>
<br>
<input type="submit" value="Afficher sur la carte">
</form>
</body>
</html>
</html>

109
map.php Normal file
View File

@ -0,0 +1,109 @@
<?php
// URL de la page à analyser
$url = $_GET['calendrier'];
// $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 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 et leurs coordonnées
$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');
//echo $ville . "<br />";
//echo "Lien : " . $href . "<br />";
// 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'];
//echo "Latitude : " . $latitude . "<br />";
//echo "Longitude : " . $longitude . "<br />";
// Ajouter la ville et ses coordonnées au tableau
$cities[] = array(
'name' => $ville,
'lat' => $latitude,
'lon' => $longitude,
'href' => $href,
);
} else {
echo "Erreur : Impossible de géocoder la ville : " . $ville;
}
}
}
?>
<!DOCTYPE html>
<html>
<head>
<title>Carte OpenStreetMap</title>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/leaflet/1.7.1/leaflet.css" />
<link rel="stylesheet" href="style.css" />
</head>
<body>
<div id="map"></div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/leaflet/1.7.1/leaflet.js"></script>
<script>
// Tableau des villes et des coordonnées
var cities = <?php echo json_encode($cities); ?>;
// Créer la carte
var map = L.map('map').setView([50.5095, 2.6683], 8);
// Ajouter une couche de tuiles OpenStreetMap à la carte
L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {
attribution: 'Carte OpenStreetMap'
}).addTo(map);
// Placer des marqueurs pour chaque ville sur la carte
cities.forEach(function (city) {
var marker = L.marker([city.lat, city.lon]).addTo(map);
marker.bindPopup(city.name);
});
// Placer des marqueurs pour chaque ville sur la carte
cities.forEach(function (city) {
var marker = L.marker([city.lat, city.lon]).addTo(map);
marker.bindPopup('<a href="' + city.href + '" target="_blank">' + city.name + '</a>');
});
</script>
</body>
</html>

5
style.css Normal file
View File

@ -0,0 +1,5 @@
#map {
height: 1600px;
width: 1200px;
margin: auto 0;
}