将Python版Telraam API请求转写为R代码后无法运行,求排查
Telraam API请求R代码的错误分析与修正
你的R代码存在几个关键问题,导致请求无法正常工作:
核心错误点
- 请求方法不匹配:原Python代码使用
POST请求提交参数,但你的R代码用了GET方法,而Telraam的该API接口仅接受POST请求。 - URL路径错误:目标API地址应为
https://telraam-api.net/v1/reports/traffic,你遗漏了路径中的/reports/traffic部分。 - 参数传递方式错误:Python里的
body是POST请求的JSON请求体,并非URL查询参数(query),不能用query参数传递,需将参数转为JSON格式放在body中。 - 数据解析遗漏层级:Python代码提取了响应中的
json['report']部分转成DataFrame,你的R代码直接解析整个响应,未对应到report节点。
修正后的R函数
library(httr) library(jsonlite) library(tibble) library(readr) get_telraam_data <- function(id = "9000001463", time_start = "2022-10-01 00:00:00Z", time_end = "2022-10-02 00:00:00Z", level = "segments", format = "per-hour", token = "***My_API-Key***") { # 构造请求体参数 request_body <- list( id = id, time_start = time_start, time_end = time_end, level = level, format = format ) # 发送POST请求 res <- POST( url = "https://telraam-api.net/v1/reports/traffic", body = request_body, encode = "json", # 自动将请求体转为JSON格式 add_headers("X-Api-Key" = token) ) # 检查请求状态,失败则抛出错误 stop_for_status(res) # 解析响应并提取report节点,转为结构化数据 response_content <- content(res, as = "text", encoding = "UTF-8") %>% fromJSON(flatten = TRUE) %>% .[["report"]] %>% # 对应Python中的json['report'] as_tibble() %>% readr::type_convert() # 保存为CSV文件,与原Python脚本功能对齐 write_csv(response_content, "test.csv") return(response_content) }
补充说明
- 使用
POST方法匹配API要求,替代原代码的GET。 - 通过
encode = "json"自动处理JSON格式的请求体,无需手动转义字符串。 - 明确提取响应中的
report节点,保证数据结构与Python代码输出一致。 - 新增CSV保存步骤,完全复现原Python脚本的完整功能。
内容的提问来源于stack exchange,提问作者leparc
相关产品推荐
相关产品推荐

