Node.js
Twitter
Slack

ツイートを監視してSlackへ投稿する

事のきっかけ

HTC VIVEがほしい!
バーチャル受肉がしたい!

しかし、2018年6月現在
同じような考えの人が大勢いるようでどこも品薄入荷待ち状態のVive

ただ、秋葉原のPCショップやドスパラのツイートをみていると不定期で
店舗在庫を入荷しているようなのでそれをいち早くキャッチし店舗にいって
購入してやろうとおもったわけです。

実装

nodejsを使って行いました。

事前にTwitterAPIのトークンとSlackのトークンを取得してきます。
ここを参考にしました。
Twitter REST APIの使い方
Slack API 推奨Tokenについて

必要なパッケージはreqiestとtwitter

npm install request
npm install twitter
package.json
{
  "name": "twtoslack",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC",
  "dependencies": {
    "request": "^2.87.0",
    "twitter": "^1.7.1"
  }
}
app.js
const Twitter = require('twitter');
const request = require('request');

const client = new Twitter({
  consumer_key: '******',
  consumer_secret: '******',
  access_token_key: '******',
  access_token_secret: '******'
});

const params = {
    language:'ja', // 取得言語を日本語限定
    track: 'vive', // 検索ワード vive
}
const stream = client.stream('statuses/filter', params);

stream.on('data', function(event) {
    // RTは除去
    if(event.text.slice(0,2) !== 'RT')
        post(event)
});
stream.on('error', function(err) {
    console.error(err);
});

function post(event) {
    request.post('https://slack.com/api/chat.postMessage',
        {
            form: {
                token: 'SLACK-APIのトークン',
                channel: '#general', //送信先チャンネル名
                username: event.user['name'],
                text: event.text,
            }
        });
}

やっていることは単純でTwitterのStreamAPI statuses/filterを使って
全ユーザのツイートをリアルタイムで取得してRT以外のものを
Slackの指定したチャンネルにポストしています。

RTを除去しているのは同じようなツイートが大量にながれるためです。
ちょうどVIVEのワイヤレスが販売中止になった時期だったのでなかなか荒れました。

結果

VIVE購入の意志を決めて次の日に作って監視してたら
ちょうど某PCショップが店舗限定在庫を入荷していたので
難なくViveを入手することに成功しました。

twtoslack.png

次はトラッカーの方かな..

ぜひツイッターで各店舗の動向を監視してバーチャル受肉を行いましょう!