我目前正在使用此功能。我是新来的R所以idk如何连接工作和它的一件事谷歌没有帮助。
我的代码从crest api获取数字。
df <- readWorksheetFromFile("marketTypeIDS.xls", sheet=1, startRow = 1, endCol = 2)
typeIDs <- unname(unlist(df[,1]))
calcday<-as.numeric(Sys.Date())-30
currentdate<-as.numeric(Sys.Date())
itemcount <- 0
monthvolumes <- seq(1:11897)
baseurl <- "https://public-crest.eveonline.com/market/10000048/types/"
monthlyvolume <- (0)
tmpvol <- (0)
for (i in 1:11897)
{
itemcount <- fromJSON(paste0(baseurl, typeIDs[i], "/history/"), flatten = TRUE)$totalCount
Sys.sleep(0.034)
if (itemcount ==0)
{
monthvolumes[i] <- 0
}
else
{
repeat
{
currentdate <- as.Date(fromJSON(paste0(baseurl, typeIDs[i], "/history/"), flatten = TRUE)$items[itemcount,8])
Sys.sleep(0.034)
if (as.numeric(currentdate)<calcday)
{
break
}
tmpvol <- fromJSON(paste0(baseurl, typeIDs[i], "/history/"), flatten = TRUE)$items[itemcount,6]
Sys.sleep(0.034)
monthlyvolume <- monthlyvolume+tmpvol
itemcount <- itemcount-1
if (itemcount==0)
{
break
}
}
monthvolumes[i]<-monthlyvolume
monthlyvolume<-0
}
}
它停在~700(应该超过11000次),然后给我这个错误:
Error in open.connection(con, "rb") : Timeout was reached
6 open.connection(con, "rb")
5 open(con, "rb")
4 parse_con(txt, 1024^2, bigint_as_char)
3 parseJSON(txt, bigint_as_char)
2 fromJSON_string(txt = txt, simplifyVector = simplifyVector, simplifyDataFrame = simplifyDataFrame,
simplifyMatrix = simplifyMatrix, flatten = flatten, ...)
1 fromJSON(paste0(baseurl, typeIDs[i], "/history/"), flatten = TRUE)
In addition: Warning message:
closing unused connection 3 (https://public-crest.eveonline.com/market/10000048/types/18/history/)
此连接是在for循环的第一次运行时创建的(它从链接中的18开始) 我怎么能预先关闭这个连接,所以它不会打破循环? (这只花了大约一个小时,所以很难通过&#34;尝试&#34;)
提前感谢您的帮助! 如果你有任何其他建议我的耳朵是开放的!
答案 0 :(得分:0)
我解决了这个问题,以至于它在什么时候破坏了。 如果有记录,它总是从最后写的记录开始。
因此,我没有从1中循环读取11897条记录,而是从输出文件中读出了最后写入的内容。
我将所有这些包装在像@hrbrmstr建议的Try / Catch中,并且我把所有这些都放在了无限循环中 只有在写完最后一条记录时才会中断。
不是一个漂亮的解决方案,而是一个完美的工作且易于实现的解决方案,因为它只重启了几次并一直运行到最后,我只需要它几次。