如何解决想要编写一个for循环,以某些条件if / else调用API
我想致电给我所有商店订单的Api。我总共有86.000个订单,其中第一个订单的ID为2,最近的订单的ID为250.000。订单显然不是连续的,由于某种原因,我还不知道,但没关系。
我用一个for循环启动了一个简单的脚本,其中ID在每个循环中都会更新,如下所示:
library(jsonlite)
library(httr)
user = "my_name"
token = "xyz"
y = 0
urls = rep("api.com/orders/",250000)
for(i in urls){
y = y + 1
url = paste0(i,y)
a = httr::GET(url,authenticate(user,token))
a_content = httr:content(a,as = "text",encoding = "UTF-8")
a_json = jsonlite::fromJSON(a_content,flatten = T)
...
}
这里的问题是,只要有没有顺序的ID,循环就会以"{\"success\":false,\"message\":\"Order by id 1 not found\"}"
停止,所以我不得不以某种方式if else
扩展代码,例如'如果ID不匹配下一个订单”。我也想将所有订单写入新列表。
任何帮助都很丰富。
解决方法
也许tryCatch
可以解决问题。此url_exists
function posted by user @hrbrmstr在下面的循环中被调用。
如果不进行测试,我会按照以下方式进行操作:
base_url <- "api.com/orders/"
last_order_number <- 250000
for(i in seq.int(last_order_number)){
url = paste0(base_url,i)
if(url_exists(url)){
a <- httr::GET(url,authenticate(user,token))
a_content <- httr:content(a,as = "text",encoding = "UTF-8")
a_json <- jsonlite::fromJSON(a_content,flatten = T)
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。