devsite/strapi_extraction/extract-api-data.js
2026-03-15 15:28:26 +01:00

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);