无法使用单独的TwitterStream实例跟踪多个关键字

时间:2014-03-20 16:23:14

标签: ruby-on-rails ruby twitter sidekiq

我正在尝试运行多个TweetStream客户端并跟踪关键字,每个客户端都有不同的访问/ oauth令牌(在不同的Twitter帐户上创建)。我正在使用sidekiq来启动每个TweetStream::Client实例。

我希望这是因为我应该能够启动每个sidekiq作业并分别跟踪每个关键字。但是,我发现的是,只要第一个TweetStream::Client连接并跟踪,那么在该点之后初始化的任何客户端都会被立即处理"又名完成,在sidekiq,不跟踪关键字。

def perform(app_id)    
  app = App.get(app_id)
  client = prepare_twitter_client(app)
  stream_tweets("google", app_id, client)
end

def prepare_twitter_client(app)
    # Use the companies twitter app token to connect to the stream
    @twitter_client = nil
    @twitter_client = TweetStream::Client.new
    @twitter_client.consumer_key               = app.tw_consumer_key
    @twitter_client.consumer_secret            = app.tw_consumer_secret
    @twitter_client.oauth_token                = app.tw_oauth_token
    @twitter_client.oauth_token_secret         = app.tw_oauth_secret
    @twitter_client.auth_method                = :oauth
    return @twitter_client
end


def stream_tweets(company_domain, app_id, twitter_client)
    twitter_client.on_error do |message|
    end.track(company_domain) do |status|
        logger.info "Tweet found that match the criteria.  #{status.text}"
        create_new_impression(status, app_id)
    end
end

我怀疑TweetStream在创建单独的实例和跟踪来自多个客户端的关键字时遇到了问题。

1 个答案:

答案 0 :(得分:1)

解决。

TweetStream似乎不是线程安全的。即使我会为每个sidekiq作业实例重新创建一个新的TwitterStream::Client,甚至有不同的Twitter帐户/应用程序,我也无法同时运行多个作业。

我将TweetStream替换为Sferik Twitter Gem并且效果很好。