diff --git a/searpent.c b/searpent.c index ea67c05..90481ac 100644 --- a/searpent.c +++ b/searpent.c @@ -73,7 +73,11 @@ curl_read_data_t search(char *argv[], char *term) { curl_easy_setopt(handle, CURLOPT_ERRORBUFFER, error); res = curl_easy_perform(handle); curl_easy_cleanup(handle); - fprintf(stderr, "%s: %s", argv[0], error); + + if (error != NULL) { + fprintf(stderr, "%s: %s", argv[0], error); + exit(EX_DATAERR); + } } else { fprintf(stderr, "%s: failed to initialize curl.\n"); } @@ -81,19 +85,39 @@ curl_read_data_t search(char *argv[], char *term) { return json; } -void parse_json(char *argv[], char* json) { - char *parsed_json; - json_error_t *error; - char *pretty_print; - json_t *json_val = json_loads(json, JSON_DECODE_ANY, error); +json_t *parse_json(char *argv[], char* json) { + json_t *results; + json_error_t error; + json_t *json_val = json_loads(json, JSON_DECODE_ANY, &error); - json_unpack(json_val, "{s:o}", parsed_json); - pretty_print = json_dumps(json_val, JSON_INDENT(2)); - printf("%s\n", pretty_print); + if (!json_val) { + fprintf(stderr, "%s: Error parsing JSON: %s.", argv[0], error.text); + exit(EX_DATAERR); + } + + results = json_object_get(json_val, "results"); + + if (results == NULL) { + fprintf(stderr, "%s: No results.", argv[0]); + exit(EX_DATAERR); + } + + return results; +} + +int print_results(json_t *results) { + size_t index; + json_t *value; + + json_array_foreach(results, index, value) { + printf("%s: %s\n", index, value); + } + return EX_OK; } int main(int argc, char *argv[]) { curl_read_data_t json; + json_t *results; if (argc < 1) { fprintf(stderr, "Usage: %s terms...", argv[0]); @@ -102,7 +126,11 @@ int main(int argc, char *argv[]) { for (int i = 1; i < argc; i++) { json = search(argv, argv[i]); - parse_json(argv, json.data); + results = parse_json(argv, json.data); } - return EX_OK; + + if (print_results(results) > 0) { + printf("%s: Error printing results.\n", argv[0]); + exit(1); + } else { return EX_OK; } }