【发布时间】: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
我想知道是否有使用 Twitter Streaming API (https://dev.twitter.com/docs/streaming-api) 的 gem?
谢谢
我发现这个 gem (https://github.com/jnunemaker/twitter) 看起来很不错,但不支持流 api,是吗?
【问题讨论】:
标签: ruby-on-rails ruby api twitter
我过去曾结合使用 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。
你可以使用这个:Tweetstream,它位于em-twitter之上
【讨论】: