Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 3 additions & 4 deletions DESCRIPTION
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
Package: inseeLocalData
Title: Accès aux données locales de l'Insee via le catalogue des API
Version: 0.0.0.9000
Version: 0.0.2
Authors@R:
c(person(given = "Marie-Emmanuelle",
family = "FAURE",
Expand All @@ -13,14 +13,13 @@ License: GPL-3
Encoding: UTF-8
LazyData: true
Roxygen: list(markdown = TRUE)
RoxygenNote: 7.1.1
RoxygenNote: 7.3.1
Language: fr
Suggests:
rstudioapi,
testthat,
vcr
Imports:
dplyr,
Imports:
httr,
stringr,
jsonlite,
Expand Down
7 changes: 7 additions & 0 deletions NEWS.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
# inseeLocalData 0.0.2
- Prise en compte des impacts dus au changement de portail des API :
- Changement d'URL (plus de V0.1)
- Plus besoin de token
- Structure du retour JSON légèrement différent

# inseeLocalData 0.0.1
97 changes: 30 additions & 67 deletions R/get_dataset.R
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
#' Fonction permettant d'importer les données de l'API 'données locales' pour un couple de paramètre
#'
#' @param jeton Access token (jeton) généré sur le catalogue des API de l'Insee
#' @param jeu_donnees code jeu de données se composant du nom de la source, du millésime des données et parfois du millésime géographique de diffusion
#' @param croisement sélection de variables (composée d'une variable ou de plusieurs)
#' @param modalite modalités souhaitées pour les variables (dans le même ordre)
Expand All @@ -18,36 +17,7 @@
#'
#' @examples
#' \donttest{
#' # Remplace jeton par la valeur du jeton genere sur le catalogue des API :
#' if (exists("jeton")) {
#' get_dataset(jeton,
#' "GEO2017REE2017",
#' "NA5_B-ENTR_INDIVIDUELLE",
#' "all.all",
#' "COM",
#' "51108")
#' }
#'
#' # Genere une fenetre dans laquelle vous pouvez renseigner le jeton genere sur le catalogue des API
#' # Permet de ne pas stocker le jeton en clair dans le programme
#' if (interactive() && identical(Sys.getenv("RSTUDIO"), "1")) {
#' get_dataset(rstudioapi::askForPassword("jeton:"),
#' "GEO2017REE2017",
#' "NA5_B-ENTR_INDIVIDUELLE",
#' "all.all",
#' "COM",
#' "51108")
#' }
#'
#' # Necessite la modification du fichier .Renviron en ajoutant
#' # une ligne jeton = "la valeur du jeton genere sur le catalogue des API"
#' # Pour acceder facilement au fichier .Renviron, vous pouvez
#' # utiliser la commande usethis::edit_r_environ("user")
#' # Necessite de redemarer R après avoir fait la modification
#' # Ce parametre doit etre mis a jour à chaque fois qu'un nouveau jeton est genere
#' if (!is.na(Sys.getenv("jeton", NA))) {
#' get_dataset(Sys.getenv("jeton"),
#' "GEO2017REE2017",
#' get_dataset("GEO2017REE2017",
#' "NA5_B-ENTR_INDIVIDUELLE",
#' "all.all",
#' "COM",
Expand All @@ -56,25 +26,20 @@



get_dataset <- function(jeton, jeu_donnees, croisement, modalite, nivgeo, codgeo, temporisation = NA){
get_dataset <- function(jeu_donnees, croisement, modalite, nivgeo, codgeo, temporisation = NA){

modalite <- stringr::str_replace_all(modalite, '\\+', '%2B')

auth_header <- httr::add_headers('Authorization'= paste('Bearer',jeton))
req <- paste0("https://api.insee.fr/donnees-locales/donnees/geo-",
croisement, "@", jeu_donnees, "/", nivgeo, "-", codgeo, ".", modalite)

res <- httr::content(httr::GET(paste0("https://api.insee.fr/donnees-locales/V0.1/donnees/geo-",
croisement, "@", jeu_donnees, "/", nivgeo, "-", codgeo, ".", modalite),
auth_header),
message(req)

res <- httr::content(httr::GET(req),
as="text", httr::content_type_json(), encoding='UTF-8')

if (stringr::str_detect(res, "Invalid Credentials. Make sure you have given the correct access token")){
print('Erreur - Jeton invalide')
} else if (stringr::str_detect(res, "Aucune cellule ne correspond a la requ\u00eate")){
if (stringr::str_detect(res, "Aucune cellule ne correspond a la requ\u00eate")){
print('Erreur - Param\u00e8tre(s) de la requ\u00eate incorrect(s)')
} else if (stringr::str_detect(res, "Resource forbidden ")){
print("Erreur - Scouscription a l API donn\u00e9es locales non r\u00e9alis\u00e9e")
} else if (stringr::str_detect(res, "quota")==T){
print("Erreur- Trop de requ\u00eates, faire une pause")
} else{

res <- jsonlite::fromJSON(res)
Expand All @@ -86,46 +51,46 @@ get_dataset <- function(jeton, jeu_donnees, croisement, modalite, nivgeo, codgeo
nb_var <- stringr::str_count(croisement, "-") + 1

zone <- res$Zone
info_zone <- as.data.frame(cbind(zone$'@codgeo',zone$'@nivgeo',do.call("cbind", zone$Millesime)), stringsAsFactors = FALSE)
colnames(info_zone) <- c("codgeo","libgeo","millesime_geo","libelle_sans_article","code_article")
info_zone <- as.data.frame(cbind(zone$'codgeo',zone$'nivgeo', stringsAsFactors = FALSE))
colnames(info_zone) <- c("codgeo","libgeo")

croisement <- res$Croisement
source <- as.data.frame(do.call("cbind", croisement$JeuDonnees), stringsAsFactors = FALSE)
colnames(source) <- c("jeu_donnees", "millesime_donnees", "lib_jeu_donnees","lib_source")

source <- cbind(source, info_zone$millesime_geo)
colnames(source)[colnames(source) =="info_zone$millesime_geo"] <- "millesime_geo"
source$source <- paste0("Insee, ", source$lib_source, " ", source$millesime_donnees,
", g\u00e9ographie au 01/01/", source$millesime_geo)
colnames(source) <- c("code", "Libelle", "Annee","Source")

variable <- res$Variable
temp <- variable$Modalite
info_modalite <- as.data.frame(cbind(variable$'@code',variable$Libelle), stringsAsFactors = FALSE)
info_modalite <- as.data.frame(cbind(variable$'code',variable$Libelle), stringsAsFactors = FALSE)

liste_code <- NULL
if (nb_var > 1) {
for (i in 1:length(temp)) {
if (dim(as.data.frame(temp[[i]]))[1]>1){
liste_code_temp <- data.frame(info_modalite[i,]$V1, info_modalite[i,]$V2, temp[[i]][,'@code'], temp[[i]][,'Libelle'],
liste_code_temp <- data.frame(info_modalite[i,]$V1,
info_modalite[i,]$V2,
temp[[i]][,'code'],
stringsAsFactors = FALSE)
colnames(liste_code_temp) <- c("variable", "lib_varible", "modalite", "lib_modalite")
colnames(liste_code_temp) <- c("variable", "lib_variable", "modalite")
} else {
liste_code_temp <- data.frame(info_modalite[i,]$V1, info_modalite[i,]$V2,temp[[i]]['@code'],temp[[i]]['Libelle'],stringsAsFactors = FALSE)
colnames(liste_code_temp) <- c("variable", "lib_varible", "modalite", "lib_modalite")
liste_code_temp <- data.frame(info_modalite[i,]$V1,
info_modalite[i,]$V2,
temp[[i]]['code'],
stringsAsFactors = FALSE)
colnames(liste_code_temp) <- c("variable", "lib_variable", "modalite")
}

liste_code <- rbind(liste_code_temp, liste_code)
}
} else {
if (dim(as.data.frame(temp))[1]>1){
liste_code <- data.frame(cbind(info_modalite,temp[,'@code'], temp[,'Libelle']),
liste_code <- data.frame(cbind(info_modalite,temp[,'code']),
stringsAsFactors = FALSE)
} else {
liste_code <- data.frame(cbind(info_modalite,temp['@code'], temp['Libelle']),
liste_code <- data.frame(cbind(info_modalite,as.data.frame(temp)$code),
stringsAsFactors = FALSE)
}

colnames(liste_code) <- c("variable", "lib_varible", "modalite", "lib_modalite")
colnames(liste_code) <- c("variable", "lib_variable", "modalite")
}

cellule <- as.data.frame(res$Cellule)
Expand All @@ -138,24 +103,22 @@ get_dataset <- function(jeton, jeu_donnees, croisement, modalite, nivgeo, codgeo
}
colnames(var_tot) <- c(t(var[[1]][2]))

donnees <- cbind(cellule$Zone, cellule$Mesure, var_tot, cellule$Valeur)
colnames(donnees) <- c("codgeo", "nivgeo", "mesure", "lib_mesure", c(t(var[[1]][2])), "valeur")
donnees <- cbind(cellule$Zone$codgeo, cellule$Zone$nivgeo, var_tot, cellule$Valeur)
colnames(donnees) <- c("codgeo", "nivgeo", c(t(var[[1]][2])), "valeur")

donnees <- as.data.frame(donnees)

} else {
if (dim(as.data.frame(cellule))[1]>1){
donnees <- do.call("cbind",cellule)
donnees <- data.frame(donnees[,'Zone.@codgeo'], donnees[,'Zone.@nivgeo'],
donnees[,'Mesure.@code'], donnees[,'Mesure.$'],
donnees[,'Modalite.@code'], donnees[,'Valeur'], stringsAsFactors = FALSE)
colnames(donnees) <- c("codgeo", "nivgeo", "mesure", "lib_mesure", var[[2]][2], "valeur")
donnees <- data.frame(donnees[,'Zone.codgeo'], donnees[,'Zone.nivgeo'],
donnees[,'Modalite.code'], donnees[,'Valeur'], stringsAsFactors = FALSE)
colnames(donnees) <- c("codgeo", "nivgeo", var[[2]][2], "valeur")
} else {
var <- as.character(cellule[,'Modalite..variable'])
donnees <- data.frame(cellule['Zone..codgeo'], cellule[,'Zone..nivgeo'],
cellule[,'Mesure..code'], cellule[,'Mesure..'],
cellule[,'Modalite..code'], cellule[,'Valeur'], stringsAsFactors = FALSE)
colnames(donnees) <- c("codgeo", "nivgeo", "mesure", "lib_mesure", var, "valeur")
colnames(donnees) <- c("codgeo", "nivgeo", var, "valeur")
}
}

Expand Down
35 changes: 5 additions & 30 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,16 +1,7 @@
<!-- README.md is generated from README.Rmd. Please edit that file -->

# inseeLocalData

<!-- badges: start -->

[![R-CMD-check](https://github.com/InseeFrLab/inseeLocalData/workflows/R-CMD-check/badge.svg)](https://github.com/InseeFrLab/inseeLocalData/actions)
[![Lifecycle: experimental](https://img.shields.io/badge/lifecycle-experimental-orange.svg)](https://www.tidyverse.org/lifecycle/#experimental)
[![CRAN status](https://www.r-pkg.org/badges/version/inseeLocalData)](https://cran.r-project.org/package=inseeLocalData)
<!-- badges: end -->

L’[API ‘Données
locales’](https://api.insee.fr/catalogue/site/themes/wso2/subthemes/insee/pages/item-info.jag?name=DonneesLocales&version=V0.1&provider=insee)
locales’](https://portail-api.insee.fr/catalog/api/3d577cf9-d081-4054-977c-f9d081b054b2?aq=ALL)
permet d’accéder aux données localisées à la commune, diffusées sur
insee.fr dans la rubrique ‘chiffres détaillés’, sous forme de cubes
prédéfinis.
Expand Down Expand Up @@ -48,22 +39,6 @@ remotes::install_github("inseefrlab/inseeLocalData")
```

## Utilisation

Dans les différents exemples, il est nécessaire d’avoir généré
préalablement un jeton sur le catalogue des API. Ensuite plusieurs
possibilités s’offrent à vous :

- Remplacer jeton par la valeur du jeton généré sur le catalogue des
API ;
- Générer une fenêtre dans laquelle vous pouvez renseigner le jeton
généré sur le catalogue des API (.rs.askForPassword(“jeton:”) ;
- Modifier le fichier .Renviron en ajoutant une ligne jeton = “la
valeur du jeton genere sur le catalogue des API”. Pour accéder
facilement au fichier .Renviron, vous pouvez utiliser la commande
usethis::edit\_r\_environ(“user”). Il est nécessaire de redémarer R
après avoir fait la modification. Attention, ce paramètre doit être
mis a jour à chaque fois qu’un nouveau jeton est généré.

### Exemple d’utilisation simple :

Cet exemple permet d’utiliser l’API pour un croisement et un code
Expand All @@ -78,7 +53,7 @@ nivgeo <- "COM"
codgeo <- "51108"
modalite <- "all.all"

donneesAPI <- get_dataset(jeton, jeu_donnees, croisement, modalite, nivgeo, codgeo)
donneesAPI <- get_dataset(jeu_donnees, croisement, modalite, nivgeo, codgeo)

donnees <- donneesAPI$donnees # pour accéder aux données
liste_code <- donneesAPI$liste_code # pour accéder aux nomenclatures
Expand All @@ -100,7 +75,7 @@ jeu_donnees <- "GEO2017REE2017"
modalite <- "all.all"

sortie <- mapply(get_dataset,
jeton, jeu_donnees, croisement,
jeu_donnees, croisement,
modalite, liste_code$nivgeo, liste_code$codgeo,USE.NAMES = TRUE)

donnees <- NULL
Expand All @@ -122,12 +97,12 @@ différente). Les paramètres sont renseignés au préalable dans un
data.frame ‘fichier’, ayant pour variables jeu\_donnees, croisement,
modalite, nivgeo et codgeo. Le paramètre temporisation est utilisé pour
faire une pause de 2 secondes entre chaque requêtes afin de ne pas
dépasser le quota de 30 requêtes par minute.
dépasser le quota de requêtes par minute du portail des API de l'Insee.

``` r
fichier <- 'mon fichier'
sortie <- mapply(get_dataset,
jeton, fichier$jeu_donnees, fichier$croisement,
fichier$jeu_donnees, fichier$croisement,
fichier$modalite, fichier$nivgeo, fichier$codgeo,2,USE.NAMES = TRUE)

# pour le 1er croisement renseigné dans le fichier en entrée
Expand Down
35 changes: 1 addition & 34 deletions man/get_dataset.Rd

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading
Loading