TwitterアカウントにON,OFF,BLINK,STOPメンションを投げてLEDを点消灯させてみます。

Raspberry Pi + Node.jsでIoTを体験しよう〈Node.jsシリーズ vol.5〉を模倣しました。

概要
  1. Node.js向けのTwitter API ライブラリ “twitter” を利用する。
  2. johnny-fiveを通してArduinoのLED(L13)の点灯制御を行う。
  3. 制御語は下のとおりです。
    [ON] : LED点灯
    [OFF] : LED消灯
    [BLINK] : LED点滅
    [STOP] : LED点滅停止
準備
  1. twitterライブラリのインストール
    $ npm install twitter
  2. twitterアプリケーションのと登録とkeyの取得
    1. Twitter Application Managementを開き「Create Twitter App」をクリックします。
      twitapp1
    2. アプリケーション登録操作が面に遷移するので必要事項を記述します。
      1. Name欄 ユニークな(twitter空間で他と競合しない)名前を設定します。
      2. Description欄 アプリケーションの説明です。何か書いてあればOKです。
      3. Website欄 アプリケーションを動かすwebサイトのURLを記述欄ですが,作成するアプリはURLを持たないので,自分のブログなどのテキトーなサイトのURLを記述します。
      4. Callback URL欄 Website欄と同様にテキトーなURLを記述します。
      5. 2〜4の各欄は入力の有無だけチェックされ,その内容の検証はされませんので”テキトー”に入力してもアプリケーションの登録ができます。

        twitapp2

    3. keyの取得
      1. 「Keys and Access Tokens」タブを開く
      2. ページの下の方にある「Create my access token」ボタンをクリックすと下のような画面に遷移します。
        twitapp3
    4. config.jsファイルの作成
      「Keys and Access Tokens」で取得した consumer key, consumer secret, access token key, acsess token secret を下のフォーマットにコピペしファイル名 config.js で保存します。
      注意)xxxxx keyはアプリケーションのID,xxxxx secretはパスワードに相当するものです。外に漏れて悪意の第三者に渡ると登録アプリケーションを乗っ取られスパムtweet等の踏み台にされるので扱いには注意が必要です。

      module.exports = {
          consumer_key: 'your consumer key',
          consumer_secret: 'your consumer secret',
          access_token_key: 'your access token key',
          access_token_secret: 'your access token secret'
      }
ソースコード

twitter_led.js

var twitter = require('twitter');
var five = require("johnny-five");
var board = new five.Board();

// アプリ登録時に取得したkeyを入れて初期化
var client = new twitter(require('./config.js'));

board.on("ready", function() {
    // Create an Led on pin 13
    var led = new five.Led(13);
    // Public APIのstatuses/filterで取得したタイムラインを、指定のアカウント名を含む文字列でフィルターする
    client.stream( 'statuses/filter', { track : '@your_account' }, function( stream ) {

        // フィルターされたデータのストリームを受け取る
        stream.on( 'data', function( data ) {
            var text = data.text; // ツイートのテキスト
            console.log( text );

            //テキストにマッチするstringがあったら処理
            if ( /\[ON\]/.test(text) ) {
                led.stop();
                led.on();          
            }
            if ( /\[OFF\]/.test(text) ) {
                led.stop();
                led.off();          
            }
            if ( /\[BLINK\]/.test(text) ) {
                led.blink(500);
            }
            if ( /\[STOP\]/.test(text) ) {
                led.stop();
            }
        });
    });
});
運用
  1. twitter_led.jsを稼働させます。
  2. このアプリ(twitter_led.js)のオーナー(登録者)のアカウントへ [ON] とメンションを投げるとArduinoのL13が点灯します。