#include "hearthstoneApi.hpp" #include #include HearthstoneApi::HearthstoneApi(Token &&iToken) : mToken(iToken), mHeader(generateRequestHeader()) {} std::string HearthstoneApi::generateRequestHeader() { return std::format("Authorization: Bearer {}", mToken.toString()); } const std::string HearthstoneApi::getUrl(const std::string &t_parameters) { return std::format("https://eu.api.blizzard.com/hearthstone/{}", t_parameters); } const std::string HearthstoneApi::getSetOfCardsUrl(const std::string &t_card_parameters) { return getUrl(std::format("cards{}", t_card_parameters)); } size_t HearthstoneApi::curlCallbackStringOutput(void *t_contents, size_t t_size, size_t t_nmemb, std::string *t_s) { size_t newLength = t_size * t_nmemb; try { t_s->append(static_cast(t_contents), newLength); } catch (std::bad_alloc &e) { // handle memory problem return 0; } return newLength; } std::string HearthstoneApi::makeApiRequest(const char *t_url, const char *t_header) { CURL *curl = curl_easy_init(); std::string request_output; if (curl) { curl_easy_setopt(curl, CURLOPT_URL, t_url); curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0L); curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0L); curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, curlCallbackStringOutput); curl_easy_setopt(curl, CURLOPT_WRITEDATA, &request_output); struct curl_slist *chunk = nullptr; chunk = curl_slist_append(chunk, t_header); curl_easy_setopt(curl, CURLOPT_HTTPHEADER, chunk); curl_easy_perform(curl); curl_easy_cleanup(curl); } return request_output; } std::string HearthstoneApi::makeApiRequest(const std::string &t_url, const std::string &t_header) { return makeApiRequest(t_url.c_str(), t_header.c_str()); } std::string HearthstoneApi::getCards(const std::string &t_card_parameters) { return makeApiRequest(getSetOfCardsUrl(t_card_parameters), mHeader); }