R/sirets_successeurs.R

Defines functions sucesseurs_quiet sirets_successeurs

Documented in sirets_successeurs

#' Liens de succession d'une liste d'établissements
#' 
#' Télécharge sur l'API Sirene l'ensemble des successeurs d'une liste
#' d'établissements.
#' 
#' Cette fonction appelle [`telechargerDonnees`] pour chacun des établissements
#' passés en paramètre (de manière optimisée).
#' 
#' Les données téléchargées au format "json" sont enregistrées dans un dossier
#' temporaire.
#' 
#' @section Authentification API Sirene:
#' Comme toutes les fonctions reposant sur l'[API](https://api.insee.fr) Sirene,
#' cette fonction nécessite une clé d'application et un secret associé pour 
#' pouvoir générer un jeton d'accès. Ces informations sont à passer sous forme
#' de variables d'environnement.
#' 
#' Renseigner pour cela `INSEE_APP_KEY` et `INSEE_APP_SECRET` dans un fichier
#' de configuration `.Renviron`.
#' Consulter [cette page](https://api.insee.fr/catalogue/site/themes/wso2/subthemes/insee/pages/help.jag)
#' pour de l'aide sur comment obtenir de tels identifiants.
#'
#' @param sirets établissements pour lesquels rechercher les successeurs (un
#'   vecteur caractère de numéros SIRET).
#' @param ... paramètres additionnels de la fonction `telechargerDonnees`
#'
#' @return Un data.frame agrégeant les résultats pour chaque siret (vide si
#'   aucun des établissements n'a de successeur).
#'
#' @export
#' 
#' @examples \dontrun{
#' 
#' sirets_successeurs(c("30070230500040", "30137492200120", "30082187300019"))
#' }

sirets_successeurs <- function(sirets, ...) {
  
  stopifnot(
    is.character(sirets),
    length(sirets) > 0
  )
  
  sirets <- unique(sirets)
  
  # si l'url de la requete est trop longue (plus de 3400 caracteres, limite
  # max estimee empiriquement), une erreur survient
  # -> on fait des groupes de 68 sirets
  grp_sirets <- split(sirets, (seq_along(sirets) - 1) %/% 68)
  
  sortie_tot <- lapply(unname(grp_sirets), sucesseurs_quiet, ...)
  
  # agrege
  sortie_tot <- do.call(rbind, sortie_tot)
  
  unique(sortie_tot)
  
}

# Fonction auxiliaire

sucesseurs_quiet <- function(sirets, ...) {
  # telecharge successeurs avec gestion des requêtes sans résultat
  
  # construit requete
  query <-
    paste(
      paste("siretEtablissementPredecesseur", sirets, sep = ":"),
      collapse = " OR "
    )
  
  # appel API via doremifasol (si 404 -> data.frame vide)
  dl <- telechargerFichier(
    "SIRENE_SIRET_LIENS",
    argsApi = list(q = query, tri = "successeur"),
    ...
  )
  tab <- tryCatch(
    chargerDonnees(dl),
    error = function(e) {
      if (grepl("erreur 404", e$message))
        return(data.frame())
      else {
        return(NULL)
      }
    }
  )
}
InseeFrLab/DoReMIFaSol documentation built on April 13, 2025, 11:01 p.m.