dogecoin price usd

#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;
}