jueves, 17 de octubre de 2019

Consultar clima con openweathermap

El siguiente script consulta el clima en el servicio openweathermap y lo guarda en una base postgresql. El script sigue estos pasos:

1. Si es la primera ejecución, consulta latitud y longitud al servicio ipinfo.io y guarda este dato en un archivo geopoint.yaml. Si no es la primera vez, levanta el archivo geopoint.yaml.

2. Usando la latitud y longitud, consulta la temperatura y humedad al servicio openwathermap, que es suministrada en formato json

3. Guarda los datos en una base potgresql

NOTAS:
- Para ejemplo de una REST Api que guarda info en postgresql, ver nota publicada AQUI.
- Este script requiere una api_id provista por https://openweathermap.org/




Preview:
import yaml
import requests
import os
import numpy as np
import json
import time
from pprint import pprint

class Weather:
    def __init__(self):
        self.name = 'weather'

    def get_geopoint(self):
        if os.path.isfile('./geopoint.yaml'):
            with open(r'geopoint.yaml') as file:
                geopoint = yaml.load(file)
        else:
            res = requests.get('https://ipinfo.io/')
            data = res.json()
            location = data['loc'].split(',')
            geopoint = {'latitude':location[0], 'longitude':location[1]}
            with open(r'geopoint.yaml', 'w') as file:
                documents = yaml.dump(geopoint, file)

        return geopoint['latitude'], geopoint['longitude']

    def get_weather(self, latitude, longitude):
        url = 'http://api.openweathermap.org/data/2.5/weather?lat={}&lon={}&appid=__your_app_id__&units=metric'.format(latitude, longitude)
        res = requests.get(url)
        data = res.json()
        pprint(data)
        res.connection.close()
        return data['main']

if __name__ == '__main__':
    os.environ['NO_PROXY'] = '127.0.0.1'

    weather =  Weather()

    latitude, longitude = weather.get_geopoint()

    for i in range(60):

        data = weather.get_weather(latitude, longitude)

        d = {
        "device_id": 4,
        "temperatura": data['temp'],
        "humidity": data['humidity'],
        "occupied":int(round(np.random.rand()))
        }

        r = requests.post('http://127.0.0.1:5000/postjson', json=d)

        print(d)
        print(r.content)
        r.connection.close()

        time.sleep(60 * 5)
Referencia
...


No hay comentarios:

Publicar un comentario