open.connection错误已达到超时

时间:2015-08-06 00:01:15

标签: r

我目前正在使用此功能。我是新来的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;)

提前感谢您的帮助! 如果你有任何其他建议我的耳朵是开放的!

1 个答案:

答案 0 :(得分:0)

我解决了这个问题,以至于它在什么时候破坏了。 如果有记录,它总是从最后写的记录开始。

因此,我没有从1中循环读取11897条记录,而是从输出文件中读出了最后写入的内容。

我将所有这些包装在像@hrbrmstr建议的Try / Catch中,并且我把所有这些都放在了无限循环中  只有在写完最后一条记录时才会中断。

不是一个漂亮的解决方案,而是一个完美的工作且易于实现的解决方案,因为它只重启了几次并一直运行到最后,我只需要它几次。