Documentation OEDB

Concepts généraux, référence technique de l'API REST, instructions de déploiement et présentation des pages de l'éditeur https://edit.oedb.cipherbliss.com.

Concepts généraux

OpenEventDatabase répond à un manque : partager des informations spatio-temporelles de type « quoi / où / quand ». OpenStreetMap couvre le « quoi » et le « où », mais pas le « quand » ni l'historique d'évènements ponctuels ou récurrents.

Itinéraire temps réel

Un calcul d'itinéraire peut intégrer bouchons, travaux, météo ou incidents pour passer d'une appli passive à une appli temps réel.

Que faire ce week-end ?

Spectacles, activités, horaires de ciné — trouver un loisir proche de chez soi à partir d'évènements géolocalisés.

Mémoire territoriale

Conserver des évènements historiques, d'anciens tracés de routes, champs de bataille, découpages administratifs…

Les trois dimensions d'un évènement

Dans tous les cas d'usage, trois informations sont nécessaires :

Quoi Description sémantique : type (what), nature temporelle (scheduled, forecast, unscheduled), famille (culture, transport, météo…), importance.
Composante géographique : point lat/lon, géométrie GeoJSON, lien vers un référentiel (where:osm, where:wikidata).
Quand Temporalité ISO 8601 : instant, intervalle, récurrence ; mots-clés relatifs (today, next7days…).

Le projet propose une base spatio-temporelle ouverte pour échanger ces triplets, alimentée manuellement ou via des extracteurs automatisés depuis des sources ouvertes.

Format de données

L'API manipule des GeoJSON FeatureCollection. Chaque évènement est une Feature avec une géométrie et des propriétés métier.

{
  "type": "FeatureCollection",
  "features": [{
    "type": "Feature",
    "geometry": { "type": "Point", "coordinates": [2.35, 48.86] },
    "properties": {
      "what": "culture.other",
      "type": "scheduled",
      "label": "Concert en plein air",
      "start": "2026-07-17T20:00:00Z",
      "stop": "2026-07-17T23:00:00Z"
    }
  }]
}

Schéma PostgreSQL

Base PostgreSQL avec PostGIS. Les géométries sont mutualisées dans geo ; les métadonnées évènement (label, description, source…) vivent dans events_tags (JSONB). Les suppressions sont archivées dans events_deleted. Les tables extractor_* alimentent le monitoring local des extracteurs.

Schéma des tables PostgreSQL OEDB
Vue d'ensemble des tables et de la clé étrangère events → geo

Tables

Table Rôle
eventsÉvènements actifs
geoGéométries partagées (hash, geom PostGIS)
events_deletedArchive des évènements supprimés
extractor_registryCatalogue des extracteurs
extractor_runsHistorique d'exécution des extracteurs

events.events_geo référence geo.hash (FK). Index SP-GiST sur events_what / events_when, GIST sur geo.geom. Définition SQL : setup.sql et migrations/.

API REST

Base URL de production : https://api.openeventdatabase.org. L'éditeur Angular consomme la même API via le préfixe /api sur edit.oedb.cipherbliss.com.

Endpoints principaux

MéthodeCheminDescription
GET/eventListe d'évènements (filtres query string)
POST/eventCréation d'un évènement (GeoJSON Feature)
GET/PUT/DELETE/event/{id}Lecture, mise à jour, suppression
GET/event/searchRecherche spatiale avancée (géométrie POST)
GET/statsStatistiques agrégées
GET/rssFlux RSS des 200 derniers évènements
GET/db/dumpsListe des archives (instance locale)
POST/db/dumps/createGénère un dump SQL + GeoJSON

Paramètres de requête GET /event

