【问题标题】:Rails gem for Twitter Streaming API用于 Twitter 流 API 的 Rails gem
【发布时间】:2012-02-04 20:15:42
【问题描述】:

我想知道是否有使用 Twitter Streaming API (https://dev.twitter.com/docs/streaming-api) 的 gem?

谢谢

我发现这个 gem (https://github.com/jnunemaker/twitter) 看起来很不错,但不支持流 api,是吗?

【问题讨论】:

    标签: ruby-on-rails ruby api twitter


    【解决方案1】:

    我过去曾结合使用 OAuth gem 和 EventMachine 来完成此操作。

    require 'eventmachine'
    require 'em-http'
    require 'json'
    require 'oauth'
    require 'oauth/client/em_http'
    
    # Edit in your details.
    CONSUMER_KEY = your_key
    CONSUMER_SECRET = your_secret
    ACCESS_TOKEN = your_token
    ACCESS_TOKEN_SECRET = your_token_secret
    
    def twitter_oauth_consumer
      @twitter_oauth_consumer ||= OAuth::Consumer.new(CONSUMER_KEY, CONSUMER_SECRET, :site => "http://twitter.com")
    end 
    
    def twitter_oauth_access_token
      @twitter_oauth_access_token ||= OAuth::AccessToken.new(twitter_oauth_consumer, ACCESS_TOKEN, ACCESS_TOKEN_SECRET)
    end
    
    EventMachine.run do
              toFollow=[twitter_id1, twitter_id2]
             http = EventMachine::HttpRequest.new('http://stream.twitter.com/1/statuses/filter.json'
    ).post(:body=>{"follow"=>toFollow.join(",")},
                :head => {"Content-Type" => "application/x-www-form-urlencoded"},
                :timeout => -1) do |client|
                twitter_oauth_consumer.sign!(client, twitter_oauth_access_token)
            end
    
            buffer = ""
    
            http.stream do |chunk|
                buffer += chunk
                while line = buffer.slice!(/.+\r?\n/)
                    puts "handling a new event:"+line
                end
            end
            http.errback { puts "Error" }
            http.disconnect { puts "Lost Connection" }
    
     end
    

    编辑 我根据this 博客文章修改了我的代码。

    【讨论】:

    • 能否请您添加“捆绑安装 ....”行。我错过了一些宝石,无法测试你的脚本。谢谢
    • gem install eventmachine && gem install oauth 应该是您所需要的。如果它仍然不起作用,那么您也需要 em-http-request。
    • 非常感谢。但是你发现这个宝石更舒服github.com/intridea/tweetstream
    【解决方案2】:

    你可以使用这个:Tweetstream,它位于em-twitter之上

    【讨论】:

      猜你喜欢
      • 2012-02-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-27
      • 1970-01-01
      • 2012-03-07
      • 2013-05-24
      • 2020-03-06
      相关资源
      最近更新 更多