# transport.data.gouv.fr

{/* Page générée par scripts/generate.mjs depuis le dépôt : ne pas modifier à la main. */}

Télécharge le catalogue du Point d'accès national aux données de transport, garde les jeux dont la zone couverte est l'Isère et produit un tableau récapitulatif exportable.

| | |
|---|---|
| **Script** | [transports.data.gouv.R](https://github.com/maximehautin/hackathon_dge_gestion_des_flux/blob/main/transports.data.gouv.R) |
| **Langage** | R |
| **Paquets** | `httr2`, `jsonlite`, `purrr`, `dplyr`, `tibble` |
| **Authentification** | Aucune : API publique du Point d'accès national. |
| **Documentation** | [https://transport.data.gouv.fr/swaggerui](https://transport.data.gouv.fr/swaggerui) |

## Ce que fait le script

1. Fixer le critère de zone couverte (département 38, ou une AOM).
2. Importer le catalogue `/api/datasets`.
3. Filtrer sur l'Isère, construire le tableau des jeux et de leurs ressources, l'exporter.

## Code

```r title="transports.data.gouv.R"
library(httr2)
library(jsonlite)
library(purrr)
library(dplyr)
library(tibble)

# ======================================================================================
# 1. CRITERES DE SELECTION #peut aussi être des aom par exemple, voir la documentation
# ======================================================================================

covered_area <- list(
  insee = "38",
  nom   = "Isère",
  type  = "departement"
)

# ==================================================
# 2. IMPORTER LE CATALOGUE DE L'API
# ==================================================

url_api <- "https://transport.data.gouv.fr/api/datasets"

reponse <- request(url_api) |>
  req_timeout(120) |>
  req_perform()

stopifnot(resp_status(reponse) == 200)

datasets <- fromJSON(
  resp_body_string(reponse),
  simplifyVector = FALSE
)

cat("Nombre total de jeux de données :", length(datasets), "\n")

# ==================================================
# 3. FILTRER LES JEUX DE DONNEES SUR L'ISERE
# ==================================================

datasets_isere <- keep(datasets, function(dataset) {
  
  zones <- dataset$covered_area
  
  if (is.null(zones) || length(zones) == 0) {
    return(FALSE)
  }
  
  any(map_lgl(zones, function(zone) {
    identical(as.character(zone$insee), covered_area$insee) &&
      identical(as.character(zone$nom), covered_area$nom) &&
      identical(as.character(zone$type), covered_area$type)
  }))
})

cat("Jeux de données couvrant l'Isère :",
    length(datasets_isere), "\n")

# ==================================================
# 4. CREER UN TABLEAU RECAPITULATIF
# ==================================================

resultats <- map_dfr(datasets_isere, function(dataset) {
  
  tibble(
    id = as.character(dataset$id),
    titre = dataset$title,
    type = dataset$type,
    url_page = dataset$page_url,
    nombre_ressources = length(dataset$resources)
  )
})

print(resultats)

# ==================================================
# 5. EXPORTER LE CATALOGUE FILTRE
# ==================================================

write.csv(
  resultats,
  "catalogue_transports_isere.csv",
  row.names = FALSE,
  fileEncoding = "UTF-8"
)
```
