From 7bb96d6aa419d9b28051c16c6898acdbaf6af2e4 Mon Sep 17 00:00:00 2001 From: Dorchies David Date: Mon, 13 Feb 2023 10:08:35 +0100 Subject: [PATCH] feat: automatic configuration of endpoints Refs #14 --- R/sysdata.rda | Bin 2540 -> 2226 bytes data-raw/config.yml | 546 +-------------------------------------- data-raw/configuration.R | 40 +++ 3 files changed, 41 insertions(+), 545 deletions(-) diff --git a/R/sysdata.rda b/R/sysdata.rda index 1fb8e30616c480c1aa9993cccd27152f59274bb4..5f313cebee3f00565629ed3cd480261cff048405 100644 GIT binary patch literal 2226 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 CL3I!S diff --git a/data-raw/config.yml b/data-raw/config.yml index 8c339be..dbef1e3 100644 --- a/data-raw/config.yml +++ b/data-raw/config.yml @@ -1,565 +1,21 @@ default: api_url: https://hubeau.eaufrance.fr/api + api_docs: api-docs user_agent: https://github.com/inrae/hubeau apis: prelevements: path: v1/prelevements - endpoints: - points_prelevement: - path: referentiel/points_prelevement - fields: - - code_bdlisa - - code_bss_point_eau - - code_commune_insee - - code_departement - - code_entite_hydro_cours_eau - - code_entite_hydro_plan_eau - - code_mer_ocean - - code_nature - - code_ouvrage - - code_point_prelevement - - code_type_milieu - - code_zone_hydro - - date_exploitation - - fields - - libelle_departement - - nappe_accompagnement - - nom_commune - - nom_point_prelevement - chroniques: - path: chroniques - fields: - - annee - - bbox - - code_commune_insee - - code_departement - - code_mode_obtention_volume - - code_ouvrage - - code_qualification_volume - - code_statut_instruction - - code_statut_volume - - code_usage - - distance - - fields - - latitude - - libelle_departement - - longitude - - nom_commune - - prelevement_ecrasant - - producteur_donnee - - volume_max - - volume_min - ouvrages: - path: referentiel/ouvrages - fields: - - bbox - - code_bdlisa - - code_commune_insee - - code_departement - - code_entite_hydro_cours_eau - - code_entite_hydro_plan_eau - - code_mer_ocean - - code_ouvrage - - code_type_milieu - - codes_points_prelevements - - date_exploitation - - distance - - fields - - latitude - - libelle_departement - - longitude - - nom_commune - - nom_ouvrage indicateurs_services: path: v0/indicateurs_services - endpoints: - communes: - path: communes - fields: - - annee - - code_commune - - code_departement - - detail_service - - fields - - type_service - indicateurs: - path: indicateurs - fields: - - annee - - code_indicateur - - fields - services: - path: services - fields: - - annee - - code_commune - - code_departement - - fields - - type_service hydrometrie: path: v1/hydrometrie - endpoints: - stations: - path: referentiel/stations - fields: - - bbox - - code_commune_station - - code_cours_eau - - code_departement - - code_region - - code_sandre_reseau_station - - code_site - - code_station - - date_fermeture_station - - date_ouverture_station - - distance - - en_service - - fields - - latitude - - libelle_cours_eau - - libelle_site - - libelle_station - - longitude - sites: - path: referentiel/sites - fields: - - bbox - - code_commune_site - - code_cours_eau - - code_departement - - code_region - - code_site - - code_troncon_hydro_site - - code_zone_hydro_site - - distance - - fields - - latitude - - libelle_cours_eau - - libelle_site - - longitude - observations_tr: - path: observations_tr - fields: - - bbox - - code_entite - - cursor - - date_debut_obs - - date_fin_obs - - distance - - fields - - grandeur_hydro - - latitude - - longitude - - timestep - obs_elab: - path: obs_elab - fields: - - bbox - - code_entite - - cursor - - date_debut_obs_elab - - date_fin_obs_elab - - distance - - fields - - grandeur_hydro_elab - - latitude - - longitude - - resultat_max - - resultat_min niveaux_nappes: path: v1/niveaux_nappes - endpoints: - chroniques: - path: chroniques - fields: - - code_bss - - date_debut_mesure - - date_fin_mesure - - fields - chroniques_tr: - path: chroniques_tr - fields: - - bbox - - bss_id - - code_bss - - date_debut_mesure - - date_fin_mesure - - fields - - niveau_ngf_max - - niveau_ngf_min - - profondeur_max - - profondeur_min - stations: - path: stations - fields: - - bbox - - bss_id - - code_bdlisa - - code_bss - - code_commune - - code_departement - - codes_masse_eau_edl - - date_recherche - - fields - - srid poisson: path: v1/etat_piscicole - endpoints: - observations: - path: observations - fields: - - code_operation - - date_operation - - etat_avancement_operation - - code_qualification_operation - - libelle_qualification_operation - - code_station - - libelle_station - - uri_station - - coordonnee_x_station - - coordonnee_y_station - - code_epsg_projection_station - - code_projection_station - - libelle_projection_station - - code_point_prelevement - - code_point_prelevement_aspe - - libelle_point_prelevement_aspe - - coordonnee_x_point_prelevement - - coordonnee_y_point_prelevement - - code_epsg_projection_point_prelevement - - code_projection_point_prelevement - - libelle_projection_point_prelevement - - lieu_dit_point_prelevement - - localisation_precise_point_prelevement - - longitude - - code_entite_hydro - - latitude - - libelle_entite_hydro - - uri_entite_hydro - - code_commune - - libelle_commune - - code_departement - - libelle_departement - - code_region - - libelle_region - - code_bassin - - libelle_bassin - - codes_dispositifs_collecte - - libelles_dispositifs_collecte - - uris_dispositifs_collecte - - protocole_peche - - objectifs_operation - - code_prelevement_elementaire - - type_prelevement_elementaire - - duree_prelevement_elementaire - - numero_passage - - type_points - - nombre_points - - nombre_points_sans_poisson - - nombre_points_facies_courant - - nombre_points_facies_plat - - nombre_points_facies_profond - - nombre_points_annexes - - nombre_points_berge - - nombre_points_chenal - - nom_ambiance - - longueur_ambiance - - largeur_ambiance - - profondeur_ambiance - - code_facies_ambiance - - libelle_facies_ambiance - - situation_ambiance - - localisation_ambiance - - classe_vitesse_courant_ambiance - - code_ombrage_ambiance - - libelle_ombrage_ambiance - - code_granulo_ambiance_dominant - - libelle_granulo_ambiance_dominant - - code_granulo_ambiance_accessoire - - libelle_granulo_ambiance_accessoire - - vegetation_ambiance - - abondance_cache_vegetation_aquatique_ambiance - - abondance_cache_embacles_ambiance - - abondance_cache_vegetation_bordure_ambiance - - abondance_cache_sous_berge_ambiance - - abondance_cache_granulo_ambiance - - observation_ambiance - - code_lot - - code_type_lot - - libelle_type_lot - - effectif_lot - - code_taxon - - code_alternatif_taxon - - nom_commun_taxon - - nom_latin_taxon - - uri_taxon - - taille_min_lot - - taille_max_lot - - type_longueur_lot - - poids_lot_mesure - - poids_lot_estime - - methode_estimation_poids_lot - - code_individu - - taille_individu - - type_longueur_individu - - mesure_individu_reelle - - poids_individu_mesure - - poids_individu_estime - - methode_estimation_poids_individu - - sexe_individu - - age_individu - - codes_pathologies_lot - - libelles_pathologies_lot - - codes_fractions_pathologies_lot - - libelles_fractions_pathologies_lot - - uris_fractions_pathologies_lot - - importances_pathologies_lot - - codes_pathologies_individu - - libelles_pathologies_individu - - codes_fractions_pathologies_individu - - libelles_fractions_pathologies_individu - - uris_fractions_pathologies_individu - - importances_pathologies_individu - - fields ecoulement: path: vbeta/ecoulement - endpoints: - stations: - path: stations - fields: - - code_station - - libelle_station - - uri_station - - code_departement - - libelle_departement - - code_commune - - libelle_commune - - code_region - - libelle_region - - code_bassin - - libelle_bassin - - coordonnee_x_station - - coordonnee_y_station - - code_projection_station - - libelle_projection_station - - code_epsg_station - - code_cours_eau - - libelle_cours_eau - - uri_cours_eau - - etat_station - - date_maj_station - - latitude - - longitude - - distance - - bbox - - fields - observations: - path: observations - fields: - - format - - code_station - - libelle_station - - code_departement - - libelle_departement - - code_commune - - libelle_commune - - code_region - - libelle_region - - code_bassin - - libelle_bassin - - code_cours_eau - - libelle_cours_eau - - code_campagne - - code_reseau - - libelle_reseau - - date_observation_min - - date_observation_max - - code_ecoulement - - libelle_ecoulement - - longitude - - latitude - - distance - - bbox - - page - - size - - fields - - accept - campagnes: - path: campagnes - fields: - - code_campagne - - date_campagne_min - - date_campagne_max - - code_type_campagne - - libelle_type_campagne - - code_reseau - - libelle_reseau - - code_departement - - libelle_departement - - page - - size - - fields - - accept hydrobio: path: v1/hydrobio - endpoints: - stations: - path: stations_hydrobio - fields: - - bbox - - code_bassin - - code_commune - - code_cours_eau - - code_departement - - code_masse_eau - - code_region - - code_sous_bassin - - code_station_hydrobio - - codes_appel_taxons - - codes_indices - - codes_reseaux - - codes_supports - - date_service - - distance - - fields - - format - - latitude - - libelle_station_hydrobio - - longitude - - page - - size - indices: - path: indices - fields: - - bbox - - code_banque_reference - - code_bassin - - code_commune - - code_cours_eau - - code_departement - - code_indice - - code_masse_eau - - code_prelevement - - code_qualification - - code_region - - code_sous_bassin - - code_station_hydrobio - - code_support - - date_debut_prelevement - - date_fin_prelevement - - distance - - fields - - format - - latitude - - libelle_indice - - longitude - - page - - resultat_indice_max - - resultat_indice_min - - size - taxons: - path: taxons - fields: - - bbox - - code_appel_taxon - - code_banque_reference - - code_bassin - - code_commune - - code_cours_eau - - code_departement - - code_indice - - code_masse_eau - - code_prelevement - - code_qualification - - code_region - - code_sous_bassin - - code_station_hydrobio - - code_support - - code_type_resultat - - codes_indices_operation - - date_debut_prelevement - - date_fin_prelevement - - distance - - fields - - format - - latitude - - longitude - - page - - size temperature: path: v1/temperature - endpoints: - station: - path: station - fields: - - bbox - - code_banque_reference - - code_bassin - - code_commune - - code_cours_eau - - code_departement - - code_eu_masse_eau - - code_masse_eau - - code_region - - code_sous_bassin - - code_station - - code_troncon_hydro - - date_debut_maj - - date_debut_mesure - - date_fin_maj - - date_fin_mesure - - distance - - exact_count - - fields - - latitude - - libelle_bassin - - libelle_commune - - libelle_cours_eau - - libelle_departement - - libelle_masse_eau - - libelle_region - - libelle_sous_bassin - - libelle_station - - longitude - - size - - type_entite_hydro - chronique: - path: chronique - fields: - - bbox - - code_banque_reference - - code_bassin - - code_commune - - code_cours_eau - - code_departement - - code_eu_masse_eau - - code_masse_eau - - code_qualification - - code_region - - code_sous_bassin - - code_station - - code_statut - - code_troncon_hydro - - date_debut_maj - - date_debut_mesure - - date_fin_maj - - date_fin_mesure - - distance - - fields - - format - - latitude - - libelle_bassin - - libelle_commune - - libelle_cours_eau - - libelle_departement - - libelle_masse_eau - - libelle_qualification - - libelle_region - - libelle_sous_bassin - - libelle_station - - libelle_statut - - longitude - - resultat_max - - resultat_min - - size - - type_entite_hydro diff --git a/data-raw/configuration.R b/data-raw/configuration.R index d6e873f..422887a 100644 --- a/data-raw/configuration.R +++ b/data-raw/configuration.R @@ -1,6 +1,46 @@ ## code to prepare `.cfg` dataset update.packages("config") +library(httr) + .cfg <- config::get(file = "data-raw/config.yml") +defineApis <- function(api, cfg) { + message("Processing API: ", api$path) + query <- file.path(cfg$api_url, api$path, cfg$api_docs) + d <- content(GET(query), as = "parsed") + sapply(c("swagger", "openapi"), function(fmt) { + if (!is.null(d[[fmt]])) { + message(fmt, " ", d[[fmt]]) + } + }) + path_endpoints <- names(d$paths) + path_endpoints <- path_endpoints[!grepl(".csv", path_endpoints, fixed = TRUE)] + endpoints <- basename(path_endpoints) + fields <- lapply(path_endpoints, function(ep) { + if(!is.null(d$paths[[ep]]$get$parameters)) { + sapply(d$paths[[ep]]$get$parameters, "[[", "name") + } + }) + l <- lapply(seq_along(endpoints), function(i) { + path <- gsub(api$path, "", path_endpoints[i]) + path <- gsub("^/+", "", path) + list(path = path, + fields = fields[[i]]) + }) + names(l) <- endpoints + return(list(path = api$path, endpoints = l)) +} + +.cfg$apis <- lapply(.cfg$apis, defineApis, cfg = .cfg) + +# Fix issue https://github.com/BRGM/hubeau/issues/127 +ecoulement_ep <- names(.cfg$apis$ecoulement$endpoints) +for (ep in ecoulement_ep) { + which_fields <- which(grepl("fields", .cfg$apis$ecoulement$endpoints[[ep]]$fields)) + .cfg$apis$ecoulement$endpoints[[ep]]$fields[which_fields] <- "fields" +} + + + usethis::use_data(.cfg, overwrite = TRUE, internal = TRUE)