Skip to content

Commit

Permalink
Changes download.file function to httr::GET()
Browse files Browse the repository at this point in the history
  • Loading branch information
hmeleiro committed May 28, 2024
1 parent 805d497 commit 04c9e93
Show file tree
Hide file tree
Showing 23 changed files with 185 additions and 182 deletions.
2 changes: 2 additions & 0 deletions NAMESPACE
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,8 @@ importFrom(dplyr,mutate)
importFrom(dplyr,mutate_if)
importFrom(dplyr,relocate)
importFrom(dplyr,select)
importFrom(httr,GET)
importFrom(httr,add_headers)
importFrom(stringr,str_remove_all)
importFrom(stringr,str_trim)
importFrom(utils,download.file)
Expand Down
1 change: 0 additions & 1 deletion R/candidatos.R
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,6 @@
#' @export
#'
candidatos <- function(tipo_eleccion, anno, mes, nivel) {

### Construyo la url al zip de la elecciones
if (tipo_eleccion == "municipales") {
tipo <- "04"
Expand Down
29 changes: 15 additions & 14 deletions R/candidatos_nosenado.R
Original file line number Diff line number Diff line change
Expand Up @@ -20,38 +20,39 @@
#' @keywords internal
#'
candidatos_nosenado <- function(tipo, anno, mes) {

urlbase <- "https://infoelectoral.interior.gob.es/estaticos/docxl/apliextr/"
url <- paste0(urlbase, tipo, anno, mes, "_MUNI", ".zip")
### Descargo el fichero zip en un directorio temporal y lo descomprimo
tempd <- tempdir(check = FALSE)
tempd <- tempdir(check = TRUE)
temp <- tempfile(tmpdir = tempd, fileext = ".zip")
download.file(url, temp, mode = "wb")
download_bin(url, temp)
unzip(temp, overwrite = TRUE, exdir = tempd)

### Construyo las rutas a los ficheros DAT necesarios
codigo_eleccion <- paste0(substr(anno, nchar(anno)-1, nchar(anno)), mes)
codigo_eleccion <- paste0(substr(anno, nchar(anno) - 1, nchar(anno)), mes)
todos <- list.files(tempd, recursive = TRUE)
x <- todos[grepl(paste0("04", tipo, codigo_eleccion, ".DAT"), todos)]
xbasicos <- todos[grepl(paste0("05", tipo, codigo_eleccion, ".DAT"), todos)]
xcandidaturas <- todos[grepl(paste0("03", tipo, codigo_eleccion, ".DAT"), todos)]


### Leo los ficheros DAT necesarios
dfcandidaturas <- read03(xcandidaturas, tempd)
dfcandidatos <- read04(x, tempd)
dfcandidatos$codigo_distrito[dfcandidatos$codigo_distrito == "9"] <- "99"
colnames(dfcandidatos)[colnames(dfcandidatos) == "codigo_senador"] <- "codigo_municipio"
dfbasicos <- read05(xbasicos, tempd)
dfbasicos <- dfbasicos[dfbasicos$codigo_distrito == "99",]

### Limpio el directorio temporal (IMPORTANTE: Si no lo hace, puede haber problemas al descargar más de una elección)
borrar <- list.files(tempd, full.names = TRUE, recursive = TRUE)
try(file.remove(borrar), silent = TRUE)
dfbasicos <- dfbasicos[dfbasicos$codigo_distrito == "99", ]

### Junto los datos de los tres ficheros
df <- full_join(dfbasicos, dfcandidatos, by = c("tipo_eleccion", "vuelta", "anno", "mes", "codigo_provincia", "codigo_municipio", "codigo_distrito"))
df <- left_join(df, dfcandidaturas, by = c("tipo_eleccion", "anno", "mes", "codigo_partido"))
df <- full_join(dfbasicos, dfcandidatos,
by = c(
"tipo_eleccion", "vuelta", "anno", "mes",
"codigo_provincia", "codigo_municipio", "codigo_distrito"
)
)
df <- left_join(df, dfcandidaturas,
by = c("tipo_eleccion", "anno", "mes", "codigo_partido")
)

### Limpieza: Quito los espacios en blanco a los lados de estas variables
df$siglas <- str_trim(df$siglas)
Expand All @@ -75,7 +76,7 @@ candidatos_nosenado <- function(tipo, anno, mes) {
"apellido_2",
"sexo",
"nacimiento",
"dni" ,
"dni",
"electo",
"codigo_partido_nacional",
"codigo_partido_autonomia",
Expand All @@ -86,7 +87,7 @@ candidatos_nosenado <- function(tipo, anno, mes) {
) %>%
arrange("codigo_provincia", "siglas", "orden_candidato")

df <- df[!is.na(df$orden_candidato),]
df <- df[!is.na(df$orden_candidato), ]

df$nacimiento <- NA
df$dni <- NA
Expand Down
4 changes: 2 additions & 2 deletions R/candidatos_senado.R
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,9 @@
#' @keywords internal
#'
candidatos_senado <- function(anno, mes, nivel) {
if(nivel == "mesa") {
if (nivel == "mesa") {
df <- senado_mesas(anno, mes)
} else if(nivel == "municipio") {
} else if (nivel == "municipio") {
df <- senado_municipios(anno, mes)
} else {
stop('The argumento nivel must take one of the following values: "mesa", "municipio".')
Expand Down
2 changes: 1 addition & 1 deletion R/data.R
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@

#' Administrative codes for spanish municipalities.
#'
#'This dataset contains the INE codes of the municipalities of Spain with their most recent names (eg: Cabrera d'Igualada appears as Cabrera d'Anoia). For the municipalities that have been merged at some point, their codes are kept separately along with that of the new municipality created (eg: it contains the municipality Oza-Cesuras but also that of Cesuras and Oza dos Ríos separately).
#' This dataset contains the INE codes of the municipalities of Spain with their most recent names (eg: Cabrera d'Igualada appears as Cabrera d'Anoia). For the municipalities that have been merged at some point, their codes are kept separately along with that of the new municipality created (eg: it contains the municipality Oza-Cesuras but also that of Cesuras and Oza dos Ríos separately).
#'
#' @format A dataset with more than 8.000 rows and 3 columns:
#' \describe{
Expand Down
3 changes: 0 additions & 3 deletions R/examples/candidatos.R
Original file line number Diff line number Diff line change
@@ -1,6 +1,3 @@
ua <- "Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko)"
options(HTTPUserAgent = ua)

data <- candidatos(
tipo_eleccion = "senado", anno = "2004",
mes = "03", nivel = "municipio"
Expand Down
3 changes: 0 additions & 3 deletions R/examples/municipios.R
Original file line number Diff line number Diff line change
@@ -1,6 +1,3 @@
ua <- "Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko)"
options(HTTPUserAgent = ua)

data <- municipios(tipo_eleccion = "congreso", anno = "2019", mes = "11")
str(data)

3 changes: 0 additions & 3 deletions R/examples/provincias.R
Original file line number Diff line number Diff line change
@@ -1,5 +1,2 @@
ua <- "Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko)"
options(HTTPUserAgent = ua)

data <- provincias(tipo_eleccion = "congreso", anno = "1982", mes = "10")
str(data)
51 changes: 24 additions & 27 deletions R/mesas.R
Original file line number Diff line number Diff line change
Expand Up @@ -21,28 +21,19 @@
#' @export
mesas <- function(tipo_eleccion, anno, mes) {
### Construyo la url al zip de la elecciones
if (tipo_eleccion == "municipales") {
tipo <- "04"
} else if (tipo_eleccion == "congreso") {
tipo <- "02"
} else if (tipo_eleccion == "europeas") {
tipo <- "07"
} else if (tipo_eleccion == "cabildos") {
tipo <- "06"
} else {
stop('The argument tipo_eleccion must take one of the following values: "congreso", "municipales", "europeas"')
}
urlbase <- "https://infoelectoral.interior.gob.es/estaticos/docxl/apliextr/"
url <- paste0(urlbase, tipo, anno, mes, "_MESA", ".zip")
tipo <- election_type_code(tipo_eleccion)
url <- generate_url(tipo, anno, mes, "MESA")

### Descargo el fichero zip en un directorio temporal y lo descomprimo
tempd <- tempdir(check = FALSE)
temp <- tempfile(tmpdir = tempd, fileext = ".zip")
download.file(url, temp, mode = "wb")
tempd <- tempdir(check = TRUE)
filename <- gsub(".+/", "", url)
temp <- file.path(tempd, filename, fsep = "\\")
tempd <- paste0(tempd, "\\", gsub(".zip", "", filename))
download_bin(url, temp)
unzip(temp, overwrite = TRUE, exdir = tempd)

### Construyo las rutas a los ficheros DAT necesarios
codigo_eleccion <- paste0(substr(anno, nchar(anno)-1, nchar(anno)), mes)
codigo_eleccion <- paste0(substr(anno, nchar(anno) - 1, nchar(anno)), mes)
todos <- list.files(tempd, recursive = TRUE)
x <- todos[grepl(paste0("10", tipo, codigo_eleccion, ".DAT"), todos)]
xbasicos <- todos[grepl(paste0("09", tipo, codigo_eleccion, ".DAT"), todos)]
Expand All @@ -53,14 +44,17 @@ mesas <- function(tipo_eleccion, anno, mes) {
dfcandidaturas <- read03(xcandidaturas, tempd)
dfmesas <- read10(x, tempd)

### Limpio el directorio temporal (IMPORTANTE: Si no lo hace, puede haber problemas al descargar más de una elección)
borrar <- list.files(tempd, full.names = TRUE, recursive = TRUE)
try(file.remove(borrar), silent = TRUE)


### Junto los datos de los tres ficheros
df <- full_join(dfbasicos, dfmesas, by = c("tipo_eleccion", "anno", "mes", "vuelta", "codigo_ccaa", "codigo_provincia", "codigo_municipio", "codigo_distrito", "codigo_seccion", "codigo_mesa"))
df <- left_join(df, dfcandidaturas, by = c("tipo_eleccion", "anno", "mes", "codigo_partido"))
df <- full_join(dfbasicos, dfmesas,
by = c(
"tipo_eleccion", "anno", "mes", "vuelta",
"codigo_ccaa", "codigo_provincia", "codigo_municipio", "codigo_distrito",
"codigo_seccion", "codigo_mesa"
)
)
df <- left_join(df, dfcandidaturas,
by = c("tipo_eleccion", "anno", "mes", "codigo_partido")
)

### Limpieza: Quito los espacios en blanco a los lados de estas variables
df$codigo_seccion <- str_trim(df$codigo_seccion)
Expand All @@ -70,7 +64,9 @@ mesas <- function(tipo_eleccion, anno, mes) {

# Inserto el nombre del municipio más reciente y reordeno algunas variables
codigos_municipios <- infoelectoral::codigos_municipios
df <- left_join(df, codigos_municipios, by = c("codigo_provincia", "codigo_municipio")) %>%
df <- left_join(df, codigos_municipios,
by = c("codigo_provincia", "codigo_municipio")
) %>%
relocate(
"codigo_ccaa",
"codigo_provincia",
Expand All @@ -79,15 +75,16 @@ mesas <- function(tipo_eleccion, anno, mes) {
"codigo_distrito",
"codigo_seccion",
"codigo_mesa",
.after = "vuelta") %>%
.after = "vuelta"
) %>%
relocate(
"codigo_partido_autonomia",
"codigo_partido_provincia",
"codigo_partido",
"denominacion",
"siglas",
"votos",
"datos_oficiales" ,
"datos_oficiales",
.after = "codigo_partido_nacional"
) %>%
arrange(
Expand Down
53 changes: 22 additions & 31 deletions R/muni.R
Original file line number Diff line number Diff line change
Expand Up @@ -21,32 +21,21 @@
#' @export
#'
municipios <- function(tipo_eleccion, anno, mes, distritos = FALSE) {

### Construyo la url al zip de la elecciones
if (tipo_eleccion == "municipales") {
tipo <- "04"
} else if (tipo_eleccion == "congreso") {
tipo <- "02"
} else if (tipo_eleccion == "europeas") {
tipo <- "07"
} else if (tipo_eleccion == "cabildos") {
tipo <- "06"
} else {
stop('The argument tipo_eleccion must take one of the following values: "congreso", "municipales", "europeas"')
}

urlbase <- "https://infoelectoral.interior.gob.es/estaticos/docxl/apliextr/"
url <- paste0(urlbase, tipo, anno, mes, "_MUNI", ".zip")
tipo <- election_type_code(tipo_eleccion)
url <- generate_url(tipo, anno, mes, "MUNI")

### Descargo el fichero zip en un directorio temporal y lo descomprimo
tempd <- tempdir()
temp <- tempfile(tmpdir = tempd, fileext = ".zip")
download.file(url, temp, mode = "wb")
tempd <- tempdir(check = TRUE)
filename <- gsub(".+/", "", url)
temp <- file.path(tempd, filename, fsep = "\\")
tempd <- paste0(tempd, "\\", gsub(".zip", "", filename))
download_bin(url, temp)

unzip(temp, overwrite = TRUE, exdir = tempd)

### Construyo las rutas a los ficheros DAT necesarios
codigo_eleccion <- paste0(substr(anno, nchar(anno)-1, nchar(anno)), mes)
codigo_eleccion <- paste0(substr(anno, nchar(anno) - 1, nchar(anno)), mes)
todos <- list.files(tempd, recursive = TRUE)
x <- todos[grepl(paste0("06", tipo, codigo_eleccion, ".DAT"), todos)]
xbasicos <- todos[grepl(paste0("05", tipo, codigo_eleccion, ".DAT"), todos)]
Expand All @@ -58,7 +47,7 @@ municipios <- function(tipo_eleccion, anno, mes, distritos = FALSE) {
dfmunicipios <- read06(x, tempd)

### If municipal elections, need to read additional files for small municipalities
if(tipo == "04"){
if (tipo == "04") {
# Files for small municipalities
xbasicos_small <- todos[grepl(paste0("11", tipo, codigo_eleccion, ".DAT"), todos)]
xmunicipios_small <- todos[grepl(paste0("12", tipo, codigo_eleccion, ".DAT"), todos)]
Expand All @@ -72,17 +61,17 @@ municipios <- function(tipo_eleccion, anno, mes, distritos = FALSE) {
dfmunicipios <- bind_rows(dfmunicipios, dfmunicipios_small)
}

### Limpio el directorio temporal (IMPORTANTE: Si no lo hace, puede haber problemas al descargar más de una elección)
borrar <- list.files(tempd, full.names = TRUE, recursive = TRUE)
try(file.remove(borrar), silent = TRUE)

### Junto los datos de los tres ficheros
df <- full_join(dfbasicos, dfmunicipios,
by = c("tipo_eleccion", "vuelta", "anno", "mes",
"codigo_provincia", "codigo_municipio",
"codigo_distrito"))
by = c(
"tipo_eleccion", "vuelta", "anno", "mes",
"codigo_provincia", "codigo_municipio",
"codigo_distrito"
)
)
df <- left_join(df, dfcandidaturas,
by = c("tipo_eleccion", "anno", "mes", "codigo_partido"))
by = c("tipo_eleccion", "anno", "mes", "codigo_partido")
)

### Limpieza: Quito los espacios en blanco a los lados de estas variables
df$siglas <- str_trim(df$siglas)
Expand All @@ -92,7 +81,8 @@ municipios <- function(tipo_eleccion, anno, mes, distritos = FALSE) {
# Inserto el nombre del municipio más reciente y reordeno algunas variables
codigos_municipios <- infoelectoral::codigos_municipios
df <- left_join(df, codigos_municipios,
by = c("codigo_provincia", "codigo_municipio")) %>%
by = c("codigo_provincia", "codigo_municipio")
) %>%
relocate(
"codigo_ccaa",
"codigo_provincia",
Expand All @@ -103,7 +93,8 @@ municipios <- function(tipo_eleccion, anno, mes, distritos = FALSE) {
"codigo_partido_judicial",
"codigo_diputacion",
"codigo_comarca",
.after = "vuelta") %>%
.after = "vuelta"
) %>%
relocate(
"codigo_partido_autonomia",
"codigo_partido_provincia",
Expand All @@ -118,7 +109,7 @@ municipios <- function(tipo_eleccion, anno, mes, distritos = FALSE) {

### Si no se quieren los distritos se eliminan de los datos
if (distritos == FALSE) {
df <- unique(df[df$codigo_distrito == 99,])
df <- unique(df[df$codigo_distrito == 99, ])
}

return(df)
Expand Down
44 changes: 17 additions & 27 deletions R/provincias.R
Original file line number Diff line number Diff line change
Expand Up @@ -21,30 +21,20 @@
#' @export
provincias <- function(tipo_eleccion, anno, mes) {
### Construyo la url al zip de la elecciones
if (tipo_eleccion == "municipales") {
tipo <- "04"
} else if (tipo_eleccion == "congreso") {
tipo <- "02"
} else if (tipo_eleccion == "europeas") {
tipo <- "07"
} else if (tipo_eleccion == "cabildos") {
tipo <- "06"
} else {
stop('The argument tipo_eleccion must take one of the following values: "congreso", "municipales", "europeas"')
}

urlbase <- "https://infoelectoral.interior.gob.es/estaticos/docxl/apliextr/"
url <- paste0(urlbase, tipo, anno, mes, "_TOTA", ".zip")
tipo <- election_type_code(tipo_eleccion)
url <- generate_url(tipo, anno, mes, "TOTA")

### Descargo el fichero zip en un directorio temporal y lo descomprimo
tempd <- tempdir()
temp <- tempfile(tmpdir = tempd, fileext = ".zip")
download.file(url, temp, mode = "wb")
tempd <- tempdir(check = TRUE)
filename <- gsub(".+/", "", url)
temp <- file.path(tempd, filename, fsep = "\\")
tempd <- paste0(tempd, "\\", gsub(".zip", "", filename))
download_bin(url, temp)
unzip(temp, overwrite = TRUE, exdir = tempd)


### Construyo las rutas a los ficheros DAT necesarios
codigo_eleccion <- paste0(substr(anno, nchar(anno)-1, nchar(anno)), mes)
codigo_eleccion <- paste0(substr(anno, nchar(anno) - 1, nchar(anno)), mes)
todos <- list.files(tempd, recursive = TRUE)
x <- todos[todos == paste0("03", tipo, codigo_eleccion, ".DAT")]
xbasicos <- todos[todos == paste0("07", tipo, codigo_eleccion, ".DAT")]
Expand All @@ -56,17 +46,16 @@ provincias <- function(tipo_eleccion, anno, mes) {
dfbasicos <- read07(xbasicos, tempd)
dfcandidaturas <- read08(xcandidaturas, tempd)


### Limpio el directorio temporal (IMPORTANTE: Si no lo hace, puede haber problemas al descargar más de una elección)
borrar <- list.files(tempd, full.names = TRUE, recursive = TRUE)
try(file.remove(borrar), silent = TRUE)

### Junto los datos de los tres ficheros
df <- full_join(dfcandidaturas_basicos, dfcandidaturas,
by = c("tipo_eleccion", "anno", "mes", "codigo_partido"))
by = c("tipo_eleccion", "anno", "mes", "codigo_partido")
)
df <- left_join(dfbasicos, df,
by = c("tipo_eleccion", "anno", "mes", "vuelta", "codigo_ccaa",
"codigo_provincia", "codigo_distrito_electoral"))
by = c(
"tipo_eleccion", "anno", "mes", "vuelta", "codigo_ccaa",
"codigo_provincia", "codigo_distrito_electoral"
)
)



Expand All @@ -83,7 +72,8 @@ provincias <- function(tipo_eleccion, anno, mes) {
"codigo_ccaa",
"codigo_provincia",
"codigo_distrito_electoral",
.after = "vuelta") %>%
.after = "vuelta"
) %>%
relocate(
"codigo_partido_autonomia",
"codigo_partido_provincia",
Expand Down
Loading

0 comments on commit 04c9e93

Please sign in to comment.