R语言sprintf生成API参数返回NULL及map_df报错问题求助
问题1:
PlayerIdLines返回NULL的原因 cat()函数的设计目标是直接将内容输出到控制台/文件连接,本身无返回值,所以赋值操作拿到的就是NULL- 如果你需要将生成的参数字符串存入变量,直接保留
sprintf()即可,不需要嵌套cat():
PlayerIdLines <- sprintf('body=list(playerId = %s)', playerId) # 后续如果要打印看结果再单独调用cat(PlayerIdLines, sep = "\n")
问题2:批量请求报错的解决方案
你的代码存在3个明显问题,逐一修正即可:
- 函数参数与传入值不匹配:你用
map_df()遍历的是ID向量,每次传入函数的是单个playerId值,但你的函数参数写的是未使用的url,函数内部还错误调用了全局的完整ID向量 - 没有对POST请求的返回结果做解析:
POST()返回的是httr响应对象,不能直接被map_df()转为数据框,需要先用content()解析接口返回的JSON内容 - 变量名不一致:你最开始定义的ID向量是
playerId,后续调用map_df时用了playerIds,要统一变量名
修正后的代码如下:
# 首先统一ID向量名 playerIds <- c(12345, 23456, 34567) # 重写批量请求函数 get_data <- function(pid) { # 发送请求 resp <- POST( 'https://api.secure.com/v1/Test', accept_json(), content_type_json(), add_headers(Authorization = VanAPI), encode = "json", body=list(playerId = pid) # 调用每次传入的单个playerId值 ) # 解析返回的JSON内容为可转数据框的结构 content(resp, as = "parsed") } # 批量调用生成数据框 map_df(playerIds, get_data, .id = 'log') -> CreateDF
如果部分请求存在失败概率,可以在函数里加
tryCatch()做异常捕获,避免单个请求失败导致整个批量任务终止
内容的提问来源于stack exchange,提问作者user16497487
相关产品推荐
相关产品推荐

