Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <mysql/mysql.h>
- #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
- int temp;
- float pressure;
- int humidity;
- char * main_description;
- char * description;
- char * icon;
- float wind_speed;
- float wind_deg;
- char * date;
- char * moment;
- int cloud;
- float rain;
- float snow;
- }METEO;
- int get_json();
- char * cut_file(char * source, char * string_search);
- char * check_brackets(char * string);
- char * take_value(char * source, char * word_title);
- char * clean_string(char * string);
- void get_config(char * address,char * user,char * password,char * bddname,char * filename);
- char ** get_keyword();
- int test_json(char * buffer);
- int main(int argc, char ** argv)
- {
- METEO * meteo = malloc(sizeof(METEO));
- meteo->main_description = malloc(50 * sizeof(char));
- meteo->description = malloc(50 * sizeof(char));
- meteo->date = malloc(50 * sizeof(char));
- meteo->date = malloc(50 * sizeof(char));
- meteo->icon = malloc(50 * sizeof(char));//Charge le contenu du fichier dans un buffer(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];
- char requete[300] = "";
- int ok;
- //Tableau qui contient tous les mots clés
- char ** word_list = NULL;
- int i = 0;
- char * buf5 = malloc(100 * sizeof(char));
- char * string_clean = malloc(100 * sizeof(char));
- int value;
- int j = 20;
- int k = 0;
- char * address = malloc(50 * sizeof(char));
- char * user = malloc(50 * sizeof(char));
- char * password = malloc(50 * sizeof(char));
- char * bddname = malloc(50 * sizeof(char));
- char * filename = malloc(50 * sizeof(char));
- MYSQL mysql;
- mysql_init(&mysql);
- mysql_options(&mysql,MYSQL_READ_DEFAULT_GROUP,"option");
- /*
- if(get_json() == 1) //Appel de la fonction pour récuperer le JSON
- {
- printf("erreur\n");
- return 0;
- }
- */
- get_config(address,user,password,bddname,filename);
- file = fopen(filename,"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
- ok = test_json(buffer);
- if( !ok )
- return 0;
- if(mysql_real_connect(&mysql,address,user,password,bddname,0,NULL,0) != NULL)
- {
- printf("/////////////////// CONNECT BDD OK \\\\\\\\\\\\\\\\\\\\\n");
- //mysql_close(&mysql);
- }
- else
- {
- printf("Une erreur s'est produite lors de la connexion à la BDD!");
- }
- word_list = get_keyword();
- int count = 0;
- while((buffer = strstr(buffer,"\"dt\"")) != NULL) //"dt" est le délimiteur de chaque infos différentes
- {
- buffer += 4;
- buf2 = cut_file(buffer,"\"dt\""); //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;
- if(count > 0){
- for(i = 0 ; i<12; i++) //Taille du tableau de mots clés
- {
- if(i >= 10)
- {
- //buf3 = strstr(buf2,word_list[i]);
- if((tab = take_value(buf2,word_list[i])) != NULL )
- {
- if((buf3 = check_brackets(tab)) != NULL)
- {
- strcat(tab,",");
- buf4 = take_value(tab,"3h");
- if(buf4 != NULL)
- {
- string_clean = clean_string(buf4);
- }else{
- string_clean = clean_string("0.00");
- }
- string_clean = clean_string(buf4);
- }else{
- string_clean = clean_string("0.00");
- }
- }else{
- string_clean = clean_string("0.00");
- }
- }else{
- if(i == 9)
- buf2 = strstr(buf2, "weather");
- buf4 = take_value(buf2, word_list[i]); //On récupère la chaine de caractère avec le mot clé et sa valeur
- string_clean = clean_string(buf4); //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
- while(string_clean[k] != ' ')
- {
- meteo->date[k] = string_clean[k];
- k++;
- }
- meteo->date[k] = '\0';
- k=0;
- meteo->moment = strchr(string_clean,' ');
- break;
- case 7: //id de l'icone
- meteo->icon = string_clean;
- strcat(meteo->icon,".png");
- break;
- case 8: //Nuage
- meteo->cloud = atoi(string_clean);
- break;
- case 9: //Information principale
- //printf("BUF 2 : %s",buf2);
- meteo->main_description = string_clean;
- break;
- case 10: //Pluie
- meteo->rain = atof(string_clean);
- break;
- case 11: //Neige
- meteo->snow = atof(string_clean);
- break;
- default:
- break;
- }
- }
- sprintf(requete,"INSERT INTO weather (DateJ,Moment,City,Temperature,Trend,Description,Icon,Humidity,Wind_Speed,Wind_Direction,Cloud,Pressure,Rain,Snow) VALUES ('%s','%s','Evreux',%d,'%s','%s','%s',%d,%.2f,%.2f,%d,%.2f,%.2f,%.2f)",meteo->date,meteo->moment,meteo->temp,meteo->main_description,meteo->description,meteo->icon,meteo->humidity,meteo->wind_speed,meteo->wind_deg,meteo->cloud,meteo->pressure,meteo->rain,meteo->snow);
- //printf("%s\n",requete);
- mysql_query(&mysql,requete);
- printf("Temperature : %d degres\n",meteo->temp);
- printf("Pression : %.2f\n",meteo->pressure);
- printf("Humidite : %d\n",meteo->humidity);
- printf("Principale : %s\n",meteo->main_description);
- 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("Moment : %s\n",meteo->moment);
- printf("Icon : %s\n",meteo->icon);
- printf("Nuage : %d\n",meteo->cloud);
- printf("Pluie : %.2f\n",meteo->rain);
- printf("Neige : %.2f\n\n",meteo->snow);
- }
- count++;
- }
- //key_word = get_keyword();
- //free(buffer);
- //free(buf2);
- free(buf3);
- //free(buf4);
- free(buf5);
- if(string_clean != NULL)
- free(string_clean);
- fclose(file);
- mysql_close(&mysql);
- return 0;
- }
- int get_json()
- {
- system("curl -o meteo.txt 'http://api.openweathermap.org/data/2.5/forecast/city?id=3019265&APPID=10f30537f293b707454512bebd2a54c8&lang=fr'");
- return 0;
- }
- char * cut_file(char * source, char * string_search)
- {
- char * buf = malloc((strlen(source) + 1) * sizeof(char));
- //printf( "TAILLE SOURCE : %d \n", strlen(source));
- 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 * check_brackets(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);
- if(size <= 2)
- return NULL;
- buf2 = malloc((size+1) * sizeof(char));
- strncpy(buf2,buf,size);
- buf2[size] = '\0';
- //free(buf);
- return buf2;
- }
- char * take_value(char * source, char * word_title)
- {
- char * buf = malloc(400 * sizeof(char));
- char * buf2 = malloc(100 * sizeof(char));
- char * buf3 = malloc(100 * sizeof(char));
- int i = 0;
- int size = 0 ;
- buf = strstr(source,word_title);
- if(buf == NULL)
- return NULL;
- /*
- 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';
- buf3 = strchr(buf2,':'); //On récupère juste la valeur de la chaine qui est situé après le ":"
- //free(buf);
- return buf3;
- }
- char * clean_string(char * string)
- {
- char * buf = malloc(100 * sizeof(char));
- int i = 0;
- int j = 0;
- while(string[i] != '\0')
- {
- if((string[i] >= 'a' && string[i] <= 'z' ) || (string[i] >= 'A' && string[i] <= 'Z' ) || ( string[i] >= '0' && string[i] <= '9' ) || string[i] == '-' || string[i] == '.' || string[i] == ' '|| string[i] == 130|| string[i] == 138)
- {
- buf[j] = string[i];
- j++;
- }
- i++;
- }
- //printf("%s\n",buf);
- return buf;
- }
- void get_config(char * address,char * user,char * password,char * bddname, char * filename)
- {
- FILE * config = fopen("conf.ini","r");
- char * value = malloc(50 * sizeof(char));
- int i = 0;
- while(fgets(value,50,config) != NULL)
- {
- if(strncmp(value,"#ADDRESS",strlen("#ADDRESS")) == 0){
- fgets(value,50,config);
- if(value[strlen(value) - 1] == '\n')
- {
- value[strlen(value) - 1] = '\0';
- }
- strcpy(address,value);
- }
- if(strncmp(value,"#HOSTNAME",strlen("#HOSTNAME")) == 0){
- fgets(value,50,config);
- if(value[strlen(value) - 1] == '\n')
- {
- printf("1\n");
- value[strlen(value) - 1] = '\0';
- }
- strcpy(user,value);
- }
- if(strncmp(value,"#PASSWORD",strlen("#PASSWORD")) == 0){
- fgets(value,50,config);
- if(value[strlen(value) - 1] == '\n')
- {
- value[strlen(value) - 1] = '\0';
- }
- strcpy(password,value);
- }
- if(strncmp(value,"#BDDNAME",strlen("#BDDNAME")) == 0){
- fgets(value,50,config);
- if(value[strlen(value) - 1] == '\n')
- {
- value[strlen(value) - 1] = '\0';
- }
- strcpy(bddname,value);
- }
- if(strncmp(value,"#FILENAME",strlen("#FILENAME")) == 0){
- fgets(value,50,config);
- if(value[strlen(value) - 1] == '\n')
- {
- value[strlen(value) - 1] = '\0';
- }
- strcpy(filename,value);
- }
- }
- fclose(config);
- }
- char ** get_keyword()
- {
- FILE * config = fopen("conf.ini","r");
- //char ** keys = malloc(1 * sizeof(char *));
- char ** keys = NULL;
- char * value = malloc(50 * sizeof(char));
- int i = 0;
- while(fgets(value,50,config) != NULL)
- {
- if(strncmp(value,"#KEYWORD",strlen("#KEYWORD")) == 0)
- {
- while(fgets(value,50,config) != NULL, strcmp(value,"\n") != 0)
- {
- if(value[strlen(value) - 1] == '\n')
- {
- value[strlen(value) - 1] = '\0';
- }
- keys = realloc(keys, (i +1) * sizeof(char *) );
- *(keys + i) = malloc(50 * sizeof(50));
- strcpy(keys[i],value);
- i++;
- /*
- fgets(value,50,config);
- if(value[strlen(value) - 1] == '\n')
- {
- value[strlen(value) - 1] = '\0';
- }
- strcpy(filename,value);
- */
- }
- }
- }
- int j;
- printf("i = %d\n",i);
- for(j = 0; j < i; j++){
- printf("%s\n", keys[j]);
- }
- fclose(config);
- return keys;
- }
- int test_json(char * buffer) //S'il y a une erreur dans le fichier, on arrete le programme
- {
- if(strstr(buffer,"Error") != NULL || strstr(buffer,"Invalid") != NULL || strlen(buffer) < 1000)
- {
- printf("****************************\n");
- printf("* *\n");
- printf("* ERREUR JSON *\n");
- printf("* *\n");
- printf("****************************\n\n");
- return 0;
- }
- return 1;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement