User StreamsをWebSocketに流すTwitterクライアントを作った
Posted on Tweet
User Streamsで受信したデータをWebSocketでリアルタイムにやりとりするTwitterクライアントを作ってみました。
特徴
- 新着ツイートをリアルタイムにプッシュ
- タブによるユーザ振り分け
- タブごとの未読管理
- LDR風のキーボード操作
- in_reply_toを辿ってインライン表示
- 画像のインライン表示
ソースコード
GitHubでソースコードを公開しています。
mono0x’s TwinkleSnow at master - GitHub
インストール
利用にはruby 1.9.2, TokyoTyrantが必要です。また、gitがあるとソースコードの入手・更新が容易です。以下の説明ではこれらはあらかじめインストールされているものとします。
gem install em-http-request em-websocket erubis eventmachine oauth tokyocabinet tokyotyrant twitter twitter-stream git clone git://github.com/mono0x/TwinkleSnow.git twinklesnow cd twinklesnow wget http://labs.cybozu.co.jp/blog/mitsunari/2007/07/24/js/sha1.js -O static/sha1.js wget http://flesler-plugins.googlecode.com/files/jquery.scrollTo-1.4.2-min.js -O static/jquery.scrollTo-min.js cp data/config-example.rb data/config.rb vi data/config.rb
# Twitterアカウント
@account = ''
# クライアントにログインするためのパスワードをSHA-1でハッシュ化したもの
@password = ''
# WebSocketの設定
# この情報は外部に公開される (Webサーバで認証を行えば隠すことは可能)
@web_socket = {
:host => '',
:port => 1,
}
@tokyo_tyrant = {
:host => 'localhost',
:port => 1978,
}
@oauth = {
:consumer_token => '',
:consumer_secret => '',
:access_token => '',
:access_secret => '',
}
# im.kayac.comを利用したプッシュ通知設定
# プッシュを利用しない場合はnilを設定しておく
# @im_kayac = nil
@im_kayac = {
:user_name => '',
:handler => '',
:secret_key => '',
}
# ブロックに関する設定
@block = {
# ここで設定した語を含むツイートは表示されない
:words => [
"word1",
"word2",
],
}
# ユーザを振り分けタブ設定
@tabs = [
# 先頭のタブは2番目以降のどれにも当てはまらないユーザが集められる特殊なタブ
# usersは無視される(が、削除するとエラーになる)
{ :name => 'timeline', :users => [], },
# usersに記述されたユーザがタブに振り分けられる
{
:name => 'tab',
:users => [ 'user1', 'user2', ],
},
]
以下のページからスクリプトをダウンロードしてstatic/jquery.mousewheel.min.jsとして配置します。
また、Webサーバの設定で適当なドメインのルートにtwinklesnow/staticを割り当てておきます。
実行
サーバを起動するには以下のコマンドを実行します。
ruby chirp.rb
ライセンス
MITライセンスとしておきます。
リンク
利用しているライブラリの一覧です。
- eventmachine
- em-http-request
- em-websocket
- oauth
- twitter-stream
- Erubis
- jQuery
- jquery.mousewheel
- jquery.scrollTo
- sha1.js
- TokyoTyrant
