Node.jsで作るTwitter通知アプリケーション〈Node.jsシリーズ vol.3〉
Node.jsの基本を順を追って展開していくこの連載。
前回まではNode.jsのインストールから簡単なモジュールの作成まで、基本的なステップをたどってきました。
今回からは中級編として、いろいろと実践的なアプリケーションを作っていきたいと思います。
Node.jsでストリーミングデータを扱おう
Node.jsの魅力は、なんといってもリアルタイム処理への強さ。
その手軽さを体感するべく、Twitterのツイートをリアルタイムで受け取れるTwitter Streaming APIをNode.jsで扱ってみましょう。
Twitter Streaming APIを使う
Twitter Streaming APIでは、Public streams(Twitter全体)、User streams(特定ユーザー)、Site streams(複数ユーザー)……といったいくつかの種類に分けてJSON形式のツイートデータを取得することが出来ます。
詳しくは、Twitter社のドキュメントを参照してください。
このAPIを使うためには、Twitter Application Managementにてアプリ登録の手続きが必要です。
必要事項を入力して登録が完了すると、APIの利用に必要な「Consumer Key」「Consumer Secret」そして「Access Token」「Access Token Secret」が発行されます。
自分宛のリプライをリアルタイムに受け取る
冒頭でも書いたTwitter Streaming APIのPublic Streamsから「statuses / filter」を取得してみたいと思います。
「statuses / filter」の詳しいパラメータについては、以下のドキュメントを参照してください。
Public API: POST statuses/filter
Twitter Streamimg APIを使用するためにはOAuthによる認証、そしてHTTPリクエストが必要です。
ですが、ゼロからその処理を書き起こすのは大変なので、npmで公開されている「twitter」モジュールを使ってAPIにアクセスします。
「twitter」は、npm install twitter
でインストールすることができます。
インストールが終わったら、早速コードを書いてみましょう。
TwitterにOAuth認証でログインし、タイムライン上のつぶやきのストリームから自分のアカウント名を含むツイートをフィルターして表示します。
reply_sample.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
// twitterモジュールを読み込み
var twitter = require('twitter');
// アプリ登録時に取得したkeyを入れてOAuth認証し、初期化
var client = new twitter({
consumer_key: '【Consumer Keyの内容】',
consumer_secret: '【Consymer Secretの内容】',
access_token_key: '【Access Token Keyの内容】',
access_token_secret: '【Access Token Secretの内容】'
});
// Public APIのstatuses/filterで取得したタイムラインを、自分のアカウント名を含む文字列でフィルターする
client.stream( 'statuses/filter', { track : '@【アカウント名】' }, function( stream ) {
// フィルターされたデータのストリームを受け取り、ツイートのテキストを表示する
stream.on( 'data', function( data ) {
var text = data.text; // ツイートのテキスト
var textCleaned = text.replace( /@【アカウント名】 /g, "" ); // アカウント名は不要
console.log( textCleaned );
});
});
node reply_sample.js
で書いたプログラムを走らせると、コンソールが待機状態になります。
試しに、自分で自分宛てにリプライを飛ばしてみると……
自分宛てのツイートがリアルタイムにコンソールに表示されました!
リプライをニュース速報のように表示する
Growlでデスクトップ通知を飛ばす
せっかくリアルタイムにリプライを受け取れるので、かっこよく表示してみましょう。
デスクトップ通知プラットフォーム「Growl」を使うと、簡単にデスクトップ通知を実装することができます。
npmには、Node.js上からGrowlを操作できるgrowlモジュールがあります。
npm install growl
でインストールしましょう。
さらに、長靴編集所さん開発のニュース速報風GrowlテーマSokuho 1.0をインストールすると、テレビのニュース速報テロップのような見た目になってぐっと雰囲気がでます。
受け取ったリプライをGrowlへ流す
先ほど書いたコードをベースに、今度は受け取ったリプライをコンソールではなくGrowlに流すように書き換えてみましょう。
reply_sokuho.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
var twitter = require('twitter'); // twitterモジュールを読み込み
var growl = require('growl'); // growlモジュールを読み込み
// アプリ登録時に取得したkeyを入れて初期化
var client = new twitter({
consumer_key: '【Consumer Keyの内容】',
consumer_secret: '【Consymer Secretの内容】',
access_token_key: '【Access Token Keyの内容】',
access_token_secret: '【Access Token Secretの内容】'
});
// タイムラインから、自分のアカウント名を含む文字列でフィルターする
client.stream( 'statuses/filter', { track : '@【アカウント名】' }, function( stream ) {
// フィルターされたデータのストリームを受け取り、ツイートのテキストを表示する
stream.on( 'data', function( data ) {
var text = data.text; // ツイートのテキスト
var textCleaned = text.replace( /@【アカウント名】 /g, "" ); // アカウント名は不要
growl( textCleaned ); // ツイートテキストをGrowlへ通知
});
});
node reply_sokuho.js
で起動したら、自分宛にリプライを飛ばしてみましょう。
せっかくなので、ニュース速報っぽい文体で。
すると……
デスクトップにツイートした内容がニュース速報風に表示されました!
Growl以外にもさまざまな出力先を指定することで、Twitterのツイートをトリガーにしたリアルタイム駆動型のアプリケーションが簡単に作れます。
リアルタイム通信の面白さを体感したところで、次回はSocket.IOを使ったリアルタイム通信に挑戦してみましょう!

Tech Blog
(編集部)
株式会社リクルートライフスタイルのTech Blog編集部です。いま流行りのTechネタやちょっと使えるTipsなどをお届けしていきます。