我正在尝试抓取德国政客和政党的推文。我使用 get_timeline() 遍历句柄向量,如下所示:
for (user in afd_functional_users) {
# get user timeline tweets
user_tweets <- get_timeline(user, n = Inf, parse = TRUE, include_rts = FALSE,
exclude_replies = TRUE, trim_user = TRUE,
since_id = "1211587346791063552",
max_id = "1609503765043855360",
retryonratelimit = FALSE,
verbose = TRUE)
# add the user handle as a column to the dataframe
user_tweets$handle <- user
# append the user's tweets to the main dataframe
afd_df <- rbind(afd_df, user_tweets)
# pause briefly to avoid rate limit errors
Sys.sleep(5)
}
(推文 ID 是我个人帐户中发布的推文,这些推文是在我感兴趣的日期作为开始/结束日期发布的,即 2020 年 1 月 1 日至 2022 年 12 月 31 日)。
这对大多数用户来说效果很好,但是对于其中一些用户来说,它实际上并没有抓取时间范围内的所有推文,而是在一个随机点切断,这对每个相关用户来说都是不同的。每个用户的推文数量实际上也不同,例如,对于用户@AfD,它收集了 1003 条推文,而对于用户@AfDimBundestag,它返回了 2718 条推文。但是,在这两种情况下,它都在实际日期 2020 年 1 月 1 日之前停止,在这些情况下分别是在 2020/2021 年中期(从最新的推文开始)。在我收集推文的所有帐户中,大约有 10-20% 的帐户遇到了这个问题,其余一切都很好。
显然,我尝试的主要解决方案是为相关用户再次使用 get_timeline(),调整时间范围以实际以最后抓取的推文的 ID 结束,而不是通用的结束日期推文。我以循环格式和使用单一用户进行了尝试。这是@AfD 帐户的示例:
user_tweets <- get_timeline("AfD", n = Inf, parse = TRUE, include_rts = FALSE,
exclude_replies = TRUE, trim_user = TRUE,
since_id = "1211587346791063552",
max_id = "1321067464114032642",
retryonratelimit = TRUE,
verbose = TRUE)
代码运行良好,但检查 user_tweets 返回 0 个观察值。我知道这些帐户在时间范围内发了推文,并通过 Twitter 搜索手动检查了这一点。
我也尝试过使用 search_tweets() 和 search_tweets2() 的版本来获取相关用户的推文,但这也没有用。
有人有办法解决这个问题吗?不幸的是,我知道由于旧的 Twitter API 被关闭,有些东西不再工作了,但我希望也许能找到一些东西。如果您需要更多信息,请告诉我。
我不知道为什么 API 不起作用,但如果你有学术访问权限,你可以通过这样的方式获取所有推文:
tweets_AfD <- tweet_search_all("from:AfD",
since_id = "1211587346791063552",
until_id = "1321067464114032642", n = Inf)
tw <- lookup_tweets(tweets_AfD$id)
这需要最新的rtweet 1.2.0.9001(我刚推到仓库)