mirror of
https://github.com/Ladebeze66/devsite.git
synced 2026-03-27 09:53:46 +01:00
113 lines
3.1 KiB
JavaScript
113 lines
3.1 KiB
JavaScript
const fs = require('fs');
|
|
const path = require('path');
|
|
|
|
// Configuration
|
|
const API_BASE_URL = 'https://api.fernandgrascalvet.com/api';
|
|
const OUTPUT_DIR = './extract/raw';
|
|
|
|
// Endpoints à extraire
|
|
const ENDPOINTS = [
|
|
{ name: 'projects', url: '/projects?populate=*' },
|
|
{ name: 'competences', url: '/competences?populate=*' },
|
|
{ name: 'homepages', url: '/homepages?populate=*' }
|
|
];
|
|
|
|
// Créer le dossier de sortie s'il n'existe pas
|
|
if (!fs.existsSync(OUTPUT_DIR)) {
|
|
fs.mkdirSync(OUTPUT_DIR, { recursive: true });
|
|
}
|
|
|
|
// Fonction pour extraire les données d'un endpoint
|
|
async function extractEndpoint(endpoint) {
|
|
try {
|
|
console.log(`🔄 Extraction de ${endpoint.name}...`);
|
|
|
|
const response = await fetch(`${API_BASE_URL}${endpoint.url}`);
|
|
|
|
if (!response.ok) {
|
|
throw new Error(`HTTP ${response.status}: ${response.statusText}`);
|
|
}
|
|
|
|
const data = await response.json();
|
|
|
|
// Sauvegarder dans un fichier JSON
|
|
const filename = `${endpoint.name}-raw.json`;
|
|
const filepath = path.join(OUTPUT_DIR, filename);
|
|
|
|
fs.writeFileSync(filepath, JSON.stringify(data, null, 2), 'utf8');
|
|
|
|
console.log(`✅ ${endpoint.name}: ${data.data?.length || 1} éléments sauvegardés dans ${filename}`);
|
|
|
|
return {
|
|
endpoint: endpoint.name,
|
|
success: true,
|
|
count: data.data?.length || 1,
|
|
file: filename
|
|
};
|
|
|
|
} catch (error) {
|
|
console.error(`❌ Erreur lors de l'extraction de ${endpoint.name}:`, error.message);
|
|
|
|
return {
|
|
endpoint: endpoint.name,
|
|
success: false,
|
|
error: error.message
|
|
};
|
|
}
|
|
}
|
|
|
|
// Fonction principale
|
|
async function extractAllData() {
|
|
console.log('🚀 Début de l\'extraction des données Strapi...\n');
|
|
|
|
const results = [];
|
|
|
|
// Extraire chaque endpoint
|
|
for (const endpoint of ENDPOINTS) {
|
|
const result = await extractEndpoint(endpoint);
|
|
results.push(result);
|
|
|
|
// Pause entre les requêtes pour éviter de surcharger l'API
|
|
await new Promise(resolve => setTimeout(resolve, 500));
|
|
}
|
|
|
|
// Résumé final
|
|
console.log('\n📊 Résumé de l\'extraction:');
|
|
console.log('================================');
|
|
|
|
let totalSuccess = 0;
|
|
let totalItems = 0;
|
|
|
|
results.forEach(result => {
|
|
if (result.success) {
|
|
console.log(`✅ ${result.endpoint}: ${result.count} éléments`);
|
|
totalSuccess++;
|
|
totalItems += result.count;
|
|
} else {
|
|
console.log(`❌ ${result.endpoint}: ${result.error}`);
|
|
}
|
|
});
|
|
|
|
console.log(`\n🎯 ${totalSuccess}/${ENDPOINTS.length} endpoints extraits avec succès`);
|
|
console.log(`📁 ${totalItems} éléments au total sauvegardés dans ${OUTPUT_DIR}/`);
|
|
|
|
// Sauvegarder un fichier de résumé
|
|
const summary = {
|
|
extractedAt: new Date().toISOString(),
|
|
results: results,
|
|
totalEndpoints: ENDPOINTS.length,
|
|
successfulEndpoints: totalSuccess,
|
|
totalItems: totalItems
|
|
};
|
|
|
|
fs.writeFileSync(
|
|
path.join(OUTPUT_DIR, 'extraction-summary.json'),
|
|
JSON.stringify(summary, null, 2),
|
|
'utf8'
|
|
);
|
|
|
|
console.log('📄 Résumé sauvegardé dans extraction-summary.json');
|
|
}
|
|
|
|
// Exécuter le script
|
|
extractAllData().catch(console.error); |