name, id, status, created, updated, priority, risk, related_issues, apps, trigger, schedule, expected_runtime_s, tags
| name |
id |
status |
created |
updated |
priority |
risk |
related_issues |
apps |
trigger |
schedule |
expected_runtime_s |
tags |
| aemet-madrid |
0002 |
pending |
2026-05-16 |
2026-05-16 |
medium |
low |
|
| dag_engine |
| data_factory |
| footprint_geo_stack |
|
cron |
0 * * * * |
10 |
| api |
| weather |
| geo |
| http-only |
|
Goal
Probar path HTTP-only (sin Chrome/CDP). Extractor REST -> data_factory -> sink geo (PostGIS via footprint_geo_stack). Demuestra que el stack tambien sirve para APIs publicas + datos georeferenciados.
Pre-requisitos
- API key AEMET (gratis, signup). Guardar en
pass insert aemet/api-key.
footprint_geo_stack corriendo (PostGIS :5432 + Martin tiles :3000).
- dag_engine activo.
Flow
- Crear funcion del registry
aemet_get_weather_py_infra (o usar http_get_json_py_infra directamente si la API responde JSON simple).
- Endpoint AEMET observacion convencional:
GET https://opendata.aemet.es/opendata/api/observacion/convencional/datos/estacion/<id> con header api_key.
- Schema esperado:
[{ts, temp, humidity, pressure, wind_speed, lat, lon}, ...].
- Sink: INSERT en PostGIS tabla
weather_madrid (ts, temp, humidity, pressure, geom geometry(Point, 4326)).
- Crear node en data_factory:
{kind: 'database', label: 'postgis_weather'} (sink declarado).
- DAG
aemet_madrid_hourly.yaml:
- Verificar Martin tiles renderiza overlay (opcional).
Acceptance
Telemetria esperada
function_stats.http_get_json_py_infra o aemet_get_weather_py_infra: calls_24h += 24 (1/hora).
data_factory.runs: 24 entries/dia.
data_factory.databases.last_seen_at actualizado por sink.
Notas
- Sin LLM/CDP. Mas barato que flow 0001.
- Caso minimal para servicios geo. Si funciona, sirve de plantilla para mas extractores API.