过去几天我一直在使用twitteR R软件包,并且使用直接消息传递时遇到错误。我编写了以下简短脚本,基本上只是为了看看我是否可以通过向它监视的帐户发送直接消息来有效地“远程控制”R,然后执行与其对应的块中的任何代码,同时向我发送响应。它的工作原理!有时。这是代码:
#### Loads libraries ######
library('twitteR')
library('RCurl')
library('ROAuth')
library('base64enc')
library('httr')
library('RJSONIO')
# Declare Twitter API Credentials
api_key <- X # From dev.twitter.com
api_secret <- X # From dev.twitter.com
token <- X # From dev.twitter.com
token_secret <- X # From dev.twitter.
# Create Twitter Connection
setup_twitter_oauth(api_key, api_secret, token, token_secret)
# Respond to incoming messages
oldMessage <- dmGet(n = 1)
oldMessage <- oldMessage[[1]]$text
for(i in seq(from = 1, to = 100, by = 1)){
incomingMessage <- dmGet(n = 1)
incomingMessage <- incomingMessage[[1]]$text
if(oldMessage == incomingMessage){
} else if(incomingMessage == 'Message 1'){
dmSend('Response 1', 'USER123')
} else if (incomingMessage == 'Message 2'){
dmSend('Response 2', 'USER123')
} else if (incomingMessage == 'Sleep') {
dmSend('Off', 'USER123')
break
}
oldMessage <- incomingMessage
Sys.sleep(30)
}
所以,实际上,我试图让它每隔30秒检查一次新的直接消息,如果直接消息已经改为“消息1”,“消息2”或“睡眠”,则会发送一个响应中的直接消息,如果消息为“睡眠”,则将跳出循环并停止监视直接消息。密钥和令牌部分显然被我自己替换(我的Twitter帐户不是USER123)。
问题是,通常在与R交换大约1或2次后,我收到以下消息:
Error in twInterfaceObj$doAPICall("direct_messages/new", params = params, :
client error: (403) Forbidden
它需要多长时间不一致。有时需要1条消息,而且我已经通过完整的三个消息序列(我昨天和今天之间尝试了大约10次)。似乎如果我再次重新运行setup_twitter_oauth语句,我可以再次重新运行脚本(在1-3条消息后仍然停止),所以我想知道我是否在那里设置了错误?有关更多信息,请参阅我的sessionInfo:
> sessionInfo()
R version 3.2.2 (2015-08-14)
Platform: i686-pc-linux-gnu (32-bit)
Running under: Ubuntu 15.04
locale:
[1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C LC_TIME=en_US.UTF-8 LC_COLLATE=en_US.UTF-8
[5] LC_MONETARY=en_US.UTF-8 LC_MESSAGES=en_US.UTF-8 LC_PAPER=en_US.UTF-8 LC_NAME=C
[9] LC_ADDRESS=C LC_TELEPHONE=C LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] RJSONIO_1.3-0 httr_1.0.0 base64enc_0.1-3 ROAuth_0.9.6 RCurl_1.95-4.7 bitops_1.0-6
[7] twitteR_1.1.9
loaded via a namespace (and not attached):
[1] codetools_0.2-11 digest_0.6.8 R6_2.1.1 DBI_0.3.1 magrittr_1.5 stringi_0.5-5
[7] curl_0.9.3 rjson_0.2.15 tools_3.2.2 stringr_1.0.0 bit64_0.9-5 bit_1.1-12
为什么我会收到此错误的任何想法?我还应该提一下我尝试过的twitteR软件包的所有其他功能 - 我可以发送推文,搜索推文,获取用户时间表等等。感谢您的帮助!
编辑9/1/15:
不确定它是否相关或有用,但我在Windows 8中尝试了相同的代码(我甚至不接近Ubuntu的专家,所以我想知道它是否会产生影响),并在收到相同的错误后一两条消息。
编辑9/2/15:
似乎错误不在dmSend中,它在dmGet中。如果我将for循环更改为以下内容,它只是每三十秒向我发送一次日期和时间,它很高兴地向我发送了大量的消息。
for(i in seq(from = 1, to = 100, by = 1)){
message <- paste('The current date and time is', Sys.time())
dmSend(message, 'USER123')
Sys.sleep(30)
}