Railsでtwitterのたれながしやってみた

いつからかわかりませんが
twitterのgemがアップデートされていました。
(まだrc版みたいですが)
https://github.com/sferik/twitter

新しいバージョンだと Streaming API にも対応してる?みたいなので
さっそく試してみました。
リアルタイムに情報を受け取ることができるということで、
せっかくなので、RailsActionController::Liveも使ってみます。
ActionController::Liveは対象のコントローラにMixinするだけで使えます。)

(ActionController::Liveについて、というかServer-Sent Eventsについて )

class TweetsController < ApplicationController
  include ActionController::Live

  def index
    topics = ["パフューム", "perfume"]
    response.headers['Content-Type'] = 'text/event-stream; charset=utf-8'

    begin
      twitter_streaming.filter(:track => topics.join(",")) do |tweet|
        puts tweet.text
        response.stream.write("#{tweet.text}\n")
      end
    rescue IOError

    ensure
      response.stream.close
    end
  end

  private

  def twitter_streaming
    Twitter::Streaming::Client.new do |config|
      config.consumer_key        = "*****"
      config.consumer_secret     = "*****"
      config.access_token        = "*****"
      config.access_token_secret = "*****"
    end
  end

end

これでパフューム, perfumeを含むつぶやきをブラウザとターミナルでたれながし出来ます。
実行結果
http://gyazo.com/dce65c1e624af4c97375195d8035666f

※注意
ActionController::Liveはロングポーリンクコネクションを使っているので、pumaのようなサーバが向いているようです。 Gemfileにpumaを追加するだけで使えます。

補足(メモ)
Phusion PassengerやUnicornといったマルチプロセス方式のサーバはリアルタイム通信を利用できないか、できてもリソースの使用効率が悪くなるので、基本的にはマルチスレッド方式か非同期イベント駆動方式をを採用した低リソースで多数のコネクションを採用したもの(puma)が向いている。とのこと。

WEB+DB PRESS Vol.73

WEB+DB PRESS Vol.73

  • 作者: 設樂洋爾,白土慧,はまちや2,大和田純,松田明,後藤大輔,ひろせまさあき,小林篤,近藤宇智朗,まかまか般若波羅蜜,Mr. O,川添貴生,重国和宏,柳澤建太郎,奥野幹也,佐藤鉄平,後藤秀宣,mala,中島聡,堤智代,森田創,A-Listers,WEB+DB PRESS編集部
  • 出版社/メーカー: 技術評論社
  • 発売日: 2013/02/23
  • メディア: 大型本
  • 購入: 12人 クリック: 131回
  • この商品を含むブログ (5件) を見る