DataBaseGeneralMapasProgramaciónTecnologíaWeb

Consultar api de #OpenWeather con Python y trabajar con los datos devueltos en #Postgresql

OpenWeather es un equipo de expertos en TI y científicos de datos que practica la ciencia de datos meteorológicos profundos desde 2014. Para cada punto del mundo, OpenWeather proporciona datos meteorológicos históricos, actuales y pronosticados a través de API.

Entre los servicios que ofrecen pueden consumirse datos meteorológicos actuales y pronósticos:

  • Datos meteorológicos actuales.
  • Pronóstico por hora 4 días.
  • Pronóstico diario 16 días
  • Pronóstico Climático 30 días.
  • Alertas meteorológicas globales.
  • Notificaciones push.

Cómo llamar a las API de OpenWeather?

La clave API es todo lo que necesita para llamar a cualquiera de nuestras API meteorológicas. Una vez que se registre con su correo electrónico, se le enviará la clave API (APPID) en un correo electrónico de confirmación. Sus claves API siempre se pueden encontrar en la página de su cuenta , donde también puede generar claves API adicionales si es necesario.

Consulte nuestra página de documentación para encontrar toda la información técnica de cada producto. La documentación es una guía esencial con ejemplos reales y una descripción completa de las llamadas, respuestas y parámetros de la API.

Manejando datos con Python y PostgreSQL

Para consultar una API con Python y guardar el JSON devuelto en una base de datos PostgreSQL, se pueden seguir los siguientes pasos:

Importar las librerías necesarias: requests para hacer la petición a la API, psycopg2 para interactuar con la base de datos y json para manejar la respuesta en formato JSON.

import requests
import psycopg2
import json

Hacer la petición a la API y almacenar la respuesta en una variable. En este caso el código que te proveemos consulta las condiciones climatológicas de una ciudad en específico, en este caso Santiago de Chile.

Hacer la petición a la API y almacenar la respuesta en una variable.

response = requests.get('https://api.openweathermap.org/data/2.5/weather?q=Santiago,Chile&appid={appKey}&units=metric')

Como recomendación, previo a escribir tu código puedes probar la consulta en tu explorador web. Asi verás en la pantalla el JSON con el cual vas a trabajar.

También podes utilizar la API de codificación geográfica (Geocoding API) que es una herramienta simple que facilita la búsqueda de ubicaciones mientras se trabaja con nombres y coordenadas geográficas.

Recuerda que en lugar de «{appKey}» debes agregar la api key que obtengas luego de registrarte en OpenWeather.

Convertir la respuesta a formato JSON:

data = json.loads(response.text)

Conectar a la base de datos PostgreSQL:

conn = psycopg2.connect(
    host="localhost",
    database="basedatos",
    user="usuario",
    password="contraseña"
)

Crear un cursor para interactuar con la base de datos:

cur = conn.cursor()

Recorrer el JSON y hacer un insert en la base de datos por cada registro:

for registro in data:
cur.execute(«INSERT INTO tabla (campo1, campo2, campo3) VALUES (%s, %s, %s)», (registro[‘campo1’], registro[‘campo2’], registro[‘campo3’]))

Cerrar el cursor y hacer commit para guardar los cambios:

cur.close()
conn.commit()

Cerrar la conexión a la base de datos.

conn.close()

En resumen, para consultar la API con Python y guardar el JSON devuelto en una base de datos PostgreSQL, se debe hacer la petición a la API y convertir la respuesta a formato JSON. Luego, se debe conectar a la base de datos, crear un cursor y recorrer el JSON haciendo un insert por cada registro. Finalmente, se deben cerrar el cursor y hacer commit para guardar los cambios, y cerrar la conexión a la base de datos.

Código completo

Para almacenar la información del ejemplo de JSON que hemos proporcionado, se podría crear una tabla llamada «clima» en PostgreSQL con las siguientes columnas y tipos de datos:

CREATE TABLE clima (
    id SERIAL PRIMARY KEY,
    lon FLOAT,
    lat FLOAT,
    temp FLOAT,
    feels_like FLOAT,
    temp_min FLOAT,
    temp_max FLOAT,
    pressure INT,
    humidity INT,
    speed FLOAT,
    deg INT,
    cloudiness INT
);

Aquí te dejo un ejemplo código en python para el mismo formato de respuesta, en donde debes sustituir el string de consulta a la api y las credenciales a la base de datos:

import requests
import psycopg2
import json

# Hacer la petición a la API
response = requests.get(''https://api.openweathermap.org/data/2.5/weather?q=Santiago,Chile&appid={appKey}&units=metric')

# Convertir la respuesta a formato JSON
data = json.loads(response.text)

# Conectar a la base de datos PostgreSQL
conn = psycopg2.connect(
    host="localhost",
    database="basedatos",
    user="usuario",
    password="contraseña"
)

# Crear un cursor para interactuar con la base de datos
cur = conn.cursor()

# Insertar los datos en la tabla correspondiente
cur.execute("INSERT INTO clima (lon, lat, temp, feels_like, temp_min, temp_max, pressure, humidity, speed, deg, cloudiness) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)",
            (data['coord']['lon'], data['coord']['lat'], data['main']['temp'], data['main']['feels_like'], data['main']['temp_min'], data['main']['temp_max'], data['main']['pressure'], data['main']['humidity'], data['wind']['speed'], data['wind']['deg'], data['clouds']['all']))

# Cerrar el cursor y hacer commit para guardar los cambios
cur.close()
conn.commit()

# Cerrar la conexión a la base de datos
conn.close()

En este ejemplo, se están insertando los valores de «lon», «lat», «temp», «feels_like», «temp_min», «temp_max», «pressure», «humidity», «speed», «deg» y «all» en una tabla llamada «clima» en la base de datos PostgreSQL. Es importante asegurarse de que los nombres de las columnas en la tabla y los nombres de las claves en el JSON coincidan.

Verificación

Vamos a correr todo el código entregado para verificar su funcionamiento. Así que entramos a PostgreSQL en la línea de comando (psql) y creamos una base de datos. Puedes utilizar el nombre que quieras, pero debes asegurante que coincida con las credenciales que agreges a Python:

Creamos la tabla clima:

Una vez que hemos agregado la api key de OpenWeather y las credenciales de postgres corremos nuestro programa de python. Sin no hay errores de sintaxis o excepciones concurrentes, ya habremos consultado la api y guardado los datos en la tabla clima.

Hacemos la respectiva consulta SQL:

SELECT * FROM clima;

Asi obtenemos la informaciòn climática debidamente registrada en nuestra base de datos.

A partir de acá ya puede crear un programa que consulte información diversificada, como la correspondiente a varias ciudades de un mismo país o ciudades capitales de diversos paises, agrupándolas en una lista o diccionario para consultarse en un bucle.

Incluso, aunque esta información también puedes consultarla a la api, es sencillo llevar un registro diario de consultas mediante una herramienta de automatización como Github Actions o Apache Airflow (en un servidor web) que ejecute tu programa cada determinado tiempo, como cada 24 horas. De esta forma podrías realizar análisis de líneas de tiempo y hasta tu propio pronóstico climático utilizando alguna libreria de Inteligencia Artificial.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *