Json 国际货币基金组织数据下载错误

Json 国际货币基金组织数据下载错误,json,r,utf-8,Json,R,Utf 8,我正面临着臭虫,这让我非常紧张。 所以,从头开始:我编写了一个代码,从IMF DOT(国家出口和进口数据)下载数据。 有时这段代码可以工作(下载所有数据)。在某时另一次,在下载过程中,我发现错误: No encoding supplied: defaulting to UTF-8. Error: lexical error: invalid char in json text. <!DOCTYPE HTML PU

我正面临着臭虫,这让我非常紧张。 所以,从头开始:我编写了一个代码,从IMF DOT(国家出口和进口数据)下载数据。 有时这段代码可以工作(下载所有数据)。在某时另一次,在下载过程中,我发现错误:

No encoding supplied: defaulting to UTF-8.
Error: lexical error: invalid char in json text.
                                       <!DOCTYPE HTML PUBLIC "-//W3C//
                     (right here) ------^
未提供编码:默认为UTF-8。
错误:词法错误:json文本中的字符无效。
Code: 

   rm(list = ls())
#Code downloads data from DOT (IMF). 
#DOT(date).csv

# Libraries
suppressPackageStartupMessages(library(plyr))
suppressPackageStartupMessages(library(dplyr))
suppressPackageStartupMessages(library(tidyr))
suppressPackageStartupMessages(library(reshape2))
suppressPackageStartupMessages(library(stringr))
suppressPackageStartupMessages(library(IMFData))
suppressPackageStartupMessages(library(TTR))
suppressPackageStartupMessages(library(readxl))

#Parameters of download -------------------------------------------------------

databaseID <- 'DOT'
startdate <- '1977-01-01'
enddate <- format(Sys.Date(),"%Y-%m-%d")
checkquery = FALSE

  # Frequency
download.freq <- c("A")

  # Area
available.codes <- DataStructureMethod('DOT')
cn <- available.codes$CL_AREA_DOT


# Download data -----------------------------------------------------------

print("Downloading")
datalist <- list(); queryfilter<- list()
for(i in 1:length(cn[,"CodeValue"])) queryfilter[[i]] <- list(CL_FREA=download.freq, CL_AREA_DOT=cn[,"CodeValue"][i],  CL_INDICATOR_DOT = "TXG_FOB_USD"
)

datalist<- plyr::llply(queryfilter, function(x) {
  Sys.sleep(runif(1,2,5))
  Dot.downloader(databaseID,x, startdate, enddate) 
}, .progress = "text")

#WHERE ERRORS HAPPENS

data <- do.call(rbind.data.frame, datalist) #..............................................................................................................................................................................................................................................
    Dot.downloader <- function(databaseID, queryfilter=NULL,
                           startdate='1977-01-01', enddate='2016-12-31'){

  queryfilterstr <- ''
  if (length(queryfilter) > 0){
    queryfilterstr <- paste0(
      unlist(plyr::llply(queryfilter,
                         function(x)(paste0(x, collapse="+")))), collapse=".")
  }

  APIstr <- paste0('http://dataservices.imf.org/REST/SDMX_JSON.svc/CompactData/',
                   databaseID,'/',queryfilterstr,
                   '?startPeriod=',startdate,'&endPeriod=',enddate)
  r <- httr::GET(APIstr)

  if(httr::http_status(r)$reason != "OK"){
    stop(paste(unlist(httr::http_status(r))))
    return(list())
  }
  r.parsed <- jsonlite::fromJSON(httr::content(r, "text"))

  if(is.null(r.parsed$CompactData$DataSet$Series)){
    warning("No data available")
    return(NULL)
  }

  if(class(r.parsed$CompactData$DataSet$Series) == "data.frame"){
    r.parsed$CompactData$DataSet$Series <- r.parsed$CompactData$DataSet$Series[!plyr::laply(r.parsed$CompactData$DataSet$Series$Obs, is.null),]
    if(nrow(r.parsed$CompactData$DataSet$Series) ==0){
      warning("No data available")
      return(NULL)
    }
  }

  if(class(r.parsed$CompactData$DataSet$Series) == "list"){
    if(is.null(r.parsed$CompactData$DataSet$Series$Obs)){
      warning("No data available")
      return(NULL)
    }
    ret.df <- as.data.frame(r.parsed$CompactData$DataSet$Series[1:(length(r.parsed$CompactData$DataSet$Series)-1)])
    ret.df$Obs <- list(r.parsed$CompactData$DataSet$Series$Obs)
    names(ret.df) <- names(r.parsed$CompactData$DataSet$Series)
    r.parsed$CompactData$DataSet$Series <- ret.df
  }

  return(r.parsed$CompactData$DataSet$Series)
}