TwitterのChirpUserStreamsをWebSocketで垂れ流す

Twitter の ChirpUserStreams を WebSocket で垂れ流して閲覧できるアプリを作りました!WebSocket 対応ブラウザ(Chrome 等)でお楽しみください!WebSocket すごい!ユーザ体験が変わる!

ChirpUserStreams => WebSocket

Tweets and Events

ボク @june29@kei_s から見た世界を体験できるようにしてあります。ChirpUserStreams については、以前にエントリを書きました。

TwitterのChirpUserStreamsをごくごくしてみた

本家の API がベータ版であり、まだまだ不安定なので、たまにスクリプトの再起動をかけたりしながら動かしています。見てみたいけど「なんにも表示されないよ?」って方がいたら、@june29@kei_s に話しかけてみてください。対応できるかもしれません。


User Streams goes Production, Site Streams adds Home Timelines – Twitter Development Talk | Google Groups にて、ChiprUserStreams は User Streams として正式リリース、とアナウンスがありました。伴い、本エントリで紹介している成果物も動かなくなっています。

ご自身のアカウントで試したいという方は、Ruby で書いたソースコードならありますので、よかったらご利用ください。

ソースコード: june29’s chirp2websocket at master – GitHub

ChirpUserStreams を WebSocket に流すまで

システムの基本構成は以下の通りです。

基本構成

Twitter の ChirpUserStreams が「水道の蛇口」だとしたら、Ruby でつくったホースを蛇口につなぎ、ホースのもう一端に WebSocket のアタッチメントをつけました、というところ。protected な対象はホースに仕掛けたフィルタで除去します。Chrome 等の WebSocket 対応ブラウザでアクセスすると、まるで水のように tweet と event が流れてきます。面白いのは、すべてのデータは「フロー」であって、システム内に一切の「ストック」を持たない点です。ユーザが自由に蛇口とホースとアタッチメントを選べるようになったら本当に面白いことになりそう。

さてさて、せっかくなので ChirpUserStreams で遊びたい放題しようと思い、以下のような構成のシステムを動かしています。

全体構成

Ruby でフェッチした ChirpUserStreams のデータは、RabbitMQ に突っ込むと同時に mongoDB にも投げつけました。あとから好きなようにデータを解析できます。JSON 形式そのままで投げつけることができるので保存はとても楽です。自分用 buzztter や自分用ふぁぼったー、自分用twitter検索を作ったら面白そう!

RabbitMQ に突っ込むと、ここから分岐させて stream データを活用できるようになります。本家 Twitter からのフェッチは1本にしておいて(制限もあるので)、利用は何本でも自由に、ってのが良いですよね。

今回は、自分の tweet が favorite されたり retweet されたり、reply をもらったり follow されたときに、iPhone にプッシュ通知を送り、MacBook に Growl で通知するように仕掛けてみました。favorite/retweet/reply から5秒以内に iPhone が「ティロリン」と鳴る体験は、なかなか刺激的で面白いものです。im.kayac.com は、HTTP リクエストを iPhone のプッシュ通知に変換してくれるもので、今回のようなソーシャルアプリ以外にも、システム運用や様々な場面で活用できます!

メモ

ただただ ChirpUserStreams を curl で取ってきてコンソールに出力してキャッキャと騒ぎ始めてから、気が付いたらデータで遊び放題できるところまでシステムを組んでいました。ここ数日間で知った要素技術、それを実装したソフトウェア、利用したアプリケーション等のメモです。

いろんな場面で EventMachine が登場して驚いた。これからますます活用されるようになりそうだ。

まとめ

WebSocket って、正直なところ、あまりピンときていませんでした。恐らく「垂れ流してみたいデータ」がなかったからだと思います。それが、Twitter の ChirpUserStreams の登場によって「これで勝つる!」とシビれるに至りました。キラーアプリケーションというか、キラーデータ、キラーストリームといったところです。

ChirpUserStreams 面白い!どうか公式 API になってほしい!WebSocket 面白い!もっといろんなストリームを垂れ流したい!みんなも遊んでみよう!

Facebook

Comments

  1. http://apiwiki.twitter.com/ChirpUserStreams の「Important Items」に
    「Do not release products during the preview period. 」
    かつ
    「All services, mobile and browser-based clients must not use Streaming until we’ve sorted out Desktop clients at some scale.」
    と書いてあるのをご理解いただけていないようですね。

  2. コメントありがとうございます。

    規約には事前に目を通しました。その上で、問題ないと判断し、公開に踏み切っています。問題があると認識したら、即刻、公開を停止するつもりです。

    これは不特定多数向けのサービスでもクライアントでもありません。問題となるのは “Capacity on chirpstream.twitter.com is very limited” であって、例えば、ユーザにユーザ名とパスワードを入力させて、そのユーザの ChirpUserStreams を表示するアプリケーションの場合、ユーザの数に対して単調増加する負荷をかけるので、公開するのは問題だと考えます。

    今回は、2ユーザ分の接続しか使用していません。これは、非公開の環境で、2ユーザ分の接続を持つアプリケーションを動かすのと同等の使用になります。よって、「公開によって問題となる」ケースではないと判断しました。