TwitterのDMおうむ返ししてみる


Twitter APIを使う練習として、DMで受け取ったメッセージをそのままおうむ返しするbotを作ってみたよ。使用言語はJavascript(Node.js)です。

1 準備

1-1 bot用Twitterアカウントを作る

自分のTwitterアカウントにこれから作るおうむ返しbotを仕込むと、すべての友達からのDMにおうむ返ししちゃうので専用アカウントを作ったほうがいいと思う。

1-2 Twitter APIを使う準備

APIを使うためには、https://dev.twitter.com/ の下部メニューの Manage Your Apps ってのでアプリケーション作成が必要らしいよ。いろいろな人がこの辺のやり方は書いてくれているので、ここでは簡単に。

  1. Create New App を押してアプリケーション作成(Website や Callback URL はとりあえず適当でOK)
  2. Permissions を Read, Write and Access direct messages に変更
  3. Keys and Access Tokens の Create my access token を押して自分用のアクセストークンを取得

手順3で表示される、Consumer Key (API Key), Consumer Secret (API Secret), Access Token, Access Token Secret は後で使うのでメモっておきましょう。

2 twitter npm パッケージを入手

プログラムを書く前に必要なパッケージを入手します。といっても下記を実行するだけ。
npm install twitter

3 プログラムを書く

あとは動くように書いてみる。

echo.js
var Twitter = require('twitter');

var twitter = new Twitter({
    consumer_key:        'きやメ',
    consumer_secret:     'うつモ',
    access_token_key:    'つをっ',
    access_token_secret: 'す書た',
});

twitter.get('account/verify_credentials',
            { include_entities: false, skip_status: true },
            function (error, info, response) {

    if (error) {
        throw error;
    }

    var myid = info.id;

    twitter.stream('user', function (stream) {

        stream.on('data', function (tweet) {
            var dm = tweet && tweet.direct_message;

            if (dm && dm.sender.id != myid) {
                // if dm from others, echo back to the sender
                send_dm(dm.sender.screen_name, dm.text);
            }
        });

        stream.on('error', function (error) {
            throw error;
        });

    });

});


function send_dm(screen_name, text) {
    console.log('sending dm to %s (message: %s)', screen_name, text);

    twitter.post('direct_messages/new',
                 { screen_name: screen_name, text: text },
                 function (error, tweet, response) {

        if (error) {
            throw error;
        }
    });
}

中身はStreaming APIを使って他人からのDMを拾って、送信元の人へDMでおうむ返しするようにしたよ。
Streaming APIは自分から送ったDMも拾っちゃうので、他人からのってチェックをしないと、自分のDMを自分でおうむ返しすることになって、ぐるんぐるん回っちゃうよ@@

4 動かしてみる

node echo.js

って実行して誰かからDMを送ってもらう。と、おうむ返ししたよね。めでたしめでたし。

ではまたね。