- Amélioration rendu CSS des images dans PlaceCard - Ajout propriétés imageRendering pour meilleure qualité - Ajout loading='lazy' et fetchPriority='high' - Script Node.js pour télécharger images haute résolution - Guide README pour télécharger images Google Maps en HD - APK rebuild
154 lines
4.8 KiB
JavaScript
Executable File
154 lines
4.8 KiB
JavaScript
Executable File
#!/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);
|
|
|