Let's create Node.js Application

Node.jsを使ってTwitter通知アプリケーションをつくろう

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などをお届けしていきます。

NEXT