#!/usr/bin/env node /** * Script pour télécharger les images Google Maps en haute résolution * * Usage: * node scripts/download-high-res-images.js * * Ce script télécharge les images depuis les URLs Google Maps en modifiant * les paramètres de taille pour obtenir une meilleure résolution. */ const fs = require('fs'); const path = require('path'); const https = require('https'); const http = require('http'); const IMAGES_DIR = path.join(__dirname, '..', 'public', 'images'); // Configuration des images à télécharger // Format: { name, url, outputFile } // Les URLs doivent être les URLs directes des images Google Maps (googleusercontent.com) // Pour obtenir ces URLs: // 1. Ouvrez le lien Google Maps dans un navigateur // 2. Faites un clic droit sur l'image > Inspecter l'élément // 3. Copiez l'URL de l'image (généralement sur googleusercontent.com) // 4. Modifiez les paramètres w=XXX par w=1600 et h=YYY par h=1200 dans l'URL const IMAGES_TO_DOWNLOAD = [ // Exemple (à remplacer par les vraies URLs): // { // name: "Snack du Requin Dormeur", // url: "https://lh3.googleusercontent.com/...w=1600-h=1200-k-no", // outputFile: "restaurant-requin-dormeur.jpg" // }, ]; /** * Télécharge une image depuis une URL */ function downloadImage(url, outputPath) { return new Promise((resolve, reject) => { const protocol = url.startsWith('https') ? https : http; const file = fs.createWriteStream(outputPath); protocol.get(url, (response) => { if (response.statusCode === 200) { response.pipe(file); file.on('finish', () => { file.close(); resolve(); }); } else if (response.statusCode === 301 || response.statusCode === 302) { // Suivre les redirections file.close(); fs.unlinkSync(outputPath); downloadImage(response.headers.location, outputPath) .then(resolve) .catch(reject); } else { file.close(); fs.unlinkSync(outputPath); reject(new Error(`Erreur HTTP ${response.statusCode}`)); } }).on('error', (err) => { file.close(); if (fs.existsSync(outputPath)) { fs.unlinkSync(outputPath); } reject(err); }); }); } /** * Vérifie si un fichier est une image valide */ function isValidImage(filePath) { try { const stats = fs.statSync(filePath); if (stats.size === 0) return false; // Vérifier l'extension const ext = path.extname(filePath).toLowerCase(); return ['.jpg', '.jpeg', '.png', '.webp'].includes(ext); } catch (err) { return false; } } /** * Fonction principale */ async function main() { console.log('========================================'); console.log('📥 Téléchargement images haute résolution'); console.log('========================================\n'); // Créer le dossier images s'il n'existe pas if (!fs.existsSync(IMAGES_DIR)) { fs.mkdirSync(IMAGES_DIR, { recursive: true }); } if (IMAGES_TO_DOWNLOAD.length === 0) { console.log('⚠️ Aucune URL d\'image configurée dans le script.\n'); console.log('Pour télécharger des images en haute résolution:'); console.log('1. Ouvrez le lien Google Maps dans un navigateur'); console.log('2. Faites un clic droit sur l\'image > Inspecter l\'élément'); console.log('3. Copiez l\'URL de l\'image (généralement sur googleusercontent.com)'); console.log('4. Modifiez les paramètres w=XXX par w=1600 et h=YYY par h=1200'); console.log('5. Ajoutez l\'URL dans le tableau IMAGES_TO_DOWNLOAD du script\n'); console.log('Exemple d\'URL Google Maps image:'); console.log('https://lh3.googleusercontent.com/gps-cs-s/...w=1600-h=1200-k-no\n'); return; } let successCount = 0; let failCount = 0; for (const image of IMAGES_TO_DOWNLOAD) { const outputPath = path.join(IMAGES_DIR, image.outputFile); console.log(`📸 Téléchargement: ${image.name}`); console.log(` URL: ${image.url.substring(0, 80)}...`); try { await downloadImage(image.url, outputPath); if (isValidImage(outputPath)) { const stats = fs.statSync(outputPath); const sizeMB = (stats.size / (1024 * 1024)).toFixed(2); console.log(` ✅ Téléchargé: ${image.outputFile} (${sizeMB} MB)\n`); successCount++; } else { console.log(` ❌ Fichier invalide: ${image.outputFile}\n`); failCount++; } } catch (error) { console.log(` ❌ Erreur: ${error.message}\n`); failCount++; } } console.log('========================================'); console.log('✅ Téléchargement terminé'); console.log('========================================'); console.log(`✅ Succès: ${successCount}`); console.log(`❌ Échecs: ${failCount}\n`); } // Exécuter le script main().catch(console.error);