通过R从Premium API通过rtweet下载历史推文

时间:2019-06-02 07:48:54

标签: r twitter sentiment-analysis rtweet

我需要从Twitter提取2013年4月28日至今的带有“ #bitcoin”的推文,以进行情感分析。

为此,我可以访问Twitter的Premium API。

我正在使用提供功能search_fullarchive的rtweet包。

我的问题: 1.如何确保下载例如从2013-04-28到今天每天间隔50,000条推文?

  1. 是否必须像在“ search_tweets”中那样考虑retryonratelimit = T参数?
  2. 必须在“令牌”参数中插入哪个令牌
  3. 我可以创建一个数据框“ df_tweets”,该函数将其中的每个新下载的Tweets绑定吗?

此功能是否可以在2013-04-28至2019-06-02之间每天下载50,000条Tweets(注意:我必须查找环境名称,df_tweets应该为空的data.frame):

bitcointweets <-search_fullarchive(q = "bitcoin", 
n = 50000, 
fromDate = "20130428",
toDate = "20190602",
env_name = "XXX",
parse = T, 
token ="????", 
safedir = df_tweets)

是否可以估计此下载将花费多长时间?

非常感谢您。

2 个答案:

答案 0 :(得分:2)

所有令牌参数的

第一个(第3点)似乎需要不记名令牌:

与用户创建的APP相关联的令牌(需要开发者帐户),该令牌会转换为不记名令牌,以发出高级API请求

它是通过curl请求生成的,如您在这里所读:https://developer.twitter.com/en/docs/basics/authentication/guides/bearer-tokens

curl -u 'API key:API secret key' \
  --data 'grant_type=client_credentials' \
  'https://api.twitter.com/oauth2/token'

将“ API密钥”和“ API秘密密钥”替换为您的密钥。


第二个(第2点),高级帐户允许对tweets进行分页,即如果要返回的tweets的数量高于该数量,则它提供令牌。您的帐户允许每个请求,例如100.可以在api参考中进行高级搜索:https://developer.twitter.com/en/docs/tweets/search/api-reference/premium-search 由于 rtweet 参考中未提及此功能,因此我不确定在此阶段是否已实现。为了使用此分页,您必须提供带有所提供令牌的辩解 next 。 Twitter参考指出:

此参数用于获取结果的下一个“页面”。与该参数一起使用的值直接从API提供的响应中提取,因此请勿修改。

因此,如果您可以通过 rtweet (例如

)检索此 next令牌,则可以使用分页参数粘贴初始查询。
# initial example query looking for the term rtweet, filtering for tweets associated with news, excluding retweets and replies, starting on July 1, 2006 and ending on July 2, 2019
query <- "rtweet filter:news -filter:retweets -filter:replies since:2006-07-01 until:2019-07-02"

# next_token retrieved by request
next <- paste0("next:", next_token)

# search
search_fullarchive(query, n = 100, env_name = "your_developer_environment", token = "your_bearer_token")

# something happens and hopefully you get pagination token
.
.
.

# paste token with initial query
query <- paste0(query, " ", "pagination_token")

# search again, but now with pagination token in query
search_fullarchive(query, n = 100, env_name = "your_developer_environment", token = "your_bearer_token")

显然,此查询必须循环执行,直到没有返回分页令牌

由于我目前还没有使用 search_fullarchive()函数的经验,所以我真的不确定是否有可能获得 pagiation令牌,我建议使用curl搜索完整的Twitter存档。


关于(第4点),我建议循环使用 rbind(),该循环使用tweets的已解析数据帧(使用粗略的 parse = TRUE rtweet search_fullarchive()函数中的em>。


关于您的第一个问题(第1点):循环播放直到获得50,000条推文为止。我认为除了循环外没有其他可能性。

答案 1 :(得分:0)

在这方面有进展吗?我正在尝试类似的操作,但是使用在bearer_token参数中生成的token=时会导致出现“不是有效的访问令牌” 错误消息。