我目前正在使用R中的streamR包来从twitter中的过滤器流中传输推文。我有一个握手的ROAuth对象,我用它。我的代码看起来像:
# load the Twitter auth object
load("twitter_oAuth3.RData")
load("keywords3.RData")
streamTweet = function(){
require(streamR)
require(ROAuth)
stack = filterStream(file.name="",track=keywords,timeout=500,oauth=twitter_oAuth)
return(stack)
}
我想创建一个实时应用程序,包括将这些推文转储到activeMQ主题中。我的代码是:
require(Rjms)
# Set logger properties
url = "tcp://localhost:61616"
type = "T"
name = "TwitterStream"
# initialize logger
topicWriter = initialize.logger(url,type,name)
topicWrite = function(input){
# print("writing to topic")
to.logger(topicWriter,input,asString=TRUE,propertyName='StreamerID',propertyValue='1')
return()
}
logToTopic = function(streamedStack){
# print("inside stack-writer")
stacklength = length(streamedStack)
print(c("Length: ",stacklength))
for(i in 1:stacklength){
print(c("calling for: ",i))
topicWrite(streamedStack[i])
}
return()
}
现在我的问题是filterStream()
需要的超时问题。我看了一眼,发现了这个函数的调用:
url <- "https://stream.twitter.com/1.1/statuses/filter.json"
output <- tryCatch(oauth$OAuthRequest(URL = url, params = params,
method = "POST", customHeader = NULL,
writefunction = topicWrite, cainfo = system.file("CurlSSL",
"cacert.pem", package = "RCurl")), error = function(e) e)
我尝试删除超时组件,但它似乎不起作用。有没有办法可以永久维护一个流(直到我杀了它),它会在每个推文进入某个主题时转储它?
P.S。我知道调用twitter4j API的java实现。但是,我不知道如何在R中做到这一点。
答案 0 :(得分:0)
streamR
包的文档提到filterStream()
中超时选项的默认选项为0,这将使连接永久保持打开状态。
我引用:
&#34;数字,连接到流的最大时间长度(以秒为单位)。该 在此期间后,连接将自动关闭。例如,设置 超时到10800将使连接保持打开状态3小时。默认值为0, 这将使连接永久保持打开状态。&#34;
希望这有帮助。