如何使用R从需要身份验证的API下载CSV并转换为dataframe
解决方案
你可以通过以下三种常用方法直接将响应中的CSV内容转为R的dataframe,无需存储到本地:
前置依赖
确保已经安装httr包,若使用第三种tidyverse方案需要额外安装readr包:
# 未安装可先执行安装 # install.packages("httr") # install.packages("readr")
完整代码
library(httr) # 发起API请求,替换为你实际的账号、密码 api_resp <- GET( "https://api.performancehorizon.com/reporting/export/export/click.csv?start_date=2021-11-23+00%3A00%3A00&end_date=2021-11-24+00%3A00%3A00&campaign_id=1011l3888&convert_currency=USD&ref_conversion_metric_id%5B%5D=2", authenticate("你的用户名", "你的密码") ) # 方法1:使用httr内置的content()直接解析,自动处理编码 df <- content(api_resp, type = "text/csv", encoding = "UTF-8") # 方法2:用R基础包实现,兼容性最好 csv_content <- rawToChar(api_resp$content) df <- read.csv(text = csv_content, encoding = "UTF-8") # 方法3:tidyverse生态方案,读取大文件速度更快 library(readr) df <- read_csv(rawToChar(api_resp$content))
说明
- 请求返回的状态码为200说明接口调用成功,响应中的
$content字段存储的是CSV文件的二进制原始数据 rawToChar()可将二进制内容转换为纯文本的CSV字符串,直接传给CSV读取函数即可生成dataframe,全程无本地文件写入- 若读取时出现分隔符、表头不匹配的问题,可给
read.csv/read_csv增加对应参数调整,比如指定sep = ","、设置跳过行数skip = N等
内容的提问来源于stack exchange,提问作者Juan Lozano
相关产品推荐
相关产品推荐

