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
1.6: Organiser son développement professionnel
- 1.6.4 Développer son projet professionnel
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