在R语言中调用Todoist REST API传递limit参数的方法咨询
解决R调用Todoist API传递limit参数的问题
问题描述
我尝试在R语言中调用Todoist的REST API获取指定数量的已完成任务,但传递limit参数时遇到困难:
- 默认API仅返回30条已完成任务
- 在curl中通过
-d limit=200参数可以获取200条任务,命令如下:curl https://api.todoist.com/sync/v9/completed/get_all \ -H "Authorization: Bearer 000api_key000" \ -d limit=200 - 已用以下R代码成功获取30条数据,但无法传递
limit参数:library(httr) library(jsonlite) raw.result <- GET(url = "https://api.todoist.com", path = "/sync/v9/completed/get_all", add_headers(Authorization=paste("Bearer 000api_key000")))
解决方案
方法1:使用httr传递参数
curl的-d参数对应POST请求的表单数据,你可以改用POST()函数并通过body参数传递limit:
library(httr) library(jsonlite) raw.result <- POST(url = "https://api.todoist.com", path = "/sync/v9/completed/get_all", add_headers(Authorization = "Bearer 000api_key000"), body = list(limit = 200), encode = "form") # 解析返回结果 result <- fromJSON(content(raw.result, "text"))
如果该接口支持GET请求传递查询参数,也可以用GET()的query参数实现:
raw.result <- GET(url = "https://api.todoist.com", path = "/sync/v9/completed/get_all", add_headers(Authorization = "Bearer 000api_key000"), query = list(limit = 200))
方法2:推荐使用httr2(httr的替代新版本)
由于httr已被httr2替代,更推荐使用httr2的写法,代码逻辑更简洁直观:
library(httr2) library(jsonlite) raw.result <- request("https://api.todoist.com/sync/v9/completed/get_all") %>% req_headers(Authorization = "Bearer 000api_key000") %>% req_body_form(limit = 200) %>% # 对应curl的-d参数 req_perform() # 解析返回结果 result <- fromJSON(resp_body_string(raw.result))
用户反馈
Margusl的答案完美解决了问题!非常感谢Margus,我之前不知道httr已被httr2替代,因为我一直在跟随过时的教程。感谢您花时间讲解!
内容的提问来源于stack exchange,提问作者Notthy
相关产品推荐
相关产品推荐

