如何等待推特限速
how to wait on twitter rate limit
我正在尝试使用包 twitteR
编写 R 程序,但我将 运行 保持在速率限制中。我把它合在一起试图睡觉,直到速率限制完成。 count<10
的目的是在该字符串没有可返回值的情况下使程序继续运行。 searchedTweets
是一个保存所有结果的全局变量。我怎样才能使它更 "R-like"?具体来说,我该如何正确使用 retryOnRateLimit
参数?我怎样才能更好地处理找不到任何推文的问题?
searchString<-c('#BringBackOurGirls','#YesAllWomen','#HeforShe','#NotAllMen','#IceBucketChallenge','#OccupyCentral','#Ferguson','#Gamergate','#YouOKSis','#BlackLivesMatter','#StopGamerGate','#TweetLikeANeurotypical','#CancelColbert','#UmbrellaRevolution','#AmINext','#IfTheyGunnedMeDown','#WhyIStayed','#DudesGreetingDudes','#GirlsLikeUs','#MensRights','#MGTOW','#RedPill','#CheerstoSochi','#NotOneMore','#Not1More','#DonLemonReporting','#CrimingWhileWhite','#LoveIsLove','#PrayForParis','#LoveWins','#IStandWithAhmed','#IStandWithPlannedParenthood','#ShoutYourAbortion','#ProLife','#Oromoprotests','#Kony2012','#SosBlakaustralia')
searchedTweets<<-NULL
lapply(searchString,function(y){
r_tweets<-NULL
count<-0
while(length(r_tweets)<=0 && count<10){
r_tweets<-searchTwitter(y, n=50, lang="en-US", since=NULL, until=NULL,
locale=NULL, geocode=NULL, sinceID=NULL, maxID=NULL,
resultType=NULL, retryOnRateLimit=0)
Sys.sleep(60*2)#seconds
count<-count+1
cat("count: ",count," on term: ",y,"\n")
}
if(count<10){
searchedTweets<<-rbind.data.frame(searchedTweets,r_tweets)
sources<-sapply(r_tweets,function(x)x$getStatusSource())
sources<-gsub("</a>","",sources)
sources<-strsplit(sources,">")
sources<-sapply(sources,function(x)ifelse(length(x)>1,x[2],x[1]))
source_table=table(sources)
pie(source_table[source_table>10])
cat("###term: ",y," done!\n")
#pie(source_table)
}else{cat("couldnt use term: ",y)}
})
您应该能够更有条理地安排您的请求不受速率限制或休眠多长时间以重置速率限制。响应 headers 将告诉您速率限制。
$ oksocial -i 'https://api.twitter.com/1.1/search/tweets.json?q=%40twitterapi'
HTTP/1.1 200 OK
...
x-rate-limit-limit: 180
x-rate-limit-remaining: 179
x-rate-limit-reset: 1453674071
这将在下次重置前给出您的限制和剩余请求。
$ date -r 1453674071
Sun 24 Jan 2016 14:21:11 PST
我正在尝试使用包 twitteR
编写 R 程序,但我将 运行 保持在速率限制中。我把它合在一起试图睡觉,直到速率限制完成。 count<10
的目的是在该字符串没有可返回值的情况下使程序继续运行。 searchedTweets
是一个保存所有结果的全局变量。我怎样才能使它更 "R-like"?具体来说,我该如何正确使用 retryOnRateLimit
参数?我怎样才能更好地处理找不到任何推文的问题?
searchString<-c('#BringBackOurGirls','#YesAllWomen','#HeforShe','#NotAllMen','#IceBucketChallenge','#OccupyCentral','#Ferguson','#Gamergate','#YouOKSis','#BlackLivesMatter','#StopGamerGate','#TweetLikeANeurotypical','#CancelColbert','#UmbrellaRevolution','#AmINext','#IfTheyGunnedMeDown','#WhyIStayed','#DudesGreetingDudes','#GirlsLikeUs','#MensRights','#MGTOW','#RedPill','#CheerstoSochi','#NotOneMore','#Not1More','#DonLemonReporting','#CrimingWhileWhite','#LoveIsLove','#PrayForParis','#LoveWins','#IStandWithAhmed','#IStandWithPlannedParenthood','#ShoutYourAbortion','#ProLife','#Oromoprotests','#Kony2012','#SosBlakaustralia')
searchedTweets<<-NULL
lapply(searchString,function(y){
r_tweets<-NULL
count<-0
while(length(r_tweets)<=0 && count<10){
r_tweets<-searchTwitter(y, n=50, lang="en-US", since=NULL, until=NULL,
locale=NULL, geocode=NULL, sinceID=NULL, maxID=NULL,
resultType=NULL, retryOnRateLimit=0)
Sys.sleep(60*2)#seconds
count<-count+1
cat("count: ",count," on term: ",y,"\n")
}
if(count<10){
searchedTweets<<-rbind.data.frame(searchedTweets,r_tweets)
sources<-sapply(r_tweets,function(x)x$getStatusSource())
sources<-gsub("</a>","",sources)
sources<-strsplit(sources,">")
sources<-sapply(sources,function(x)ifelse(length(x)>1,x[2],x[1]))
source_table=table(sources)
pie(source_table[source_table>10])
cat("###term: ",y," done!\n")
#pie(source_table)
}else{cat("couldnt use term: ",y)}
})
您应该能够更有条理地安排您的请求不受速率限制或休眠多长时间以重置速率限制。响应 headers 将告诉您速率限制。
$ oksocial -i 'https://api.twitter.com/1.1/search/tweets.json?q=%40twitterapi'
HTTP/1.1 200 OK
...
x-rate-limit-limit: 180
x-rate-limit-remaining: 179
x-rate-limit-reset: 1453674071
这将在下次重置前给出您的限制和剩余请求。
$ date -r 1453674071
Sun 24 Jan 2016 14:21:11 PST