Tras leer el otro día Visualizando la matriz de acuerdo legislativo, pensé que esta bitácora no podía quedarse atrás. Casi desisto. Pero cerrando ya casi el navegador vi que en la página de las votaciones del Congreso de los Diputados había dos enlaces aprovechables: en uno ponía XML y en el otro, “histórico”.
He aquí pues el código concomitante que fue apareciendo en mi sesión de RStudio:
library(XML)
library(reshape)
library(corrgram)
library(psych)
# descarga y manipulación de datos
dia.votacion <- function( n.votacion ){
dir.create("tmp")
url <- paste( "http://www.congreso.es/votaciones/OpenData?sesion=",
n.votacion, "&completa=1&legislatura=10", sep = "" )
download.file(url, destfile = "./tmp/votos.zip")
try(unzip("./tmp/votos.zip", exdir = "./tmp"), TRUE)
ficheros <- dir("./tmp", pattern = ".*xml", full.names = T )
if ( length(ficheros ) == 0)
return(NULL)
res <- sapply(ficheros, function(fichero){
datos <- xmlTreeParse(fichero)
datos <- xmlToList(datos)$Votaciones
if( is.null(datos) )
return(NULL)
datos <- as.data.frame(t(datos))
datos <- as.data.frame(lapply( datos, unlist))
},
simplify = F
)
unlink( "./tmp", recursive = T) # borra el directorio temporal
res
}
res <- list()
for ( i in 1:54 ) res <- c( res, dia.votacion(i) )
# la 32, 33 está trucha
for ( i in 34:54 ) res <- c( res, dia.votacion(i) )
Con él se pueden bajar unas docenas de ficheros XML correspondientes a ciertos plenos de la X Legislatura, procesarlos mínimamente y guardarlos en la lista res
. No estoy seguro de la profundidad histórica de los datos (aparentemente, sólo están disponibles los del 2012, aunque la X Legislatura arrancó, creo, antes). Además, falla la descarga de los ficheros correspondientes a las sesiones 32 y 33. Ese es el motivo por el que he tenido que recurrir a for
, como los gañanes, en lugar de utiliza sapply
, como era mi natural inclinación.