나는 StatBank 덴마크에서 데이터를 가져 오기 위해 몇 가지 기능을 사용하고 있으며, API입니다. 그들은 JSON 호출을 테스트하기 위해 console을 만들었고 dst_get_data 함수에서 JSON을 구문 분석하는 basic_request를 알고 있습니다. 콘솔에서 테스트 했으므로.R httr JSON의 POST가 상태 400을 반환합니다.
"상태 400"오류가 발생하고 "게시 할 때 개체를 제공해야합니다"라는 오류 메시지가 나타납니다.
아래 코드는 재현 가능한 예를 만들어야합니다. 그것은 내가 붙어있는 세 번째 함수 (dst_get_data)입니다.
dst_get_data <- function(request, table, ..., lang = "en",
format = "CSV", value_presentation = "Default") {
require(httr)
require(jsonlite)
dst_url <- "http://api.statbank.dk/v1/data"
final_request <- list("table" = table,
"lang" = lang,
"format" = format,
"valuePresentation" = value_presentation)
data <- POST(url=dst_url, body=final_request, multipart=FALSE)
return(data)
}
과에 그것을 호출 : 나는 dst_get_data
에 변경
dst_meta <- function(table, ..., lang = "en"){
require(jsonlite)
require(httr)
dkstat_url <- "http://api.statbank.dk/v1/tableinfo"
params <- list("lang" = lang,
"table" = table,
"format" = "JSON")
meta <- POST(url=dkstat_url, body=params, multipart=FALSE)
meta <- jsonlite::fromJSON(txt=content(meta, as="text"),simplifyDataFrame=TRUE)
#meta <- RJSONIO::fromJSON(content=content(meta),asText=TRUE, simplify=TRUE, simplifyWithNames=TRUE)
return(meta)
}
dst_meta_parse <- function(meta, lang){
basics_names <- c("id", "text", "description",
"unit", "updated", "footnote")
basics <- meta[names(meta) %in% basics_names]
variables <- meta[["variables"]][,c("id", "text")]
values <- meta[["variables"]][,"values"]
names(values) <- variables$id
if(lang == "en"){
test <- grepl(pattern="Tid", names(values))
if(sum(test) > 0){
values$Tid$id <- sub(pattern="Q", replacement="K", x=values$Tid$id)
}
}
## Create basic_request for the data_post file
basic_request <- vector(mode="list", length=length(variables$id))
for(variable in 1:length(variables$id)){
var_name <- variables$id[variable]
if(var_name == "Tid"){
basic_request[[variable]] <- list("code" = var_name,
"values" = as.character(values[[var_name]]$id[length(values[[var_name]]$id)]))
} else {
basic_request[[variable]] <- list("code" = var_name,
"values" = as.character(values[[var_name]]$id[1]))
}
}
return(list("basics" = basics, "variables" = variables, "values" = values, "basic_request" = basic_request))
}
dst_get_data <- function(request, table,..., lang = "en", format = "CSV", value_presentation = "Default"){
require(httr)
require(jsonlite)
dst_url <- "http://api.statbank.dk/v1/data"
final_request <- list("table" = table,
"lang" = lang,
"format" = format,
"valuePresentation" = value_presentation,
"variables" = request)
final_request <- jsonlite::toJSON(x=final_request, .escapeEscapes=TRUE, asIs=TRUE)
print(validate(final_request))
data <- POST(url=dst_url, body=final_request, multipart=FALSE)
return(data)
}
test <- dst_meta(table="folk1")
test2 <- dst_meta_parse(meta = test, lang = "en")
test3 <- dst_get_data(request = test2$basic_request, table = "folk1", format="JSON")
#test3 <- dst_get_data(request = test2$basic_request, table = "folk1", format="JSON")
이 코드를 패키지로 공개 할 계획이 있습니까? – Thomas
@ 토마스 예, 저는 그것에 대해 생각해 보았습니다. 하지만 어제부터 시작 했으므로 현재의 형식이 아닙니다. 내 첫 번째 패키지이기 때문에 처음에는 github을 사용했습니다. (단지 소개 자료 중 일부를 따라 잡기 만하면됩니다.) – KERO
차가움. 당신이 도움을 원한다면 알려주세요 (저는 Github에 계십니다). 나는 그런 패키지에 관심이있을 수 있다고 생각한다. – Thomas