dogecoin price

#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 getDogecoinPrice() {
    CURL* curl;
    CURLcode res;
    std::string readBuffer;

    curl_global_init(CURL_GLOBAL_DEFAULT);
    curl = curl_easy_init();

    if (curl) {
        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);

        curl_easy_cleanup(curl);
    }

    curl_global_cleanup();

    rapidjson::Document document;
    document.Parse(readBuffer.c_str());

    if (!document.HasParseError() && document.IsObject() && document.HasMember("dogecoin") && document["dogecoin"].IsObject() && document["dogecoin"].HasMember("usd") && document["dogecoin"]["usd"].IsNumber()) {
        return document["dogecoin"]["usd"].GetDouble();
    }

    return -1.0;
}

int main() {
    double dogecoinPrice = getDogecoinPrice();

    if (dogecoinPrice != -1.0) {
        std::cout << "Current Dogecoin Price: $" << dogecoinPrice << std::endl;
    } else {
        std::cerr << "Failed to fetch Dogecoin price." << std::endl;
    }

    return 0;
}