Oracle maneja la respuesta larga de cryptocompare

Tengo una tarea muy personalizada y necesito asegurarme de cuáles son los límites de cada tecnología. Todavía no he encontrado nada similar en este foro. Estoy usando Oracle para obtener respuesta de esta url:

https://min-api.cryptocompare.com/data/histominute?fsym=ETH&tsym=USD&limit=1&aggregate=30&e=Kraken&extraParams=your_app_name.data

y obtengo tal respuesta:

{"Respuesta":"Éxito","Tipo":100,"Agregado":verdadero,"Datos":[{"tiempo":1536559200,"cerrar":197.88,"alto":197.99,"bajo":196.45 , "abrir": 197,71, "volumen desde": 948,44, "volumen hasta": 186888,76}, {"tiempo": 1536561000, "cerrar": 199,19, "alto": 199,35, "bajo": 196,68, "abrir": 197,88 ,"volumefrom":448.02,"volumeto":88870.37}], "TimeTo":1536562560,"TimeFrom":1536559200,"FirstValueInArray":true,"ConversionType":{"type":"force_direct","conversionSymbol": ""}}

Lo que necesito obtener es el precio de "apertura" del primer elemento de la matriz de Data, que es 197,71 en este ejemplo, y el precio de "cierre" del segundo elemento de la matriz, que es 199,19;

Sin embargo, cuando uso mi código, todo lo que obtengo es [] matriz vacía o cadena vacía. Aquí está el código:

function updatePriceSingle(uint256 timeStamp) payable {
   if (oraclize_getPrice("URL") > this.balance) {
       emit LogNewOraclizeQuery("Oraclize query was NOT sent, please add some ETH to cover for the query fee");
   } else {
       emit LogNewOraclizeQuery("Oraclize query was sent, standing by for the answer..");
       oraclize_query(timeStamp, "URL", "json(https://min-api.cryptocompare.com/data/histominute?fsym=ETH&tsym=USD&limit=1&aggregate=30e=CCCAGG).Data",200000);
   }

}

y aquí está la devolución de llamada:

function __callback(bytes32 myid, string result) {
  if (msg.sender != oraclize_cbAddress()) revert();
  emit LogPriceUpdated(result);
}

Conozco una solución alternativa para hacer 2 llamadas json(...).Data[0] y json(...).Data[1], pero quiero ahorrar gasolina y obtener resultados de 1 llamada en el caso anterior. Es posible ? Tal vez haya soluciones usando "Consulta de prueba" en http://app.oraclize.it/home/test_query . Gracias de antemano.

Respuestas (1)

La razón por la que obtiene un resultado vacío es que la URL tiene algunos parámetros incorrectos, de los que se queja la API, a la:

{"Response":"Error","Message":"aggregate param is not an integer.","Type":1,"Aggregated":false,"Data":[]}

No leí los documentos de la API, por lo que, en aras de la rapidez, simplemente eliminé la parte agregada de la que se queja. Pude lograr el análisis de las teclas abrir/cerrar de la respuesta usando lo siguiente:

json(https://min-api.cryptocompare.com/data/histominute?fsym=ETH&tsym=USD&limit=1).Data[:][open,close]

Puede consultar los documentos/probadores de JSONPath para obtener más información sobre cómo lograr esto, Oraclize está utilizando una versión de estándares específica a la que se hace referencia en su documentación.

Here's a link to the test_query page with the above: http://app.oraclize.it/home/test_query#VVJMKEdFVCk=:anNvbihodHRwczovL21pbi1hcGkuY3J5cHRvY29tcGFyZS5jb20vZGF0YS9oaXN0b21pbnV0ZT9mc3ltPUVUSCZ0c3ltPVVTRCZsaW1pdD0xKS5EYXRhWzpdW29wZW4sY2xvc2Vd

Para un análisis más complejo, también puede usar la fuente de datos de computación, que además puede procesar varios resultados, lo que podría ahorrar costos de computación en la cadena.

esta es la respuesta que he estado buscando!