Railsでtwitterのたれながしやってみた
いつからかわかりませんが
twitterのgemがアップデートされていました。
(まだrc版みたいですが)
https://github.com/sferik/twitter
新しいバージョンだと Streaming API にも対応してる?みたいなので
さっそく試してみました。
リアルタイムに情報を受け取ることができるということで、
せっかくなので、RailsのActionController::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を含むつぶやきをブラウザとターミナルでたれながし出来ます。
実行結果
※注意
ActionController::Liveはロングポーリンクコネクションを使っているので、pumaのようなサーバが向いているようです。 Gemfileにpumaを追加するだけで使えます。
補足(メモ)
Phusion PassengerやUnicornといったマルチプロセス方式のサーバはリアルタイム通信を利用できないか、できてもリソースの使用効率が悪くなるので、基本的にはマルチスレッド方式か非同期イベント駆動方式をを採用した低リソースで多数のコネクションを採用したもの(puma)が向いている。とのこと。
- 作者: 設樂洋爾,白土慧,はまちや2,大和田純,松田明,後藤大輔,ひろせまさあき,小林篤,近藤宇智朗,まかまか般若波羅蜜,Mr. O,川添貴生,重国和宏,柳澤建太郎,奥野幹也,佐藤鉄平,後藤秀宣,mala,中島聡,堤智代,森田創,A-Listers,WEB+DB PRESS編集部
- 出版社/メーカー: 技術評論社
- 発売日: 2013/02/23
- メディア: 大型本
- 購入: 12人 クリック: 131回
- この商品を含むブログ (5件) を見る