API sentilo

276 views
Skip to first unread message

Esteban Roman

unread,
May 13, 2017, 12:55:55 PM5/13/17
to Sentilo
Hola, tengo la 1.5.1 de Sentilo instalada y estoy utilizando la API para extraer datos y luego consumirlos desde JavaScritp. Quiero utilizar un objeto xmlhttp pero estoy teniendo un problema que, no estoy seguro, creo puede ser causado porque la API de Sentilo devuelve los datos en json pero no está incluido el retorno de carro al final de la secuencia de datos ¿Podría ser?

La consola de javascript me lanza el siguiente mensaje: SyntaxError: JSON.parse: unexpected end of data at line 1 column 1 of the JSON data

Aquí os dejo la URL.
http://www.smartcitything.es:8081/catalog

He realizado una API que extrae los datos directamente de redis y mongodb y utilizando el mismo código javascript me extrae los datos correctamente. La única diferencia que veo es que en mi API si tiene el retorno de carro al final.

Aquí os dejo la url:
http://www.smartcitything.es:8080/ServiceJson/JsonSensorObservations?proveedorID=OE_CRIF_ACACIAS&sensorID=temperatura&rango=1&fin=-1

Os adjunto al final el código javascript que estoy utilizando.

Muchísimas gracias de antemano.

<!DOCTYPE html>
<html>
<body>
<div id="demo"></div>
<script>
  var xhttp = new XMLHttpRequest();
  xhttp.open("GET", "http://www.smartcitything.es:8080/ServiceJson/JsonSensorObservations?proveedorID=OE_CRIF_ACACIAS&sensorID=temperatura&rango=1&fin=-1", true);
  //xhttp.open("GET", "http://www.smartcitything.es:8081/data/OE_CRIF_ACACIAS", true);
  xhttp.onreadystatechange = function() {
  if (this.readyState != 4) {return;}
      //var serverResponse = JSON.parse(xhttp.responseText);   
      document.getElementById("demo").innerHTML = this.responseText;
  };
  xhttp.send();
</script>
</body>
</html>



 

io.se...@gmail.com

unread,
May 18, 2017, 5:48:55 AM5/18/17
to Sentilo
Hola Esteban,
dudo que sea el problema de la API Sentilo...
¿Estás añadiendo la cabecera IDENTITY_KEY?
¿Puedes imprimir la variable responseText por consola, antes de parsearlo conJSON.parse?

Un saludo,
equipo de Sentilo

Esteban Roman

unread,
May 18, 2017, 3:16:39 PM5/18/17
to Sentilo
Hola, antes de nada disculpad porque no me expliqué bien, no pretendía decir que fuera un problema de la API sino que no se incluyera el retorno de carro de forma intencionada por alguna razón.
Suponía que como los datos de los proveedores que estoy solicitando son públicos no hacía falta incluir la IDENTITY_KEY, de echo, los datos si me llegan solicitándolos con un curl sin incluir el IDENTITY_KEY. Dentro de Applications tengo un cliente anónimo con los permisos de lectura sobre sentilo-catalog y sobre los proveedores que me interesan que sean públicos ¿Aun así tengo que incluir la IDENTITY_KEY?

Cuando trato de mandar el contenido de la variable responseText a un elemento html (document.getElementById("demo").innerHTML = this.responseText;) es cuando me da el error. Seguro que es torpeza mía :-)

Muchas gracias por vuestra respuesta.

Esteban Roman

unread,
May 18, 2017, 3:57:08 PM5/18/17
to Sentilo
Hola otra vez, el problema podría ser causado porque en la cabecera no viene el: 'Access-Control-Allow-Origin'.

Muchas gracias de nuevo.

El problema podría venir por el

Esteban Roman

unread,
May 30, 2017, 12:59:18 PM5/30/17
to Sentilo
Hola, quería preguntar si en la versión 1.6.0 está incluido el 'Access-Control-Allow-Origin' en las respuestas de la API. El problema que comentaba en el mensaje inicial de este hilo puede ser debido a que la API de Sentilo no envía el mencionado Access-Control-Allow-Origin ¿Es posible?

Gracias de antemano.
Esteban

io.se...@gmail.com

unread,
Jun 1, 2017, 3:00:55 AM6/1/17
to Sentilo
Hola Esteban,

Sí, no se envía la cabecera ni se soporta CORS ;(
Como la petición va apareciendo la estudiaremos de cara al futuro pero a corto plazo no la tenemos prevista.

Saludos,
Sentilo Team.


Esteban Roman

unread,
Jun 1, 2017, 11:43:13 AM6/1/17
to Sentilo
Ok, muchas gracias!

¿Hay alguna forma entonces de consumir los datos que proceden de la API de Sentilo con javascript desde otro dominio?

Un saludo

io.se...@gmail.com

unread,
Jun 9, 2017, 5:34:04 AM6/9/17
to Sentilo
Hola Esteban,

sí, hay un workaround. Por ejemplo, si levantas un nodejs local que sirva como proxy. Desde Javascript atacarías entonces al node en vez del servidor de Sentilo directamente.
Un ejemplo simple podría ser algo así como:

const http = require('http'),
    server = http.createServer().listen(3000);

const baseUrl = 'api.thingtia.cloud';

server.on('request', function (req, res) {

  if(req.method == 'OPTIONS') {
        res.setHeader("Access-Control-Allow-Origin", "*");
        res.setHeader("Access-Control-Allow-Methods", "*");
        res.setHeader("Access-Control-Allow-Headers", "Access-Control-Allow-Headers, Origin,Accept, X-Requested-With, Content-Type, Access-Control-Request-Method, Access-Control-Request-Headers");
        res.setHeader("Access-Control-Allow-Credentials", "true");
        res.end();
  }else{
          var connector = http.request({
          host: baseUrl,
          path: req.url,
            method: req.method,
            headers: req.headers
          }, function (resp) {
            resp.pipe(res);
          });
          req.pipe(connector);
  }
});

Saludos,
Sentilo Team.

Esteban Roman

unread,
Jun 9, 2017, 6:58:54 AM6/9/17
to Sentilo
Ok, así lo haré!

Muchas gracias!

Cesar C

unread,
Dec 5, 2017, 9:28:37 PM12/5/17
to Sentilo
Hola Esteban,

podrías darme tu correo? quiero hacerte unas consultas
Reply all
Reply to author
Forward
Message has been deleted
0 new messages