2017-05-22 2 views
1

Google 트렌드에서 데이터를 다운로드 중입니다. 때때로 연결이 끊어 지므로 처음부터 루프를 다시 시작해야합니다 (1-726). 721 번째 시도에서 오류가 있다고 가정하고, 다시 1에서 다시 시작해야합니다.Jsonlite 및 For 루프 문제

library(jsonlite) 
baseurl <- "https://www.googleapis.com/trends/v1beta/graph?&terms=" 
for(i in 1:726){ 
mydata <- fromJSON(paste0(baseurl, file.list$query[i]), flatten=TRUE) 
message("Retrieving query ", i) 
pages[[i]] <- mydata$lines 
} 

는 오류이

Retrieving query 1 
Retrieving query 2 
Retrieving query 3 
Error in open.connection(con, "rb") : HTTP error 503. 

그런 다음 내가 원하는 데이터를 얻기 위해 반복적으로 전체 프로세스를 다시 시작해야 looklikes. 진행 상황을 잃지 않고 재 시도하는 방법이있을 수 있습니까?

+0

무료 Google API는 초당 요청 수가 제한 될 수 있다고 생각합니다. 초당 요청 수를 2 회 수행하려면 루프 내에'Sys.sleep (0.5) '를 추가하십시오. – digEmAll

+0

또는 독서를'try' 절로 감싸고 성공을 벡터에 저장할 수 있습니다. 그러면 어떤 요청이 성공했는지 알 수 있습니다. – ekstroem

답변

0

This에 대한 답변은 오류/예외 발생시 반복을 재 시도하는 유용한 스 니펫을 설명합니다. 이러한 조각과 코드는 (당신이 file.list에 아무것도 지정하지 않은대로, BTW 재현하는 것은 불가능하다)과 같을 것이다 :

library(jsonlite) 
baseurl <- "https://www.googleapis.com/trends/v1beta/graph?&terms=" 
for(i in 1:726){ 
    mydata<-NULL 
    attempt <- 1 
    while(is.null(mydata) && attempt <= 3) { 
    attempt <- attempt + 1 
    try(
     mydata <- fromJSON(paste0(baseurl, file.list$query[i]), flatten=TRUE) 
    ) 
    } 
    message("Retrieving query ", i) 
    pages[[i]] <- mydata$lines 
} 

while 상태에서 시도의 수를 변경하시기 바랍니다. 또한 이유는 초 당 요청 수에 대한 제한 일 수 있습니다 - digEmAll 제안대로 Sys.sleep()을 추가하십시오.