You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用rtweet的get_timeline与users_data批量获取多账号推文及用户信息问题

批量获取Twitter账号推文并关联用户信息的解决方案

问题原因

当使用get_timeline批量拉取多个账号的推文时,返回的合并数据框中,users_data()函数默认仅提取第一个账号的用户信息,无法直接关联所有推文对应的账号信息。

解决方案1:循环逐个拉取并合并

通过遍历每个账号,单独获取推文和对应的用户信息,再将用户ID、用户名等字段添加到推文数据中,最后合并所有结果:

library(rtweet)

# 目标账号列表
accounts <- c("BarackObama", "justinbieber")
# 已完成API认证(替换为你的认证方式)
auth <- rtweet_bot()

# 初始化空数据框用于存储合并结果
final_data <- data.frame()

# 循环处理每个账号
for (acc in accounts) {
  # 获取当前账号的推文
  acc_tweets <- get_timeline(acc, n = 100, token = auth, retryonratelimit = TRUE)
  # 获取当前账号的用户信息
  acc_user <- users_data(acc_tweets)
  # 为推文数据添加用户ID和用户名字段
  acc_tweets$user_id <- acc_user$user_id
  acc_tweets$screen_name <- acc_user$screen_name
  # 合并到总数据框
  final_data <- rbind(final_data, acc_tweets)
}

# 查看关联后的结果示例
head(final_data[, c("text", "user_id", "screen_name")])

解决方案2:用purrr批量处理(更简洁)

借助purrr包的map_dfr函数,批量处理每个账号并自动合并结果:

library(rtweet)
library(purrr)
library(dplyr)

accounts <- c("BarackObama", "justinbieber")
auth <- rtweet_bot()

# 定义单个账号的处理函数
process_single_account <- function(account) {
  # 获取推文
  tweets <- get_timeline(account, n = 100, token = auth, retryonratelimit = TRUE)
  # 获取用户信息
  user_info <- users_data(tweets)
  # 为推文添加用户字段
  tweets %>%
    mutate(
      user_id = user_info$user_id,
      screen_name = user_info$screen_name
    )
}

# 批量处理所有账号并合并数据
final_data <- map_dfr(accounts, process_single_account)

# 查看结果
head(final_data[, c("text", "user_id", "screen_name")])

补充方案:批量获取用户信息再关联

如果已经批量拉取了所有推文,可通过lookup_users批量获取所有账号的用户信息,再通过推文的来源标识关联(需确保推文数据能对应到所属账号):

library(rtweet)
library(dplyr)

accounts <- c("BarackObama", "justinbieber")
auth <- rtweet_bot()

# 批量获取所有推文
all_tweets <- get_timeline(accounts, n = 100, token = auth, retryonratelimit = TRUE)
# 批量获取所有账号的用户信息
all_users <- lookup_users(accounts, token = auth) %>%
  select(user_id, screen_name)

# 按账号拆分推文并关联用户信息(假设每个账号拉取100条,按顺序排列)
all_tweets <- all_tweets %>%
  mutate(
    screen_name = rep(accounts, each = 100)
  ) %>%
  left_join(all_users, by = "screen_name")

# 查看结果
head(all_tweets[, c("text", "user_id", "screen_name")])

内容的提问来源于stack exchange,提问作者cianna

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 19:03:37