Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fuzzysearch para mejorar la busqueda de municipio #31

Open
wants to merge 8 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 13 additions & 6 deletions aemet/__init__.py
Original file line number Diff line number Diff line change
@@ -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"]))
18 changes: 11 additions & 7 deletions aemet/models.py
Original file line number Diff line number Diff line change
@@ -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
Expand Down Expand Up @@ -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)
Expand Down
66 changes: 66 additions & 0 deletions docs/README.md
Original file line number Diff line number Diff line change
@@ -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:

<https://opendata.aemet.es/centrodedescargas/obtencionAPIKey>

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
```
2 changes: 2 additions & 0 deletions requirements.txt
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
urllib3
requests
click
fuzzywuzzy
python-Levenshtein