isbn-lookup/curl.c
SuperNovaa41 9fc68e1b72 Cleans up the code
Separates some functions into their own files
separates some big functions in to smaller ones to help improve the code
cleans up some stuff
2024-01-13 21:29:52 -05:00

68 lines
1.4 KiB
C

#include <curl/curl.h>
#include <curl/easy.h>
#include <stdlib.h>
#include <string.h>
#include "curl.h"
#define BASE_URL_SIZE 38
void init_string(string* s)
{
s->len = 0;
s->buf = malloc(s->len + 1);
if (NULL == s->buf) {
fprintf(stderr, "malloc() failed!\n");
exit(EXIT_FAILURE);
}
s->buf[0] = '\0';
}
size_t writefunc(void* ptr, size_t size, size_t nmemb, string* s)
{
size_t new_len = s->len + (size * nmemb);
s->buf = realloc(s->buf, new_len + 1);
if (NULL == s->buf) {
fprintf(stderr, "realloc() failed!\n");
exit(EXIT_FAILURE);
}
memcpy(s->buf + s->len, ptr, size * nmemb);
s->buf[new_len] = '\0';
s->len = new_len;
return size * nmemb;
}
CURLcode perform_book_get(char* isbn, string* s)
{
CURL* handler;
char* base_url;
size_t finalurl_size = BASE_URL_SIZE + 15;
char finalurl[finalurl_size];
CURLcode result;
handler = curl_easy_init();
if (!handler) {
fprintf(stderr, "cURL failed to initialize!\n");
exit(EXIT_FAILURE);
}
base_url = "https://openlibrary.org/search.json?q=";
// Setup the URL for the request
snprintf(finalurl, finalurl_size, "%s%s", base_url, isbn);
curl_easy_setopt(handler, CURLOPT_URL, finalurl);
curl_easy_setopt(handler, CURLOPT_HTTPGET, 1L);
curl_easy_setopt(handler, CURLOPT_WRITEFUNCTION, writefunc);
curl_easy_setopt(handler, CURLOPT_WRITEDATA, s);
result = curl_easy_perform(handler);
// Always clean up
curl_easy_cleanup(handler);
return result;
}