R中的BLS API仅返回31

时间:2014-09-08 15:02:02

标签: r api

我开始使用BLS的API来检索R中的一些失业数据。但是,由于我对API没有经验,我无法检索超过31的列表(从2014年7月到2012年1月)有1978年的数据(虽然我在这里读到:http://www.datascienceriot.com/?p=53只有最多10年是可能的,即使这样我似乎无法得到)。

有人可以帮帮我吗?包括以下代码。提前谢谢。

罗伯特

bls.content <- getURLContent("http://api.bls.gov/publicAPI/v1/timeseries/data/LASST010000000000003")
bls.json <- fromJSON(bls.content, simplify=TRUE)
tmp <-bls.json$Results[[1]][[1]]
bls.df <- data.frame(year=sapply(tmp$data,"[[","year"),
                 period=sapply(tmp$data,"[[","period"),
                 periodName=sapply(tmp$data,"[[","periodName"),
                 value=as.numeric(sapply(tmp$data,"[[","value")), 
                 stringsAsFactors=FALSE)

1 个答案:

答案 0 :(得分:0)

(这不是一个有效的答案,但它应该让你走上正轨或可能让其他人告诉httr POST电话有什么问题)

使用httr库,你应该能够翻译:这个curl命令行:

curl -v -i -X POST -H 'Content-Type: application/json' \
     -d '{ "seriesid":["LASST010000000000003"], "startyear":"2004", "endyear":"2014" }' \
     http://api.bls.gov/publicAPI/v1/timeseries/data/

(来自this doc

成:

POST("http://api.bls.gov/publicAPI/v1/timeseries/data/", 
      content_type_json(),
      body=sprintf('{ "seriesid":"%s", "startyear":"%s", "endyear":"%s" }', "LEU0254555900", 2005, 2012),
      verbose())

与命令行(获取所有数据)不同,httr POST给出:

-> POST /publicAPI/v1/timeseries/data/ HTTP/1.1
-> User-Agent: curl/7.30.0 Rcurl/1.95.4.3 httr/0.5
-> Host: api.bls.gov
-> Accept-Encoding: gzip
-> Cookie: JSESSIONID=FD2EAE55DE9288D89B54B00030E8B68C.tc_instance8
-> accept: application/json, text/xml, */*
-> Content-Length: 68
-> 
>> { "seriesid":"LEU0254555900", "startyear":"2005", "endyear":"2012" }

<- HTTP/1.1 415 Unsupported Media Type
<- Date: Mon, 08 Sep 2014 15:48:27 GMT
<- Content-Type: text/html;charset=utf-8
<- Content-Length: 1047

但是,它们应该几乎相同(我也使用了各种accept()标题更改。)

body=POST的列表格式不起作用,因为JSON不符合BLS API期望的格式(AFAICanTell)。