hello-world
webエンジニアのメモ。とりあえずやってみる。

Rails4でTwitterStreamingAPIを使う その1

公開日時

Ruby2.0, Rails4で確認

tweetstream gemを使用してTwitterStreamingAPIを試してみました。

今回は

目標:ハッシュタグがyoutubeとなっているtweetを取得してlogに表示する

という所までやってみたいと思います。

Twitterアプリケーションの作成

  • Twitter Developers にログイン

  • ヘッダーの右端にあるアイコンをクリックして「My applications」クリック

tweet_dev1

  • 「Create a new application」をクリックしてアプリ作成画面へ

  • 必要項目を入力してアプリケーションを作成

tweet_dev2

  • アプリケーション作成後、ページ下部にある「Create my access token」をクリック

tweet_dev3

  • しばらくしてページをリロードするとアクセストークンが表示されるので「Consumer key」、「Consumer secret」、「Access token」、「Access token secret」をメモしておきます

Railsアプリケーションの作成

  • アプリ名はstreaming_sampleとします。

``bash rails new streaming_sample ```

  • Gemfileにtweetstreamを追加。
# Gemfile

gem 'tweetstream'
  • initializerにtweetstream設定を追加
# config/initializers/tweetstream.rb

TweetStream.configure do |config|
  config.consumer_key       = 'YOUR KEY'
  config.consumer_secret    = 'YOUR SECRET'
  config.oauth_token        = 'YOUR ACCESS TOKEN'
  config.oauth_token_secret = 'YOUR SECRET TOKEN'
  config.auth_method        = :oauth
end

tweet収集の部分をdaemon化

  • script/twitter_streaming.rbを作成
# mkdir script
# script/twitter_streaming.rb

ENV["RAILS_ENV"] ||= "development"

root = File.expand_path(File.join(File.dirname(__FILE__), '..'))
require File.join(root, "config", "environment")

daemon = TweetStream::Daemon.new('twitter_streaming', :log_output => true)
daemon.on_inited do
  ActiveRecord::Base.connection.reconnect!
  daemon_logger = Logger.new(File.join(Rails.root, "log", "stream.log"))
  Rails.logger = ActiveRecord::Base.logger = daemon_logger
  Rails.logger.debug "Listening..."
end
daemon.on_error do |message|
  Rails.logger.error message
end
daemon.track('#youtube') do |tweet|
  Rails.logger.debug tweet.text
end

daemonスクリプトに関しては公式ドキュメントに書かれていたものを参考にしつつ、logファイルにうまく書き込めなかったので少しいじりました。

  • daemonを起動
RAILS_ENV=development ./bin/rails runner script/twitter_streaming.rb start
  • ログを確認すると#youtubeを含むtweetが記録されていきます
tail -f log/stream.log
# #youtubeに関するtweetが随時記録されていく
  • daemonの停止はstopでできます
RAILS_ENV=development ./bin/rails runner script/twitter_streaming.rb stop
  • その他のdaemon用オプションは以下
RAILS_ENV=development ./bin/rails runner script/twitter_streaming.rb
ERROR: no command given

Usage: twitter_streaming   -- 

* where  is one of:
  start         start an instance of the application
  stop          stop all instances of the application
  restart       stop all instances and restart them afterwards
  reload        send a SIGHUP to all instances of the application
  run           start the application and stay on top
  zap           set the application to a stopped state
  status        show status (PID) of application instances

* and where  may contain several of the following:

    -t, --ontop                      Stay on top (does not daemonize)
    -f, --force                      Force operation
    -n, --no_wait                    Do not wait for processes to stop

Common options:
    -h, --help                       Show this message
        --version                    Show version

今回は「#youtube」を検索条件としましたが、どういうキーワードを検索条件に指定すべきか迷ったときは、 Streaming API keyword matchingでいろいろ試してみるといいと思います。

tweetstreamのその他の機能に関しては、 tweetstreamのドキュメントとTwitterの公式ドキュメントを参照ください。

次回は取得したtweetをMongoDBに保存するようにしてみたいと思います。

参考


Related #Rails

[rails]ELB使用時にヘルスチェック用のアクションを作成する

ELBにrailsアプリをぶら下げる場合、railsアプリが落ちたらELBから外れてもらいたいです。

[rails]carrierwaveで保存した画像のurlを取得する

carrierwave 0.10.0 で確認 imageカラムにcarrierwaveで保存した画像を保存している場合、デフォルトのままだとだとurlメソッドを実行してもpublic以下のパスのみで http://~ が設定されていません。