Intentando obtener una salida JSON desde cURLlib en c++.
Entonces, estoy utilizando cURLlib en C++ para obtener datos del mercado utilizando API’s, el problema es que no logro entender la documentación proporcionada sobre cURLlib para C++.
La API devuelve un archivo JSON del cual deseo extraer datos para usarlos en mi propio algoritmo.
La única solución que veo en este momento es analizar la cadena que devuelve cURL, pero creo que eso sería demasiado largo y complicado, así que si hay alguna manera de obtener una salida directa como un archivo JSON desde cURL, podría usar nlohmann e iterar a través de él de esa manera.
(He cambiado la clave de API proporcionada y la he reemplazado con “demo” en el código)
Este es mi código hasta ahora
#include <iostream>
#include <string>
#include <curl curl.h="">
#include<nlohmann json.hpp="">
using namespace std;
using namespace nlohmann;
static size_t WriteCallback(void* contents, size_t size, size_t nmemb, void* userp)
{
((string*)userp)->append((char*)contents, size * nmemb);
return size * nmemb;
}
int main()
{
string readBuffer;
// usamos cURL para obtener el archivo json como cadena
auto curl = curl_easy_init();
if (curl) {
curl_easy_setopt(curl, CURLOPT_URL, "https://www.alphavantage.co/query?function=TIME_SERIES_INTRADAY&symbol=IBM&interval=1min&apikey=demo"); // aquí demo es la clave de la API
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, &readBuffer);
curl_easy_perform(curl);
curl_easy_cleanup(curl);
}
vector<string> Entries;
string push;
for (auto it = readBuffer.begin(); it != readBuffer.end(); it++)
{
// realizar el procesamiento necesario aquí
}
}
Así que si hay alguna manera de obtener un archivo JSON como salida, sería increíble. Cualquier ayuda sería muy apreciada.
davy.ai
Solución
Puedes usar la biblioteca
nlohmann/json
para analizar directamente la cadena JSON devuelta por cURL. Agrega el siguiente código antes del buclefor
en el código que proporcionaste:c++
json data = json::parse(readBuffer); // analizar cadena JSON
auto timeSeries = data["Time Series (1min)"]; // obtener datos de serie temporal
for (auto it = timeSeries.begin(); it != timeSeries.end(); it++)
{
string timestamp = it.key(); // obtener clave de marca de tiempo
auto values = it.value(); // obtener arreglo de valores
double open = values["1. open"]; // obtener precio de apertura
double close = values["4. close"]; // obtener precio de cierre
double high = values["2. high"]; // obtener precio más alto
double low = values["3. low"]; // obtener precio más bajo
// hacer algo con los datos
}
Esto analizará la cadena JSON devuelta por cURL y extraerá los datos relevantes del objeto
"Time Series (1min)"
. Luego puedes iterar a través de los datos de la serie temporal y extraer la información que necesitas.Ten en cuenta que necesitarás agregar
#include <nlohmann json.hpp="">
al principio de tu código para usar la bibliotecanlohmann/json
.