diff --git a/aemet/__init__.py b/aemet/__init__.py index 3eca3fe..cf2a64d 100644 --- a/aemet/__init__.py +++ b/aemet/__init__.py @@ -1,14 +1,21 @@ from aemet.models import * # noqa import click + @click.command() -@click.option('-p', '--prediccion', help='Muestra la predicción meteorológica dado un nombre de municipio') -def main(prediccion): - client = Aemet() +@click.option( + "-p", + "--prediccion", + help="Muestra la predicción meteorológica dado un nombre de municipio", +) +@click.option("-k", "--key", help="API key AEMET") +@click.option("-f", "--keyfile", help="Fichero con la clave de la AEMET.") +def main(prediccion, key, keyfile): + client = Aemet(api_key=key, api_key_file=keyfile) municipio = Municipio.buscar(prediccion) p = client.get_prediccion(municipio.get_codigo()) + print(f"Predicción de temperaturas para {municipio.nombre}:\n") for dia in p.prediccion: print(dia.fecha) - print('Máxima: {}'.format(dia.temperatura['maxima'])) - print('Mínima: {}'.format(dia.temperatura['minima'])) - print() + print("Máxima: {}".format(dia.temperatura["maxima"])) + print("Mínima: {}\n".format(dia.temperatura["minima"])) diff --git a/aemet/models.py b/aemet/models.py index ca0f56a..b62ad52 100644 --- a/aemet/models.py +++ b/aemet/models.py @@ -1,7 +1,9 @@ -import requests import json +import requests import urllib3 from datetime import datetime +from fuzzywuzzy import process +# ToDo: eliminar este import de todos los elementos del modulo from aemet.constants import * # Disable Insecure Request Warnings @@ -279,15 +281,17 @@ def get_municipio(id): @staticmethod def buscar(nombre): """ - Devuelve una lista con los resultados de la búsqueda + Devuelve el resultado de la búsqueda entre todos los municipios de España. :param nombre: Nombre del municipio """ try: - municipios_raw = list(filter(lambda t: nombre in t.get('NOMBRE'), Municipio.MUNICIPIOS)) - municipios = list(map(lambda m: Municipio.from_json(m), municipios_raw)) - return municipios - except: - return None + nombres_municipios = list(map(lambda m: m.get("NOMBRE"), Municipio.MUNICIPIOS)) + best_match = process.extractOne(nombre, nombres_municipios) + idx_best_match = nombres_municipios.index(best_match[0]) + municipio = Municipio.from_json(Municipio.MUNICIPIOS[idx_best_match]) + return municipio + except e: + print(f"Ha habido un error {e}") def get_codigo(self): return '{}{}'.format(self.cpro, self.cmun) diff --git a/docs/README.md b/docs/README.md new file mode 100644 index 0000000..61d7063 --- /dev/null +++ b/docs/README.md @@ -0,0 +1,66 @@ +# Casos de uso de `python-aemet` + +## Requisitos previos + +### Instalar la librería `python-aemet` + +- Tener `python3` instalado en el sistema: `which python` + +- Instalar la librería en el local. Recomendamos el uso de un `virtualenv` o un gestor + de entornos como `pyenv`. + + Instala la librería + + ```bash + pip install python-aemet + ``` + +### Obtener la clave API + +Obtén tu clave de API en la siguiente URL: + + + +Y ponla en un fichero `aemet.key` + +## Casos de uso + +### Predicción de la temperatura máxima y mínima en un municipio concreto en los próximos días + +```bash +aemet -p Huelva -f /path/a/la/clave/aemet.key +``` + +La salida: + +```sh +Predicción de temperaturas para Huelva: + +2021-04-04T00:00:00 +Máxima: 23 +Mínima: 12 + +2021-04-05T00:00:00 +Máxima: 22 +Mínima: 13 + +2021-04-06T00:00:00 +Máxima: 25 +Mínima: 11 + +2021-04-07T00:00:00 +Máxima: 25 +Mínima: 13 + +2021-04-08T00:00:00 +Máxima: 23 +Mínima: 12 + +2021-04-09T00:00:00 +Máxima: 21 +Mínima: 12 + +2021-04-10T00:00:00 +Máxima: 21 +Mínima: 13 +``` diff --git a/requirements.txt b/requirements.txt index 6c737fe..c7ada47 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,3 +1,5 @@ urllib3 requests click +fuzzywuzzy +python-Levenshtein