2017-02-03 15 views
2

Есть ли способ остановить мой цикл от прерывания скорости? Я бы хотел, чтобы мой код дождался, пока он не завершится, если это возможно.Избегайте ограничения скорости с помощью rtweet get_timeline()

Вопрос: Я думал о параллелизации цикла for. Считаете ли вы, что это будет хорошая идея? Я не был уверен, будет ли вероятность того, что данные будут записаны в неправильный файл.

library(rtweet) 
create_token(app="Arconic Influential Followers",consumer_key,consumer_secret) 

flw <- get_followers("arconic") 
fds <- get_friends("arconic") 
usrs <- lookup_users(c(flw$user_id, fds$user_id)) 

for(i in 1:length(usrs$user_id)){ 

    a<-tryCatch({get_timeline(usrs$user_id[i])}, 
       error=function(e){message(e)} 
     ) 
    tryCatch({save_as_csv(a,usrs$user_id[i])}, 
       error=function(e){message(e)} 
     ) 

} 

ответ

1

То, что я в конечном итоге делает было создать цикл в то время как проверил количество записей, я оставил в моем векторе пользователей, пробежал за цикл, а затем поставить систему, чтобы спать в течение 15 минут. Этот подход хорош, но есть некоторые вещи, которые нужно учитывать. У меня есть прерывание цикла while на 200, если бы у пользователей не было данных для сохранения в csv. Это оказалось хорошим шагом, потому что если вы заметили, что цикл for начинает итерацию на 80. Когда вы начинаете перемещаться по вашему вектору пользователей, хорошие пользователи удаляются итеративно. Это оставляет только пользователей, которые вызывают ошибки. Улучшение для кого-то, кто будет выполнять эту задачу, будет заключаться в том, чтобы обрабатывать это программно.

Users <- usrs$user_id 
goodUsers <- substring(list.files(),1,nchar(list.files())-11) 
Users <- setdiff(Users,goodUsers) 

while(length(Users)>200){ 
    for(i in 80:length(Users)){ 

     a<-tryCatch({get_timeline(Users[i],usr=FALSE)}, 
       error=function(e){message(e)} 
      ) 
     tryCatch({save_as_csv(a,Users[i]) 
       goodUsers <- append(goodUsers,Users[i])}, 
        error=function(e){message(e)} 
     ) 


    } 
Users <- setdiff(Users,goodUsers) 
Sys.sleep(900) 
} 

length(Users) 
length(goodUsers)