academictwitteR调用get_user_timeline返回400错误及突破3200条推文限制问题
问题原因及解决方法
400错误原因说明
- 核心错误是你请求参数里的时间格式不符合Twitter API v2的要求:你代码中
start_tweets和end_tweets的时间部分使用了点号分隔(T00.00.00Z),而API要求的ISO 8601格式必须使用冒号分隔,正确写法为T00:00:00Z,参数格式错误会直接触发400响应。 - 次要排查点:确认你指定的
data_path本地路径已提前创建,部分版本的academictwitteR在路径不存在时也会抛出异常;同时确认你安装的是最新版的academictwitteR,旧版本对学术API的适配存在已知bug。
修复400错误的代码调整
# 仅修改时间格式即可,其他参数保持不变 tmlne <- get_user_timeline("25390350", start_tweets = "2009-03-19T00:00:00Z", end_tweets = "2021-11-27T00:00:00Z", bearer_token = get_bearer(), data_path = "twitter/data/timelines/", n = 100000, bind_tweets = F, file = "tmlnw")
academictwitteR本身会自动处理分页逻辑,只要你确实开通了学术研究API权限,调整后可以直接拉取超过3200条的全量历史推文,无需额外手动分页。
调整get_timelines_v2拉取更早历史推文的方法
默认只能拉取3200条是因为TwitterV2包默认调用的是普通权限的用户时间线端点,且未开启全量分页,调整步骤如下:
- 调用时显式指定使用学术研究版端点,同时设置每次请求拉取上限100条
- 通过返回结果中的
next_token进行循环分页,直到没有新的分页token返回为止 - 按时间范围分段拉取,可避免单次请求数据量过大触发异常
示例逻辑参考:
# 初始化参数 user_id <- "25390350" start_time <- "2009-03-19T00:00:00Z" end_time <- "2021-11-27T00:00:00Z" all_tweets <- list() next_token <- NULL i <- 1 # 循环分页拉取 repeat { res <- get_timelines_v2( user = user_id, start_time = start_time, end_time = end_time, max_results = 100, pagination_token = next_token, bearer_token = get_bearer(), endpoint = "/2/users/:id/tweets" ) all_tweets[[i]] <- res$data if (is.null(res$meta$next_token)) break next_token <- res$meta$next_token i <- i + 1 # 控制请求频率,避免触发速率限制 Sys.sleep(1) } # 合并所有结果 full_timeline <- do.call(rbind, all_tweets)
内容的提问来源于stack exchange,提问作者H.Stevens
相关产品推荐
相关产品推荐

