Skip to content

Commit 54685a1

Browse files
authored
Merge pull request #13 from cbobinec/fix_new_catalog
Adaptations au nouveau portail des API et au retour JSON structuré différemment
2 parents c4e3668 + 2e7dbe9 commit 54685a1

File tree

8 files changed

+139
-181
lines changed

8 files changed

+139
-181
lines changed

DESCRIPTION

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
Package: inseeLocalData
22
Title: Accès aux données locales de l'Insee via le catalogue des API
3-
Version: 0.0.0.9000
3+
Version: 0.0.2
44
Authors@R:
55
c(person(given = "Marie-Emmanuelle",
66
family = "FAURE",
@@ -13,14 +13,13 @@ License: GPL-3
1313
Encoding: UTF-8
1414
LazyData: true
1515
Roxygen: list(markdown = TRUE)
16-
RoxygenNote: 7.1.1
16+
RoxygenNote: 7.3.1
1717
Language: fr
1818
Suggests:
1919
rstudioapi,
2020
testthat,
2121
vcr
22-
Imports:
23-
dplyr,
22+
Imports:
2423
httr,
2524
stringr,
2625
jsonlite,

NEWS.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
# inseeLocalData 0.0.2
2+
- Prise en compte des impacts dus au changement de portail des API :
3+
- Changement d'URL (plus de V0.1)
4+
- Plus besoin de token
5+
- Structure du retour JSON légèrement différent
6+
7+
# inseeLocalData 0.0.1

R/get_dataset.R

Lines changed: 30 additions & 67 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
#' Fonction permettant d'importer les données de l'API 'données locales' pour un couple de paramètre
22
#'
3-
#' @param jeton Access token (jeton) généré sur le catalogue des API de l'Insee
43
#' @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
54
#' @param croisement sélection de variables (composée d'une variable ou de plusieurs)
65
#' @param modalite modalités souhaitées pour les variables (dans le même ordre)
@@ -18,36 +17,7 @@
1817
#'
1918
#' @examples
2019
#' \donttest{
21-
#' # Remplace jeton par la valeur du jeton genere sur le catalogue des API :
22-
#' if (exists("jeton")) {
23-
#' get_dataset(jeton,
24-
#' "GEO2017REE2017",
25-
#' "NA5_B-ENTR_INDIVIDUELLE",
26-
#' "all.all",
27-
#' "COM",
28-
#' "51108")
29-
#' }
30-
#'
31-
#' # Genere une fenetre dans laquelle vous pouvez renseigner le jeton genere sur le catalogue des API
32-
#' # Permet de ne pas stocker le jeton en clair dans le programme
33-
#' if (interactive() && identical(Sys.getenv("RSTUDIO"), "1")) {
34-
#' get_dataset(rstudioapi::askForPassword("jeton:"),
35-
#' "GEO2017REE2017",
36-
#' "NA5_B-ENTR_INDIVIDUELLE",
37-
#' "all.all",
38-
#' "COM",
39-
#' "51108")
40-
#' }
41-
#'
42-
#' # Necessite la modification du fichier .Renviron en ajoutant
43-
#' # une ligne jeton = "la valeur du jeton genere sur le catalogue des API"
44-
#' # Pour acceder facilement au fichier .Renviron, vous pouvez
45-
#' # utiliser la commande usethis::edit_r_environ("user")
46-
#' # Necessite de redemarer R après avoir fait la modification
47-
#' # Ce parametre doit etre mis a jour à chaque fois qu'un nouveau jeton est genere
48-
#' if (!is.na(Sys.getenv("jeton", NA))) {
49-
#' get_dataset(Sys.getenv("jeton"),
50-
#' "GEO2017REE2017",
20+
#' get_dataset("GEO2017REE2017",
5121
#' "NA5_B-ENTR_INDIVIDUELLE",
5222
#' "all.all",
5323
#' "COM",
@@ -56,25 +26,20 @@
5626

5727

5828

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

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

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

65-
res <- httr::content(httr::GET(paste0("https://api.insee.fr/donnees-locales/V0.1/donnees/geo-",
66-
croisement, "@", jeu_donnees, "/", nivgeo, "-", codgeo, ".", modalite),
67-
auth_header),
36+
message(req)
37+
38+
res <- httr::content(httr::GET(req),
6839
as="text", httr::content_type_json(), encoding='UTF-8')
6940

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

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

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

9257
croisement <- res$Croisement
9358
source <- as.data.frame(do.call("cbind", croisement$JeuDonnees), stringsAsFactors = FALSE)
94-
colnames(source) <- c("jeu_donnees", "millesime_donnees", "lib_jeu_donnees","lib_source")
95-
96-
source <- cbind(source, info_zone$millesime_geo)
97-
colnames(source)[colnames(source) =="info_zone$millesime_geo"] <- "millesime_geo"
98-
source$source <- paste0("Insee, ", source$lib_source, " ", source$millesime_donnees,
99-
", g\u00e9ographie au 01/01/", source$millesime_geo)
59+
colnames(source) <- c("code", "Libelle", "Annee","Source")
10060

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

10565
liste_code <- NULL
10666
if (nb_var > 1) {
10767
for (i in 1:length(temp)) {
10868
if (dim(as.data.frame(temp[[i]]))[1]>1){
109-
liste_code_temp <- data.frame(info_modalite[i,]$V1, info_modalite[i,]$V2, temp[[i]][,'@code'], temp[[i]][,'Libelle'],
69+
liste_code_temp <- data.frame(info_modalite[i,]$V1,
70+
info_modalite[i,]$V2,
71+
temp[[i]][,'code'],
11072
stringsAsFactors = FALSE)
111-
colnames(liste_code_temp) <- c("variable", "lib_varible", "modalite", "lib_modalite")
73+
colnames(liste_code_temp) <- c("variable", "lib_variable", "modalite")
11274
} else {
113-
liste_code_temp <- data.frame(info_modalite[i,]$V1, info_modalite[i,]$V2,temp[[i]]['@code'],temp[[i]]['Libelle'],stringsAsFactors = FALSE)
114-
colnames(liste_code_temp) <- c("variable", "lib_varible", "modalite", "lib_modalite")
75+
liste_code_temp <- data.frame(info_modalite[i,]$V1,
76+
info_modalite[i,]$V2,
77+
temp[[i]]['code'],
78+
stringsAsFactors = FALSE)
79+
colnames(liste_code_temp) <- c("variable", "lib_variable", "modalite")
11580
}
11681

11782
liste_code <- rbind(liste_code_temp, liste_code)
11883
}
11984
} else {
12085
if (dim(as.data.frame(temp))[1]>1){
121-
liste_code <- data.frame(cbind(info_modalite,temp[,'@code'], temp[,'Libelle']),
86+
liste_code <- data.frame(cbind(info_modalite,temp[,'code']),
12287
stringsAsFactors = FALSE)
12388
} else {
124-
liste_code <- data.frame(cbind(info_modalite,temp['@code'], temp['Libelle']),
89+
liste_code <- data.frame(cbind(info_modalite,as.data.frame(temp)$code),
12590
stringsAsFactors = FALSE)
12691
}
12792

128-
colnames(liste_code) <- c("variable", "lib_varible", "modalite", "lib_modalite")
93+
colnames(liste_code) <- c("variable", "lib_variable", "modalite")
12994
}
13095

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

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

144109
donnees <- as.data.frame(donnees)
145110

146111
} else {
147112
if (dim(as.data.frame(cellule))[1]>1){
148113
donnees <- do.call("cbind",cellule)
149-
donnees <- data.frame(donnees[,'Zone.@codgeo'], donnees[,'Zone.@nivgeo'],
150-
donnees[,'Mesure.@code'], donnees[,'Mesure.$'],
151-
donnees[,'Modalite.@code'], donnees[,'Valeur'], stringsAsFactors = FALSE)
152-
colnames(donnees) <- c("codgeo", "nivgeo", "mesure", "lib_mesure", var[[2]][2], "valeur")
114+
donnees <- data.frame(donnees[,'Zone.codgeo'], donnees[,'Zone.nivgeo'],
115+
donnees[,'Modalite.code'], donnees[,'Valeur'], stringsAsFactors = FALSE)
116+
colnames(donnees) <- c("codgeo", "nivgeo", var[[2]][2], "valeur")
153117
} else {
154118
var <- as.character(cellule[,'Modalite..variable'])
155119
donnees <- data.frame(cellule['Zone..codgeo'], cellule[,'Zone..nivgeo'],
156-
cellule[,'Mesure..code'], cellule[,'Mesure..'],
157120
cellule[,'Modalite..code'], cellule[,'Valeur'], stringsAsFactors = FALSE)
158-
colnames(donnees) <- c("codgeo", "nivgeo", "mesure", "lib_mesure", var, "valeur")
121+
colnames(donnees) <- c("codgeo", "nivgeo", var, "valeur")
159122
}
160123
}
161124

README.md

Lines changed: 5 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,7 @@
1-
<!-- README.md is generated from README.Rmd. Please edit that file -->
2-
31
# inseeLocalData
42

5-
<!-- badges: start -->
6-
7-
[![R-CMD-check](https://github.com/InseeFrLab/inseeLocalData/workflows/R-CMD-check/badge.svg)](https://github.com/InseeFrLab/inseeLocalData/actions)
8-
[![Lifecycle: experimental](https://img.shields.io/badge/lifecycle-experimental-orange.svg)](https://www.tidyverse.org/lifecycle/#experimental)
9-
[![CRAN status](https://www.r-pkg.org/badges/version/inseeLocalData)](https://cran.r-project.org/package=inseeLocalData)
10-
<!-- badges: end -->
11-
123
L’[API ‘Données
13-
locales’](https://api.insee.fr/catalogue/site/themes/wso2/subthemes/insee/pages/item-info.jag?name=DonneesLocales&version=V0.1&provider=insee)
4+
locales’](https://portail-api.insee.fr/catalog/api/3d577cf9-d081-4054-977c-f9d081b054b2?aq=ALL)
145
permet d’accéder aux données localisées à la commune, diffusées sur
156
insee.fr dans la rubrique ‘chiffres détaillés’, sous forme de cubes
167
prédéfinis.
@@ -48,22 +39,6 @@ remotes::install_github("inseefrlab/inseeLocalData")
4839
```
4940

5041
## Utilisation
51-
52-
Dans les différents exemples, il est nécessaire d’avoir généré
53-
préalablement un jeton sur le catalogue des API. Ensuite plusieurs
54-
possibilités s’offrent à vous :
55-
56-
- Remplacer jeton par la valeur du jeton généré sur le catalogue des
57-
API ;
58-
- Générer une fenêtre dans laquelle vous pouvez renseigner le jeton
59-
généré sur le catalogue des API (.rs.askForPassword(“jeton:”) ;
60-
- Modifier le fichier .Renviron en ajoutant une ligne jeton = “la
61-
valeur du jeton genere sur le catalogue des API”. Pour accéder
62-
facilement au fichier .Renviron, vous pouvez utiliser la commande
63-
usethis::edit\_r\_environ(“user”). Il est nécessaire de redémarer R
64-
après avoir fait la modification. Attention, ce paramètre doit être
65-
mis a jour à chaque fois qu’un nouveau jeton est généré.
66-
6742
### Exemple d’utilisation simple :
6843

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

81-
donneesAPI <- get_dataset(jeton, jeu_donnees, croisement, modalite, nivgeo, codgeo)
56+
donneesAPI <- get_dataset(jeu_donnees, croisement, modalite, nivgeo, codgeo)
8257

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

10277
sortie <- mapply(get_dataset,
103-
jeton, jeu_donnees, croisement,
78+
jeu_donnees, croisement,
10479
modalite, liste_code$nivgeo, liste_code$codgeo,USE.NAMES = TRUE)
10580

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

127102
``` r
128103
fichier <- 'mon fichier'
129104
sortie <- mapply(get_dataset,
130-
jeton, fichier$jeu_donnees, fichier$croisement,
105+
fichier$jeu_donnees, fichier$croisement,
131106
fichier$modalite, fichier$nivgeo, fichier$codgeo,2,USE.NAMES = TRUE)
132107

133108
# pour le 1er croisement renseigné dans le fichier en entrée

man/get_dataset.Rd

Lines changed: 1 addition & 34 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)