Ruby: TweetStream でリアルタイムな Twitter のツイートデータを取得する

Streaming API を Ruby から取得するのに便利な RubyGem「TweetStream」を使ってみます。

 

Gemfile

source 'https://rubygems.org'
gem 'tweetstream'
$ bundle install --path .bundle

stream.rb

#! /usr/local/bin/ruby
# coding: utf-8

require 'tweetstream'

# ここに OAuth キーを入れます
CONS_KEY = "<your_consumer_key>"
CONS_SEC = "<your_consumer_secret>"
ACCS_KEY = "<your_access_token_key>"
ACCS_SEC = "<your_access_token_secret>"

TweetStream.configure do |config|
  config.consumer_key       = CONS_KEY
  config.consumer_secret    = CONS_SEC
  config.oauth_token        = ACCS_KEY
  config.oauth_token_secret = ACCS_SEC
  config.auth_method        = :oauth
end

TweetStream::Client.new.sample do |status|
  # 日本語かつリツイートでないツイートにフィルタリング
  next unless status.lang == "ja"
  next if status.text.index("RT")
  puts "#{status.user.screen_name} #{status.text}"
end

実行してみます。

$ bundle exec ruby stream.rb

リアルタイムなツイートが流れてきたら成功です。
これは世界のツイートからランダムに抽出されたものになるので、すべてのツイートが取得できているわけではありません。

 

特定のキーワードが含まれるツイートに限定する場合は new.sample の代わりに track を使用し、カンマで区切ることで OR 検索となります。

TweetStream::Client.new.track('渋谷', '新宿', '新橋') do |status|

 

自分のタイムライン(TweetStream::Client に渡している AccessToken を持つアカウント)のストリームを受け取るには userstream を使います。

TweetStream::Client.new.userstream do |status|

 

特定のユーザーのツイートを受けるには follow を使います。(複数カンマ区切り)

TweetStream::Client.new.follow(5710382) do |status|