2 : Répondre aux incidents et aux demandes d'assistance et d'évolution
- 1.2.1 Traiter des demandes concernant les services réseau et système, applicatifs
5 : Mise à disposition des utilisateurs d'un service informatique
- 1.5.2 Déployer un service
Commande changePatternStructure
Cette commande permet de modifier la structure du fichier JSON afin d'y ajouter le support des langues fr et en pour internationaliser l'API.
php bin/console changePatternStructure
Elle ne prend aucun paramètre.
Commande text-to-speech
Cette commande génère les fichiers audio WAV à partir d'un fichier JSON.
php bin/console text-to-speech api genre langue fichier
Elle prend en paramètres :
- L'API de text-to-speech externe à utiliser
- Le genre de la voix :
womanouman - La langue :
frouen - Le nom du fichier JSON
Améliorations apportées
- Ajout d'une barre de progression pour visualiser l'avancement du traitement
- Ajout d'un timer pour mesurer le temps d'exécution total
- Ajout d'un bloc
try/catchavecThrowablepour capturer toutes les erreurs et exceptions possibles, facilitant le débogage
Commande mergeCsv
php bin/console mergeCsv
Elle ne prend aucun paramètre.
Cette commande permet de fusionner un fichier CSV avec un fichier JSON. Elle est utilisée pour mettre à jour le fichier JSON contenant les prononciations, à partir d'un fichier CSV fourni par les développeurs de FileMaker — l'application utilisée pour créer les questions des séries de codes.
Code
#[AsCommand(
name: "mergeCsv",
description: "merge a csv file into pattern.json",
)]
class MergeCsvCommand extends Command
{
public function __construct(
private PatternService $patternService,
private string $csvDirectoryPath,
) {
parent::__construct();
}
protected function execute(InputInterface $input, OutputInterface $output): int
{
try {
$data = $this->patternService->getJson();
$csvFilePath = "{$this->csvDirectoryPath}/merge.csv";
if (!file_exists(filename: $csvFilePath)) {
$output->writeln("<error>Le fichier csv n'existe pas dans le répertoire src/resources/</error>");
return Command::FAILURE;
}
$newData = $data;
$file = fopen(filename: $csvFilePath, mode: "r");
if ($file === false) {
$output->writeln("<error>Impossible d'ouvrir le fichier CSV</error>");
return Command::FAILURE;
}
while (($csv = fgetcsv(stream: $file)) !== false) {
if (empty($csv[0]) || empty($csv[1])) {
$output->writeln("<error>erreur csv vide</error>");
continue;
}
if ($csv[0] === "word"){
continue;
}
$word = $csv[0];
$pronunciation = $csv[1];
if (array_key_exists(key: $word, array: $data)) {
$newData[$word]['fr']['exempleNomApi'] = $pronunciation;
$output->writeln("<info>Updated: $word </info>");
$this->patternService->writeJson($newData);
} else {
$addWord = [
'word' => $word,
'lang' => "fr",
'api' => "exempleNomApi",
'pronunciation' => $csv[1],
];
$this->patternService->addWord($addWord);
$output->writeln("<info>Add: {$word} </info>");
}
}
} catch (\Throwable $e) {
$output->writeln("<error>Une erreur est survenue : {$e->getMessage()}</error>");
return Command::FAILURE;
}
return Command::SUCCESS;
}
}
Fonctionnement
- Récupération des données du fichier JSON via
patternService->getJson() - Vérification de l'existence du fichier CSV dans le répertoire
src/resources/ - Lecture ligne par ligne du fichier CSV avec
fgetcsv() - Pour chaque ligne :
- Si le mot existe déjà dans le JSON → mise à jour de la prononciation de l'api externe pour la langue
fr - Si le mot n'existe pas → ajout d'une nouvelle entrée pour la langue
fret l'api externe
- Si le mot existe déjà dans le JSON → mise à jour de la prononciation de l'api externe pour la langue
- Gestion des erreurs via un bloc
try/catchavecThrowable