diff options
| author | frosty <gabriel@bwaaa.monster> | 2026-03-12 18:05:09 -0400 |
|---|---|---|
| committer | frosty <gabriel@bwaaa.monster> | 2026-03-12 18:05:09 -0400 |
| commit | 0d65dcd24c8090dcc719be599cd3ef4dc2220e9b (patch) | |
| tree | 4fc3eaf09d7a41b6b96ccee9637b2e8bdff77f6c /src/Routes | |
| parent | c802a4784ab70e0a7512dac0419727fdefacd75c (diff) | |
| download | omnisearch-0d65dcd24c8090dcc719be599cd3ef4dc2220e9b.tar.gz | |
refactor: put HTTP and XML logic into reusable modules
Diffstat (limited to 'src/Routes')
| -rw-r--r-- | src/Routes/Images.c | 72 |
1 files changed, 10 insertions, 62 deletions
diff --git a/src/Routes/Images.c b/src/Routes/Images.c index 5057f81..5f8cf2c 100644 --- a/src/Routes/Images.c +++ b/src/Routes/Images.c @@ -1,7 +1,8 @@ #include "Images.h" -#include "../Proxy/Proxy.h" #include "../Scraping/Scraping.h" +#include "../Utility/HttpClient.h" #include "../Utility/Unescape.h" +#include "../Utility/XmlHelper.h" #include <curl/curl.h> #include <libxml/HTMLparser.h> @@ -9,61 +10,6 @@ #include <stdio.h> #include <stdlib.h> #include <string.h> -#include <time.h> - -struct MemoryBlock { - char *response; - size_t size; -}; - -static size_t ImageWriteCallback(void *data, size_t size, size_t nmemb, - void *userp) { - size_t realsize = size * nmemb; - struct MemoryBlock *mem = (struct MemoryBlock *)userp; - char *ptr = (char *)realloc(mem->response, mem->size + realsize + 1); - if (ptr == NULL) { - return 0; - } - mem->response = ptr; - memcpy(&(mem->response[mem->size]), data, realsize); - mem->size += realsize; - mem->response[mem->size] = 0; - return realsize; -} - -static char *fetch_images_html(const char *url) { - CURL *curl_handle; - struct MemoryBlock chunk = {.response = malloc(1), .size = 0}; - if (!chunk.response) { - return NULL; - } - - curl_handle = curl_easy_init(); - if (!curl_handle) { - free(chunk.response); - return NULL; - } - - curl_easy_setopt(curl_handle, CURLOPT_URL, url); - curl_easy_setopt(curl_handle, CURLOPT_WRITEFUNCTION, ImageWriteCallback); - curl_easy_setopt(curl_handle, CURLOPT_WRITEDATA, (void *)&chunk); - curl_easy_setopt( - curl_handle, CURLOPT_USERAGENT, - "Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko"); - curl_easy_setopt(curl_handle, CURLOPT_FOLLOWLOCATION, 1L); - curl_easy_setopt(curl_handle, CURLOPT_TIMEOUT, 10L); - apply_proxy_settings(curl_handle); - - CURLcode res = curl_easy_perform(curl_handle); - if (res != CURLE_OK) { - free(chunk.response); - curl_easy_cleanup(curl_handle); - return NULL; - } - - curl_easy_cleanup(curl_handle); - return chunk.response; -} int images_handler(UrlParams *params) { TemplateContext ctx = new_context(); @@ -127,8 +73,10 @@ int images_handler(UrlParams *params) { snprintf(url, sizeof(url), "https://www.bing.com/images/search?q=%s&first=%d", encoded_query, first); - char *html = fetch_images_html(url); - if (!html) { + HttpResponse resp = http_get( + url, + "Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko"); + if (!resp.memory) { send_response("<h1>Error fetching images</h1>"); free(encoded_query); free(display_query); @@ -136,10 +84,10 @@ int images_handler(UrlParams *params) { return -1; } - htmlDocPtr doc = htmlReadMemory(html, (int)strlen(html), NULL, NULL, + htmlDocPtr doc = htmlReadMemory(resp.memory, resp.size, NULL, NULL, HTML_PARSE_RECOVER | HTML_PARSE_NOERROR); if (!doc) { - free(html); + http_response_free(&resp); free(encoded_query); free(display_query); free_context(&ctx); @@ -150,7 +98,7 @@ int images_handler(UrlParams *params) { if (!xpathCtx) { xmlFreeDoc(doc); - free(html); + http_response_free(&resp); free(encoded_query); free(display_query); free_context(&ctx); @@ -325,7 +273,7 @@ int images_handler(UrlParams *params) { xmlXPathFreeContext(xpathCtx); if (doc) xmlFreeDoc(doc); - free(html); + http_response_free(&resp); curl_free(encoded_query); free(display_query); free_context(&ctx); |
