import axios from 'axios'; import * as fs from 'fs'; import * as zlib from 'zlib'; import minimist from 'minimist'; interface Options { url: string; outputFile?: string; category?: string; gzip?: boolean; } /** * @name downloadFile * @description Télécharger un fichier d'open data csv gzippé et le mettre dans le dossier etalab_data dans une certaine catégorie * * Utilisation: * * npx ts-node unzip_csv.ts -u https://www.data.gouv.fr/fr/datasets/r/16a20f4e-0c06-40ff-adda-54f214099e5f -o panneaux_limite_de_vitesse_fr_panoramax_detections.csv -z * */ async function downloadFile(options: Options): Promise { try { const response = await axios.get(options.url, { responseType: 'arraybuffer' }); if (!options.outputFile) { throw new Error('Le nom du fichier de sortie est requis'); } if (options.gzip) { const gunzip = zlib.createGunzip(); const output = fs.createWriteStream(options.outputFile); gunzip.pipe(output); gunzip.end(response.data); } else { fs.writeFileSync('etalab_data/' + options.category + '/' + options.outputFile, response.data); } console.log(`Fichier téléchargé avec succès et enregistré en tant que ${options.outputFile}`); } catch (error: any) { console.error(`Erreur lors du téléchargement du fichier : ${error.message}`); } } const args = minimist(process.argv.slice(2), { alias: { url: 'u', outputFile: 'o', gzip: 'z', category: 'c', }, default: { category: 'panneaux', outputFile: 'panneaux_limite_de_vitesse_fr.csv', url: 'https://www.data.gouv.fr/fr/datasets/r/16a20f4e-0c06-40ff-adda-54f214099e5f' }, }); if (!args.url) { console.error('L\'URL est requise. Utilisez -u ou --url'); process.exit(1); } const options: Options = { url: args.url, outputFile: args.outputFile, category: args.category, gzip: args.gzip === true }; downloadFile(options);