Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <unistd.h>
- #include <sys/wait.h>
- #include <sys/types.h>
- #include <string.h>
- typedef struct{ //Structure pour la météo
- float temp;
- float pressure;
- int humidity;
- char * main_description;
- char * description;
- char * icon;
- float wind_speed;
- float wind_deg;
- char * date;
- float rain;
- int cloud;
- }METEO;
- int get_json();
- char * cut_file(char * source, char * string_search, int size);
- char * recup_entreaccolade(char * string);
- char * recup_value(char * source, char * word_title);
- char * clean_string(char * string);
- int main(int argc, char ** argv)
- {
- METEO * meteo = malloc(sizeof(METEO));
- meteo->description = malloc(50 * sizeof(char));
- meteo->date = malloc(50 * sizeof(char));
- meteo->icon = malloc(50 * sizeof(char));//Charge le contenu du fichier dans un bufferf(char));
- FILE * file;
- int size;
- char * buffer;
- char * buf2;
- char * buf3 = malloc(200 * sizeof(char));
- char * buf4;
- char * tab = malloc(200 * sizeof(char));
- char tab2[20];
- //Tableau qui contient tous les mots clés
- char word_list [][255] = {{"temp"},{"pressure"},{"humidity"},{"description"},{"speed"},{"deg"},{"dt_txt"},{"icon"},{"all"}};
- int i = 0;
- char * buf5 = malloc(100 * sizeof(char));
- char * string_clean = malloc(100 * sizeof(char));
- int value;
- A remettre
- if(get_json() == 1) //Appel de la fonction pour récuperer le JSON
- {
- printf("erreur\n");
- return 0;
- }
- file = fopen("meteo.txt","r"); //On ouvre le fichier
- //Récuperation de la taille du fichier
- fseek(file,0,SEEK_END);
- size = ftell(file);
- fseek(file,0,SEEK_SET);
- buffer = malloc((size + 1) * sizeof(char)); //Allocation d'un buffer avec la taille récuperer juste avant
- fread(buffer,size,1,file); //Charge le contenu du fichier dans un buffer
- buffer[size] = '\0'; //Fin de chaine
- //S'il y a une erreur dans le fichier, on arrete le programme pour le pas rentrer de fausse info en bdd
- if(strstr(buffer,"error") != NULL || strstr(buffer,"invalid") != NULL)
- return 0;
- while((buffer = strstr(buffer,"\"dt\"")) != NULL) //"dt" est le délimiteur de chaque infos différentes
- {
- buffer += 4;
- buf2 = cut_file(buffer,"\"dt\"",size); //Appel de la fonction cut_file qui permet de découper le JSON
- if(buf2 == NULL) //S'il n'y a plus de "dt" on s'arrête
- break;
- buf3 = strstr(buf2,"\"rain\":");
- if((tab = recup_entreaccolade(buf3)) != NULL )
- printf("%s\n\n",tab);
- for(i = 0 ; i<9; i++) //Taille du tableau de mots clés
- {
- buf4 = recup_value(buf2, word_list[i]); //On récupère la chaine de caractère avec le mot clé et sa valeur
- buf5 = strchr(buf4,':'); //On récupère juste la valeur de la chaine d'au dessus qui est situé après le ":"
- string_clean = clean_string(buf5); //Appel de la fontion qui permet de supprimer tous les caractères en trop
- switch(i)
- {
- case 0: //Temperature
- meteo->temp = atof(string_clean); //Transforme la valeur en float
- meteo->temp -= 273.15; //Calcul pour passer du Kelvin en °C
- break;
- case 1: //Pression
- meteo->pressure = atof(string_clean);
- break;
- case 2: //Humidite
- meteo->humidity = atoi(string_clean); //Transforme la valeur en int
- break;
- case 3: //Description
- meteo->description = string_clean;
- break;
- case 4: //Vitesse du vent
- meteo->wind_speed = atof(string_clean);
- break;
- case 5: //Orientation du vent
- meteo->wind_deg = atof(string_clean);
- break;
- case 6: //Date et heure de l'info
- meteo->date = string_clean;
- break;
- case 7: //id de l'icone
- meteo->icon = string_clean;
- break;
- case 8: //Nuage
- meteo->cloud = atoi(string_clean);
- break;
- }
- }
- printf("Temperature : %.2f degre\n",meteo->temp);
- printf("Pression : %.2f\n",meteo->pressure);
- printf("Humidite : %d\n",meteo->humidity);
- printf("Description : %s\n",meteo->description);
- printf("Vitesse vent : %.2f m/s\n",meteo->wind_speed);
- printf("Degre vent : %.2f\n",meteo->wind_deg);
- printf("Date : %s\n",meteo->date);
- printf("Icon : %s\n",meteo->icon);
- printf("Nuage : %d\n\n",meteo->cloud);
- }
- free(buffer);
- free(buf2);
- free(buf3);
- free(buf4);
- free(buf5);
- free(string_clean);
- fclose(file);
- return 0;
- }
- int get_json()
- {
- system("curl -o meteo.txt 'http://api.openweathermap.org/data/2.5/forecast/city?id=3019265&APPID=1c8dbc2a972b71d61606b6567b305b07&lang=fr'");
- return 0;
- }
- char * cut_file(char * source, char * string_search, int size)
- {
- char * buf = malloc((size + 1) * sizeof(char));
- char * buf2;
- int size_info;
- buf = strstr(source,string_search);
- if(buf == NULL)
- return NULL;
- size_info = strlen(source) - strlen(buf);
- buf2= malloc((size_info + 1) * sizeof(char));
- strncpy(buf2,source,size_info);
- buf2[size_info] = '\0';
- return buf2;
- }
- char * recup_entreaccolade(char * string)
- {
- char * buf = malloc(400 * sizeof(char));
- char * buf2;
- int size;
- if((buf = strchr(string,'{') ) == NULL)
- return NULL;
- buf2 = strchr(string,'}');
- size = strlen(buf) - strlen(buf2);
- buf2 = malloc((size+1) * sizeof(char));
- strncpy(buf2,buf,size);
- buf2[size] = '\0';
- printf("SIZE : %d\n",size);
- //free(buf);
- return buf2;
- }
- char * recup_value(char * source, char * word_title)
- {
- char * buf = malloc(400 * sizeof(char));
- char * buf2 = malloc(100 * sizeof(char));
- int i = 0;
- int size = 0 ;
- buf = strstr(source,word_title);
- /*
- buf2 = strchr(buf,',');
- size = strlen(buf) - strlen(buf2);
- strncpy(buf2,buf,size);
- buf2[size] = '\0';
- */
- //printf("buf : %s \n",buf);
- while(buf[i] != ',') //Ou ' \" '
- {
- *(buf2 + i) = *(buf + i);
- i++;
- }
- *(buf2 + i) = '\0';
- //free(buf);
- return buf2;
- }
- char * clean_string(char * string)
- {
- char * buf = malloc(100 * sizeof(char));
- int i = 0;
- int j = 0;
- while(string[i] != '\0')
- {
- if((string[i] <= 'z' && string[i] >= 'a') || (string[i] <= '9' && string[i] >= '0') || string[i] == ' ' || string[i] == '.')
- {
- buf[j] = string[i];
- j++;
- }
- i++;
- }
- //printf("%s\n",buf);
- return buf;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement