从 httr 响应读取 'raw' xlsx 文件到数据帧
Reading 'raw' xlsx file from httr response into data frame
我正在使用 httr 包通过其 REST API 从我们的报告系统检索数据。我将内容指定为 xlsx。响应包含原始(二进制?)文件。
我的请求如下所示:
request = GET("http://server/.../documents/123456",
add_headers(.headers = c('Accept'= 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
'authtoken' = paste0('', logonToken,''))) ,
content_type("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"),
encode = 'raw'
)
content(request)
[1] 50 4b 03 04 0a 00 08 08 08 00 19 88 79 54 00 00 00 00 00 00 00
[44] 2f 73 68 65 65 74 31 2e 78 6d 6c a5 57 5b 6f 9b 30 14 7e 9f b4
[87] 00 23 43 2f db af 9f c1 94 d8 c6 58 93 92 87 54 f5 77 f1 39 fe
... etc
结果可以保存为 .xlsx 并在 Excel 中打开。但是,我想将这些数据直接读取到数据框中。有没有办法在同一脚本中将结果模拟为可读输入?
我可以传递一个额外的参数 write_disk
将响应直接保存为文件。需要指定路径。我尝试使用 tempfile()
进行测试以直接写入和读取响应,但无法使其正常工作。
有什么方法可以从 R 环境对象中读取原始文件吗?
是的,这是一个完全可重现的例子url:
url <- paste0('https://file-examples.com/storage/fe91183158623ded19eb446/',
'2017/02/file_example_XLSX_100.xlsx')
现在下载我们的文件并获取其原始内容:
raw_xlsx <- httr::GET(url)$content
让我们创建一个临时文件来存储它:
tmp <- tempfile(fileext = '.xlsx')
现在将原始数据写入文件:
writeBin(raw_xlsx, tmp)
我们的 excel 文件现在保存在临时文件中,我们可以读取它,但是您通常会将它们读入 R:
my_excel <- readxl::read_excel(tmp)
结果是:
my_excel
#> # A tibble: 100 x 8
#> `0` `First Name` `Last Name` Gender Country Age Date Id
#> <dbl> <chr> <chr> <chr> <chr> <dbl> <chr> <dbl>
#> 1 1 Dulce Abril Female United States 32 15/10/2017 1562
#> 2 2 Mara Hashimoto Female Great Britain 25 16/08/2016 1582
#> 3 3 Philip Gent Male France 36 21/05/2015 2587
#> 4 4 Kathleen Hanner Female United States 25 15/10/2017 3549
#> 5 5 Nereida Magwood Female United States 58 16/08/2016 2468
#> 6 6 Gaston Brumm Male United States 24 21/05/2015 2554
#> 7 7 Etta Hurn Female Great Britain 56 15/10/2017 3598
#> 8 8 Earlean Melgar Female United States 27 16/08/2016 2456
#> 9 9 Vincenza Weiland Female United States 40 21/05/2015 6548
#> 10 10 Fallon Winward Female Great Britain 28 16/08/2016 5486
#> # ... with 90 more rows
我正在使用 httr 包通过其 REST API 从我们的报告系统检索数据。我将内容指定为 xlsx。响应包含原始(二进制?)文件。
我的请求如下所示:
request = GET("http://server/.../documents/123456",
add_headers(.headers = c('Accept'= 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
'authtoken' = paste0('', logonToken,''))) ,
content_type("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"),
encode = 'raw'
)
content(request)
[1] 50 4b 03 04 0a 00 08 08 08 00 19 88 79 54 00 00 00 00 00 00 00
[44] 2f 73 68 65 65 74 31 2e 78 6d 6c a5 57 5b 6f 9b 30 14 7e 9f b4
[87] 00 23 43 2f db af 9f c1 94 d8 c6 58 93 92 87 54 f5 77 f1 39 fe
... etc
结果可以保存为 .xlsx 并在 Excel 中打开。但是,我想将这些数据直接读取到数据框中。有没有办法在同一脚本中将结果模拟为可读输入?
我可以传递一个额外的参数 write_disk
将响应直接保存为文件。需要指定路径。我尝试使用 tempfile()
进行测试以直接写入和读取响应,但无法使其正常工作。
有什么方法可以从 R 环境对象中读取原始文件吗?
是的,这是一个完全可重现的例子url:
url <- paste0('https://file-examples.com/storage/fe91183158623ded19eb446/',
'2017/02/file_example_XLSX_100.xlsx')
现在下载我们的文件并获取其原始内容:
raw_xlsx <- httr::GET(url)$content
让我们创建一个临时文件来存储它:
tmp <- tempfile(fileext = '.xlsx')
现在将原始数据写入文件:
writeBin(raw_xlsx, tmp)
我们的 excel 文件现在保存在临时文件中,我们可以读取它,但是您通常会将它们读入 R:
my_excel <- readxl::read_excel(tmp)
结果是:
my_excel
#> # A tibble: 100 x 8
#> `0` `First Name` `Last Name` Gender Country Age Date Id
#> <dbl> <chr> <chr> <chr> <chr> <dbl> <chr> <dbl>
#> 1 1 Dulce Abril Female United States 32 15/10/2017 1562
#> 2 2 Mara Hashimoto Female Great Britain 25 16/08/2016 1582
#> 3 3 Philip Gent Male France 36 21/05/2015 2587
#> 4 4 Kathleen Hanner Female United States 25 15/10/2017 3549
#> 5 5 Nereida Magwood Female United States 58 16/08/2016 2468
#> 6 6 Gaston Brumm Male United States 24 21/05/2015 2554
#> 7 7 Etta Hurn Female Great Britain 56 15/10/2017 3598
#> 8 8 Earlean Melgar Female United States 27 16/08/2016 2456
#> 9 9 Vincenza Weiland Female United States 40 21/05/2015 6548
#> 10 10 Fallon Winward Female Great Britain 28 16/08/2016 5486
#> # ... with 90 more rows