我需要从Twitter提取2013年4月28日至今的带有“ #bitcoin”的推文,以进行情感分析。
为此,我可以访问Twitter的Premium API。
我正在使用提供功能search_fullarchive的rtweet包。
我的问题: 1.如何确保下载例如从2013-04-28到今天每天间隔50,000条推文?
此功能是否可以在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)
是否可以估计此下载将花费多长时间?
非常感谢您。
答案 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=
时会导致出现“不是有效的访问令牌” 错误消息。