rtweet包1.0.2版本get_followers()无法获取超过75000个Twitter粉丝问题咨询
解决rtweet 1.0.2版本get_followers无法获取全部粉丝的问题
我来帮你排查这个问题并给出可行的解决办法!
问题原因分析
rtweet 1.0+版本切换到了Twitter API v2,而旧版本基于API v1.1。你遇到的75000个粉丝上限,刚好对应API v2免费版的速率限制:每15分钟最多75次请求,每次请求最多返回1000个粉丝ID(75×1000=75000)。
之所以旧版本能完成全量下载,是因为API v1.1的分页逻辑和速率限制处理与v2不同,而rtweet 1.0.2的get_followers函数在retryonratelimit=TRUE参数的实现上存在bug——第一次速率限制等待后,没有自动继续获取后续分页的粉丝数据,导致流程提前终止。
解决方案
方案1:手动处理分页与速率限制
绕过get_followers的自动重试逻辑,自己循环获取每一页的粉丝数据,同时手动处理速率限制等待:
library(rtweet) library(dplyr) # 已完成认证 auth_setup_default() target_user <- "CDU" all_followers <- tibble(from_id = character(), to_id = character()) next_token <- NULL while(TRUE) { # 获取当前批次的粉丝,每次最多1000个 batch <- get_followers( user = target_user, n = 1000, pagination_token = next_token, retryonratelimit = FALSE ) # 没有数据则退出循环 if(nrow(batch) == 0) break # 合并到总列表 all_followers <- bind_rows(all_followers, batch) message(sprintf("已获取 %s 个粉丝", nrow(all_followers))) # 获取下一页的分页token next_token <- attr(batch, "next_token") # 没有下一页则退出 if(is.null(next_token)) break # 检查速率限制,剩余请求不足时等待重置 rate_info <- rate_limit("users/followers") if(rate_info$remaining <= 1) { wait_mins <- round(as.numeric(rate_info$reset - Sys.time(), units = "mins"), 1) message(sprintf("速率限制即将耗尽,等待 %s 分钟...", wait_mins)) Sys.sleep(wait_mins * 60) } } # 查看最终结果 nrow(all_followers)
方案2:更新rtweet到最新版本
rtweet的后续版本已经修复了多个API v2相关的bug,包括retryonratelimit参数的问题。尝试更新包后再使用原代码:
# 从CRAN更新稳定版 install.packages("rtweet") # 或者安装GitHub开发版(修复问题更及时) # install.packages("remotes") # remotes::install_github("ropensci/rtweet")
更新完成后,重新运行你的原代码:
df_follower <- get_followers("CDU", n = 800000, retryonratelimit = TRUE)
方案3:确认API权限级别
如果你的Twitter开发者账号是免费版,API v2确实有每15分钟75000个粉丝的单次限制,但通过多次等待速率限制重置,应该可以逐步获取全部粉丝。如果是学术研究账号或付费版,速率限制更高,下载会更快。
内容的提问来源于stack exchange,提问作者TobKel
相关产品推荐
相关产品推荐

