#include <iostream>
#include <curl/curl.h>
#include <rapidjson/document.h>
size_t WriteCallback(void contents, size_t size, size_t nmemb, std::string output) {
size_t total_size = size * nmemb;
output->append((char*)contents, total_size);
return total_size;
}
double getDogecoinPriceUSD() {
CURL* curl;
CURLcode res;
curl_global_init(CURL_GLOBAL_DEFAULT);
curl = curl_easy_init();
if (curl) {
std::string readBuffer;
curl_easy_setopt(curl, CURLOPT_URL, "https://api.coingecko.com/api/v3/simple/price?ids=dogecoin&vs_currencies=usd");
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, &readBuffer);
res = curl_easy_perform(curl);
if (res != CURLE_OK) {
std::cerr << "curl_easy_perform() failed: " << curl_easy_strerror(res) << std::endl;
}
curl_easy_cleanup(curl);
curl_global_cleanup();
rapidjson::Document document;
document.Parse(readBuffer.c_str());
if (!document.IsObject() || document.HasParseError()) {
std::cerr << "Error parsing JSON response" << std::endl;
return -1.0;
}
const rapidjson::Value& dogecoinData = document["dogecoin"];
if (!dogecoinData.IsObject()) {
std::cerr << "Error retrieving Dogecoin data from JSON response" << std::endl;
return -1.0;
}
const rapidjson::Value& usdValue = dogecoinData["usd"];
if (!usdValue.IsNumber()) {
std::cerr << "Error retrieving Dogecoin USD price from JSON response" << std::endl;
return -1.0;
}
return usdValue.GetDouble();
}
return -1.0;
}
int main() {
double dogecoinPriceUSD = getDogecoinPriceUSD();
if (dogecoinPriceUSD != -1.0) {
std::cout << "Dogecoin Price (USD): " << dogecoinPriceUSD << std::endl;
}
return 0;
}