来自R的Twitter API上的用户查找导致错误(403)

Dav*_*ave 8 twitter r

使用Twitter API和twitteR-package,我试图检索一长串名称的用户对象(介于50.000和100.000之间).

我一直收到以下错误:

Error in twInterfaceObj$doAPICall(paste("users", "lookup", sep = "/"),  : 
  client error: (403) Forbidden
Run Code Online (Sandbox Code Playgroud)

错误代码据说提示"更新限制".但是用户查找速率限制是180,并且查找是以100个用户名的批量执行的.因此,多达18.000个用户应该不是问题.但是,即使每15分钟时间窗口将数量减少到6000(以通过仅应用程序身份验证来限制请求的限制),也会导致相同的错误.

这是一个MWE(但是你需要自己的API密钥):

library(plyr)
# install the latest versions from github:
# devtools::install_github("twitteR", username="geoffjentry")
# devtools::install_github("hadley/httr")
library(twitteR)
library(httr)    

source("TwitterKeys.R") # Your own API-Keys
setup_twitter_oauth(consumerKey, consumerSecret, accessToken, accessSecret)

# The following is just to generate a large enough list of user names:
searchTerms <- c("worldcup", "economy", "climate", "wimbledon", 
                 "apple", "android", "news", "politics")

# This might take a while
sample <- llply(searchTerms, function(term) {
  tweets <- twListToDF(searchTwitter(term, n=3200))
  users <- unique(tweets$screenName)
  return(users)
})

userNames <- unique(unlist(sample))

# This function is supposed to perform the lookups in batches 
# and mind the rate limit:
getUserObjects <- function(users) {
  groups <- split(users, ceiling(seq_along(users)/6000))
  userObjects <- ldply(groups, function(group) {
    objects <- lookupUsers(group)
    out <- twListToDF(objects)
    print("Waiting for 15 Minutes...")
    Sys.sleep(900)
    return(out)
  })
  return(userObjects)
}

# Putting it into action:
userObjects <- getUserObjects(userNames)
Run Code Online (Sandbox Code Playgroud)

有时手动查找较小的子集,例如通过lookupUsers(userNames[1:3000])工作; 但是,当我尝试自动化该过程时,会抛出错误.

有谁知道这可能是什么原因?

ora*_*ge1 1

根据这个答案,即使从第一个请求开始,我就达到了 twitteR 的速率限制,不仅对用户总数有限制,而且对每 15 分钟间隔的呼叫数量也有限制。如果每个呼叫有 100 个用户,而您尝试查找 6000 个用户,则您应该进行 60 个呼叫,这超过了允许的 15 个呼叫。尝试让程序进入睡眠状态,并让它在 15 分钟后再次发出呼叫。