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:
Referenciaimport 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)
...
No hay comentarios:
Publicar un comentario