Sam-Sampaio

Cep

Sep 28th, 2020 (edited)
213
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.47 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <json.h>
  5. #include <curl/curl.h>
  6.  
  7. struct request
  8. {
  9.    char *response;
  10.    size_t size;
  11. };
  12.  
  13. static size_t func(void *data, size_t size, size_t nmemb, void *userp)
  14. {
  15.    size_t size_p = size * nmemb;
  16.    struct request *mem = (struct request *)userp;
  17.  
  18.    char *ptr = realloc(mem->response, mem->size + size_p + 1);
  19.   if(!ptr)
  20.   {
  21.      fputs("Failed Memory\n", stdout);
  22.      return EXIT_FAILURE;
  23.   }
  24.  
  25.    mem->response = ptr;
  26.    memcpy(&(mem->response[mem->size]), data, size_p);
  27.    mem->size += size_p;
  28.    mem->response[mem->size] = 0;
  29.  
  30.    return size_p;
  31. }
  32.  
  33. void parse(char *buffer)
  34. {
  35.      struct json_object *jobj;
  36.      struct json_object *j[10];
  37.      jobj = json_tokener_parse(buffer);
  38.  
  39.      size_t i;
  40.      static char *keys[] = {"cep", "logradouro", "complemento",
  41.                        "bairro", "localidade", "uf",
  42.                        "ibge", "gia", "ddd", "siafi"};
  43.  
  44.  
  45.      for(i = 0; i < 10; i++)
  46.         json_object_object_get_ex(jobj, keys[i], &j[i]);
  47.  
  48.  
  49.      for(i=0; i < 10; i++)
  50.      {
  51.          if(json_object_get_string(j[i]) != NULL)
  52.            printf("%s\n", json_object_get_string(j[i]));  
  53.          else
  54.          {
  55.            fputs("Failed Json\n", stdout);
  56.            goto exit;
  57.          }
  58.       }
  59.       exit:
  60.        json_object_put(jobj);
  61. }
  62.  
  63. int main(void)
  64. {
  65.     struct request s;
  66.     s.response = malloc(1000);
  67.    
  68.     if(!s.response)
  69.     {
  70.       fputs("Failed Memory\n", stdout);
  71.       return EXIT_FAILURE;
  72.     }
  73.     s.size = 0;    
  74.  
  75.     fputs("Input your CEP: ", stdout);
  76.  
  77.     char cep[9];
  78.     scanf("%9[^\n]s", cep);
  79.  
  80.     size_t i, j = 0;
  81.  
  82.     for(i = 0; cep[i]; i++)
  83.       if(cep[i] >= '0' && cep[i] <= '9') j++;
  84.  
  85.     if(j == 8)
  86.     {
  87.        
  88.        char url[50];
  89.  
  90.        snprintf(url, sizeof url, "http://viacep.com.br/ws/%s/json/", cep);    
  91.    
  92.        CURL *curl = curl_easy_init();
  93.  
  94.        if(curl)
  95.        {
  96.            curl_easy_setopt(curl, CURLOPT_URL, url);
  97.            curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, func);
  98.            curl_easy_setopt(curl, CURLOPT_WRITEDATA, (void *)&s);
  99.            curl_easy_perform(curl);
  100.            parse(s.response);
  101.            curl_easy_cleanup(curl);
  102.         } else {
  103.            fputs("Request Failed\n", stdout);
  104.            return EXIT_FAILURE;    
  105.         }
  106.      }  else  {
  107.         fputs("Invalid Number\n", stdout);
  108.     }
  109.  
  110.      free(s.response);
  111.  
  112.     return 0;
  113. }
  114.  
Add Comment
Please, Sign In to add comment