title

Projet Multilingue des Mots sur le Web

Le Projet en C


La démarche de travail

Malheureusement le script en C est toujours en cours. L'installation des bibliothèques et une bonne compréhension de leur fonctionnement nécessitent plus de temps, qui va au-delà de notre date limite. Ceci reste, par contre, un projet en cours, à compléter !

Malgré les problèmes rencontrés dans l'écriture du projet, un programme en C qui fait le même traitement du texte est très intéressant, surtout pour l'efficacité du programme, qui pourrait éventuellement traiter un très grand nombre d'URLs et plus rapidement qu'en Bash ou Python. Certes, le langage est plus exigeant et les bibliothèques standards sont a priori moins adaptées à la tâche, mais les résultats seraient peut-être meilleurs.



Le script (jusqu'à présent) :
1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <string.h> 4 #include <dir.h> 5 #include <dirent.h> 6 #include <curl.h> 7 #include <easy.h> 8 #include <sys/types.h> 9 #include <sys/stat.h> 10 11 int main() 12 { 13 14 //1) initialiser les variables 15 char nomdossier[50],fullpathdossier[100], nomfichierin[50], fullpathfichier[200], cwd[100],m, fullpageaspiree[100], fullpageaspiree2[100]={0}; 16 int i,j=1, k=1; 17 char url[200]={0}; 18 CURL *curl; 19 CURLcode res; 20 chdir(".."); 21 22 //2) définir l'endroit où se trouvent les fichiers contenant les url 23 printf("Donnez le nom du dossier contenant les fichiers url : "); 24 gets(nomdossier); /*a) demander à l’utilisateur de taper le nom du dossier*/ 25 26 27 getcwd(cwd, sizeof(cwd));/*get current working directory - le chemin absolu du '.' */ 28 strcpy(fullpathdossier,cwd); 29 strcat(fullpathdossier,"\\"); 30 strcat(fullpathdossier,nomdossier);/*b) changer nom en chemin en ajoutant le chemin complet*/ 31 32 //3) définir l'endroit où se trouvera le fichier html qui contiendra les tableaux 33 printf("Donnez le nom du fichier html ou stocker ces liens : "); 34 gets(nomfichierin); 35 36 //4) ouvrir le fichierin pour écrire les tableaux 37 FILE *fichierin =fopen(nomfichierin, "w"); 38 39 //5) commencer à écrire dans le fichierin en ouvrant les balises html 40 fputs("<html><head><meta charset=\"utf-8\" /><title>Americanisation</title></head><body>", fichierin); 41 42 //6) ouvrir le dossier contenant les fichiers des url 43 44 DIR *dossier=NULL; /*déclaration du variable dossier qui prend le chemin du dossier*/ 45 struct dirent *liste=NULL; 46 dossier=opendir(fullpathdossier); 47 48 if (dossier!=NULL) /*a) succès d'ouverture du dossier*/ 49 { 50 k=1; 51 /*i) tandis qu'il existe quelque chose à lire dans le contenu du dossier*/ 52 while ((liste = readdir(dossier)) != NULL) 53 { 54 /*ii) et ce n'est pas '.' ou '..'*/ 55 if ((strcmp(liste->d_name, ".") == 1)&&(strcmp(liste->d_name, "..") == 1)) 56 { 57 /*iii) changer nomfichier en chemin en ajoutant le chemin complet*/ 58 strcpy(fullpathfichier,"\0");/*reintiialiser le fullpathfichier pour chaque fichier*/ 59 strcat(fullpathdossier,"\\"); 60 strcat(fullpathfichier,fullpathdossier); 61 strcat(fullpathfichier,liste->d_name); 62 63 FILE *fichierout =fopen(fullpathfichier, "r"); 64 65 if (fichierout!=NULL)/*iv) succès d'ouverture du fichierout*/ 66 { 67 68 /*1er commencer le tableau numero j*/ 69 fprintf(fichierin,"<table border=\"1\"><tr><th colspan=\"2\">Tableau numero %d, %s :</th></tr>",j, liste->d_name); 70 j++; 71 72 /*2e récupérer chaque ligne(url) dans le fichier*/ 73 for (i=0;fgets(url,200,fichierout)!=NULL;i++) 74 { 75 76 77 /*3e écrire une ligne dans le tableau numero j*/ 78 fprintf(fichierin,"<tr><td>%d</td><td><a href=%s>Lien %d</a></td>",i+1,url, i+1); 79 80 strcpy(fullpageaspiree2, fullpageaspiree); 81 strcat(fullpageaspiree2, k); 82 strcat(fullpageaspiree2,".html"); 83 84 //aspiration de l'URL 85 curl = curl_easy_init(); 86 if(curl) 87 { 88 //initialiser les options pour curl 89 curl_easy_setopt(curl, CURLOPT_URL, url); 90 91 FILE * fichier = fopen(fullpageaspiree2, "w"); 92 curl_easy_setopt(curl, CURLOPT_WRITEDATA, fichier); 93 94 // exécuter la commande : 95 res = curl_easy_perform(curl); 96 97 //si la commande a echoué : 98 if(res != CURLE_OK) 99 fprintf(stderr, "Erreur en executant curl: %s\n", curl_easy_strerror(res)); 100 101 fclose(fichier); 102 //cleanup 103 curl_easy_cleanup(curl); 104 } 105 106 fprintf(fichierin,"<td><a href=%s>Lien %d</a></td></tr>",url, i+1); 107 k++; 108 } 109 110 /*4e fermer le tableau numero j*/ 111 fprintf(fichierin, "</table><br><br>"); 112 113 /*5e fermer le fichierout*/ 114 fclose(fichierout); 115 116 } 117 118 else /*v) échec ouverture du fichierout*/ 119 { 120 perror("Erreur d'ouverture du fichier"); 121 return EXIT_FAILURE; 122 } 123 124 } 125 } 126 127 closedir(dossier);/*vi) fermer dossier contenant les fichiers d'urls*/ 128 } 129 130 else /*b) échec ouverture du dossier*/ 131 { 132 perror("Erreur d'ouverture du dossier"); 133 return EXIT_FAILURE; 134 } 135 136 137 fprintf(fichierin, "</body></html>"); /*fermer les balises*/ 138 139 fclose(fichierin);/*fermer le fichierin contenant les tableaux*/ 140 141 return 0; 142 143 } 144