Creación de canales ThingSpeak mediante API REST
En el siguiente post os voy a explicar cómo crear y configurar un canal en ThingSpeak utilizando la API REST que facilita la plataforma, y código Python. Toda la documentación correspondiente y un conjunto de ejemplos podéis encontrarlos en el siguiente enlace:
Al fin y al cabo, la arquitectura REST se basa en las peticiones GET, PUT, POST y DELETE del protocolo HTTP. Concretamente, utilizaremos la API REST con formato JSON, ya que nos es más cómodo que el formato XML si vamos a codificar en Python, dado el parecido de la sintaxis entre ambos.
Así pues, en primer lugar necesitáis crear un archivo con extensión .py, en el cual codificaremos la solución. A continuación, introducid las siguientes lineas en el archivo a fin de importar las siguientes librerías:
import httplib
import urllib
import json
Para poder crear un canal y configurarlo necesitaréis vuestro User ID y User API Key. Además, tenéis que asignar un nombre al canal. También será necesario obtener la Write API Key y Read API Key del canal, para posteriormente poder subir y descargar datos de ese canal:
Write_API_Key = ""
Read_API_Key = ""
User_API_Key = "API_KEY_USUARIO"
UserName = "USER_ID_USUARIO"
Channel_Name = 'Canal TICs'
existe = False
El primer paso es establecer comunicación entre el dispositivo en el que se ejecutará el código y la plataforma ThingSpeak. Dado que se va a utilizar HTTP, la comunicación se basará en una conexión TCP/IP:
conn_TCP = httplib.HTTPSConnection("api.thingspeak.com")
conn_TCP.connect()
A continuación, mediante una petición GET se obtienen todos los canales de los que disponemos y se consulta si el canal que queremos crear ya existe:
metodo = "GET"
uri = "/users/"+str(UserName)+"/channels.json"
cabeceras = {'Host': 'api.thingspeak.com'}
body = ""
conn_TCP.request(metodo, uri,headers=cabeceras, body=body)
respuesta = conn_TCP.getresponse()
estatus = respuesta.status
contenido_respuesta = respuesta.read()
contenido_respuesta_parseado=json.loads(contenido_respuesta)
numChannels = len(contenido_respuesta_parseado['channels'])
i=1
for i in range(numChannels):
nombre = contenido_respuesta_parseado['channels'][i]['name']
if (nombre == Channel_Name):
existe = True
Channel_Id = contenido_respuesta_parseado['channels'][i]['id']
break
En el caso de que el canal ya exista, se realiza otra petición GET para obtener la Write API Key y Read API Key del canal, así como su ID:
metodo = "GET"
uri = "/channels/"+str(Channel_Id)+".json"
params = {'api_key': User_API_Key}
params_encoded=urllib.urlencode(params)
cabeceras = {'Host': 'api.thingspeak.com',
'content-type': 'application/x-www-form-urlencoded'}
data = {'api_key' : User_API_Key}
body = urllib.urlencode(data)
cabeceras['Content-Length'] = len(body)
conn_TCP.request(metodo, uri,headers=cabeceras, body=body)
respuesta = conn_TCP.getresponse()
estatus = respuesta.status
contenido = respuesta.read()
contenido_parseado = json.loads(contenido)
Write_API_Key = contenido_parseado['api_keys'][0]['api_key']
Read_API_Key = contenido_parseado['api_keys'][1]['api_key']
Si el canal no existiera, tenemos que crearlo. Para ello, realizamos una petición POST en la que enviamos el nombre y los campos que queremos que tenga ese canal. También podemos indicar si queremos que el canal sea público o privado:
metodo = "POST"
uri = "/channels.json"
cabeceras = {'Host': 'api.thingspeak.com',
'Conect-Type': 'application/x-www-form-urlencoded'}
params = {'api_key' : User_API_Key,
'field1' : 'Temperatura(ºC)',
'field2' : 'Humedad(%)',
'field3' : 'PuntoRocio(ºC)',
'field4' : 'Presion(Pa)',
'field3' : 'PuntoRocio(ºC)',
'field4' : 'Presion(Pa)',
'name' : Channel_Name,
'public_flag' : 'true'}
params_encoded = urllib.urlencode(params)
cabeceras = {'Content-Length': len(params_encoded)}
conn_TCP.request(metodo,uri, headers=cabeceras, body=params_encoded)
respuesta = conn_TCP.getresponse()
estatus = respuesta.status
contenido = respuesta.read()
contenido_parseado = json.loads(contenido)
Write_API_Key = contenido_parseado['api_keys'][0]['api_key']
Read_API_Key = contenido_parseado['api_keys'][1]['api_key']
Channel_Id = contenido_parseado['id']
Si por ejemplo, ejecutáis este archivo en vuestro PC con un entorno de desarrollo Python (PyCharm,etc.) o en una RaspberryPI configurada previamente para interpretar Python y conectarse a Internet (Configuración RaspberryPI) y todo funciona correctamente, en vuestra cuenta ThingSpeak deberíais encontrar un nuevo canal con este aspecto:
Fig. 1: Canal creado mediante código Python y API REST |
¡Espero que este post os haya sido de utilidad, y no dudéis en dejar vuestras preguntas en el apartado de comentarios!
Comentarios
Publicar un comentario