ParamètreFormatDescription
whatstringFiltre par catégorie (préfixe), ex. traffic.accident
whenISO8601 / mot-clénow, today, last7days, next30days
start / stopISO8601 / mot-cléPlage temporelle (évènements qui chevauchent l'intervalle)
bboxlon,lat,lon,latBoîte englobante (Est, Sud, Ouest, Nord)
nearlon,lat[,m]Proximité d'un point ; distance max en mètres (défaut 1 m)
polylineencodéeÉvènements le long d'un itinéraire ; buffer en mètres
typescheduled | forecast | unscheduledNature temporelle de l'évènement
limitentierNombre max de résultats (défaut 200)
offsetentierPagination (si supportée par l'instance)
geomfull | only | nombreNiveau de détail géométrique dans la réponse
where:osmid OSMFiltre par référentiel OpenStreetMap
where:wikidataQ-idFiltre par entité Wikidata

Exemples

# Alertes météo actives à une date
GET https://api.openeventdatabase.org/event?when=2026-07-15T12:00:00Z&what=weather.alert

# Accidents près de Paris (10 km, 10 dernières minutes)
GET https://api.openeventdatabase.org/event?what=traffic.accident&near=2.3522,48.8566,10000&when=last10minutes

# Conférences sur une plage temporelle
GET https://api.openeventdatabase.org/event?what=culture&start=2026-01-01&stop=2026-12-31&limit=50

# Évènements dans une bbox (France métropolitaine approx.)
GET https://api.openeventdatabase.org/event?bbox=-5.0,41.0,10.0,52.0&geom=full

Bac à sable interactif : Swagger Petstore (spec swagger.json sur la forge). Instance locale avec UI intégrée : /swagger. Détail des paramètres : doc/api_query_params.md.

Lancer l'API

Prérequis : PostgreSQL/PostGIS, Python 3, variables d'environnement (.env).

Docker (recommandé)

cp .env.example .env
docker-compose up -d
# API disponible sur http://localhost:8080

Installation locale

python3 -m venv venv && source venv/bin/activate
pip install -r requirements.txt
bash setup_db.sh
python3 backend.py
# ou : uwsgi --http :8080 --wsgi-file backend.py --callable app

Variables d'environnement

VariableRôle
DB_NAME, DB_HOST, DB_USERConnexion PostgreSQL
POSTGRES_PASSWORDMot de passe base
CLIENT_ID, CLIENT_SECRETOAuth (édition sécurisée)

Synchroniser des archives depuis l'API publique

python3 extractors/oedb_sync_extractor.py --mode sync \
  --since 2026-01-01 --until 2026-01-31 \
  --batch-size 1000 --no-dry-run --output-dir dumps

python3 scripts/generate_landing_html.py

Pages de l'éditeur

L'éditeur cartographique Angular est servi sur https://edit.oedb.cipherbliss.com. Il permet de visualiser, filtrer, créer et contrôler la qualité des évènements OEDB.

RoutePageDescription
/Accueil / carteCarte principale, filtres par type what, bascule carte/tableau, recherche.
/event/createCréer un évènementFormulaire de création avec géolocalisation et presets de catégories.
/agendaAgendaVue calendrier (mois, semaine, jour) des évènements.
/unlocated-eventsÉvénements non localisésListe des évènements sans coordonnées valides à corriger.
/quality-controlContrôle qualitéDétection d'anomalies et validation des données.
/batch-editModification en masseÉdition groupée de plusieurs évènements.
/events-docsEvents docsExploration des types what, presets et propriétés attendues.
/researchResearchRecherche avancée et exploration des jeux de données.
/nouvelles-categoriesNouvelles catégoriesSuivi des types what émergents.
/statsStatistiquesComptages et tendances (proxy vers l'API /stats).
/demoHub démosIndex des démos thématiques alimentées par extracteurs.
/demo/ev-chargingDémo recharge VESessions de recharge véhicule électrique.
/demo/wildlife-observationsDémo fauneObservations animales (cerfs, lucioles, chauves-souris…).
/demo/lawsDémo lois adoptéesTextes promulgués ou adoptés (CLAIR.vote).
/demo/scienceDémo découvertesDates de découvertes scientifiques Wikidata.
/demo/space-launchesDémo lancementsLancements spatiaux Launch Library 2.
/demo/bordeaux-associationsDémo assos BordeauxAgenda associatif bordelais.
/demo/renewable-constructionDémo éolien / solaireChantiers renouvelables (ODRÉ RNAé).
/extractors-monitorSuivi extracteursHistorique des runs d'extracteurs (JSON statique extractors-monitor.json).
/dumpsArchives dumpsListe des snapshots GeoJSON/SQL (instance locale).

Ouvrir l'éditeur →

Archives de dumps

Snapshots GeoJSON et SQL générés par l'extracteur de synchronisation et par POST /db/dumps/create. Regroupés par année lorsque le nom de fichier contient une période (oedb_YYYYMM_…).

AnnéeMoisÉvènementsTailleTéléchargements
2026738 44928.71 MoGeoJSON · ZIP
202512107 14282.59 MoGeoJSON · ZIP