if(!require(datamart)) install.packages("datamart")
allensbach <- function(resource="sonntagsfrage") urldata3(
resource=resource,
template="http://www.ifd-allensbach.de/studien-und-berichte/sonntagsfrage/gesamt.html",
extract.fct=htmlParse,
transform.fct=function(x) {
nodes <- try(getNodeSet(x, '//tr[@class="odd" or @class="even"]'), silent=TRUE)
if(inherits(nodes, "try-error")) return(data.frame())
if(length(nodes)==0) return(data.frame())
dat <- as.data.frame(t(sapply(nodes, function(n) c(
timestamp=xmlValue(n[[1]]),
afd=xmlValue(n[[3]]),
cducsu=xmlValue(n[[4]]),
spd=xmlValue(n[[5]]),
fdp=xmlValue(n[[6]]),
gruene=xmlValue(n[[7]]),
linke=xmlValue(n[[8]]),
piraten=xmlValue(n[[9]]),
sonstige=xmlValue(n[[10]])
))), stringsAsFactors=FALSE)
parse_number <- function(x) {
idx <- x=="--"
x[!idx] <- gsub(",", ".", x[!idx], fixed=TRUE)
x[idx] <- NA
return(as.numeric(x))
}
dat <- transform(dat,
timestamp=strptime(strtail(timestamp, 10), "%d.%m.%Y"),
afd=parse_number(afd),
cducsu=parse_number(cducsu),
spd=parse_number(spd),
fdp=parse_number(fdp),
gruene=parse_number(gruene),
linke=parse_number(linke),
piraten=parse_number(piraten),
sonstige=parse_number(sonstige)
)
return(dat)
}
)
query(allensbach(), resource="sonntagsfrage")