rstatscn问题-服务器响应错误(JSON vs HTML)

yfjy0ee7  于 2023-04-18  发布在  其他
关注(0)|答案(1)|浏览(123)

我以前用过这个包,但是在R更新之后,我不得不重新安装它,现在我不能让它正常运行。
第一个问题与自签名证书有关,我用以下方法规避了它:
httr::set_config(httr::config(ssl_verifypeer = 0L))
但是,我仍然不能运行基本的功能。例如,

> rstatscn::statscnQueryZb(zbid = "zb", dbcode = "hgnd")
Error: lexical error: invalid char in json text.
                                       <!doctype html>  <html>  <head>
                     (right here) ------^
> rstatscn::statscnQueryData('A01',dbcode='hgyd')
Error in dataJson2df(ret, curQuery$rowcode, curQuery$colcode) : 
  Bad response from the statscn server

第一个错误表明,问题是,该软件包是从实际的网页报废。它应该是一个JSON文件,它的HTML。这是解释在“https://stackoverflow.com/questions/41000112/reading-a-json-file-in-r-lexical-error-invalid-char-in-json-text”。仍然,我不知道如何修正这一点。

wfsdck30

wfsdck301#

rstatscn通过web表单(https://data.stats.gov.cn/english/easyquery.htm)请求数据,这可能已经改变了,重写这些函数以使用GET而不是POST方法并接受无效证书(!!)似乎可以工作(显然查询返回如下内容:“* 对不起,找不到与查询条件匹配的信息 *”,即使将hgyd替换为hgnd,因此网站和查询表单可能发生了一些重大变化):

library(httr2)

statscnQueryZb <- function(zbid = "zb", dbcode = "hgnd"){ 
  request("https://data.stats.gov.cn/english/easyquery.htm") |>
    req_url_query(id = zbid, dbcode = dbcode, wdcode = "zb", m = "getTree") |>
    req_options(ssl_verifypeer = 0L) |>
    req_perform() |>
    resp_body_json(check_type = FALSE, simplifyVector = TRUE) |>
    tibble::as_tibble()
}

statscnQueryData <- function(zb = "A0201", dbcode = "hgnd", rowcode = "zb", colcode = "sj", moreWd = list(name = NA, value = NA)){ 
  request("https://data.stats.gov.cn/easyquery.htm") |>
    req_url_query(m = "QueryData", dbcode = dbcode, rowcode = rowcode, 
                  colcode = colcode, wds = rstatscn:::genDfwds(moreWd$name, moreWd$value), 
                  dfwds = rstatscn:::genDfwds("zb", zb), k1 = paste0(format(Sys.time(), "%s"), "000")) |>
    req_options(ssl_verifypeer = 0L) |>
    req_perform() |>
    resp_body_json(check_type = FALSE, simplifyVector = TRUE) |>
    tibble::as_tibble()
}

statscnQueryZb(zbid = "zb", dbcode = "hgnd")
#> # A tibble: 28 × 6
#>    dbcode id    isParent name                                       pid   wdcode
#>    <chr>  <chr> <lgl>    <chr>                                      <chr> <chr> 
#>  1 hgnd   A01   TRUE     General Survey                             ""    zb    
#>  2 hgnd   A02   TRUE     National Accounts                          ""    zb    
#>  3 hgnd   A03   TRUE     Population                                 ""    zb    
#>  4 hgnd   A04   TRUE     Employment and Wages                       ""    zb    
#>  5 hgnd   A05   TRUE     Investment in Fixed Assets and Real Estat… ""    zb    
#>  6 hgnd   A06   TRUE     Foreign Trade and Economic Cooperation     ""    zb    
#>  7 hgnd   A07   TRUE     Energy                                     ""    zb    
#>  8 hgnd   A08   TRUE     Finance                                    ""    zb    
#>  9 hgnd   A09   TRUE     Price Index                                ""    zb    
#> 10 hgnd   A0A   TRUE     People's Living Conditions                 ""    zb    
#> # ℹ 18 more rows

statscnQueryData('A01',dbcode='hgyd')
#> # A tibble: 1 × 2
#>   returncode returndata                          
#>        <int> <chr>                               
#> 1        501 对不起,未能找到符合查询条件的信息。

创建于2023-04-06带有reprex v2.0.2

相关问题