【Gぷろ! / Dash Button / Node.js】地震が起こったら(Amazon DashButtonが押されたら)、特定のツイートをリツイートする。

クソみたいな発想が頭をよぎったので早速開発開始。
リツイート解除が苦労したのでGぷろ!ネタにした。

下準備

・npm環境を用意する。
 ここでは構築について触れないので他を当たって欲しい。
・作業用ディレクトリを用意する。
 今回は、~/nodejs/adb/dashbutton-retweetで行う。
・パッケージをインスコする。
 ・npm init でpackage.json作って
 ・npm install twitter –save でTwitterパッケージインスコして
 ・npm install node-dash-button –save でnode-dash-buttonパッケージインスコする。

example code

解説

1 : リツイートを行いたいツイートの内部ID。

今回は、このツイートをリツイートする。


内部IDは、URL(https://twitter.com/ayana_take/status/162076119531667457)のこの部分(162076119531667457)。

2 : ダッシュボタンのMACアドレスを取得する。

作業用ディレクトリにいる状態で、sudo node node_modules/node-dash-button/bin/findbuttonを実行する。
ダッシュボタンを押下して出てきたMACアドレスを拾う。
ここで注意することがあって、無線LANに接続されている全てのパケットを拾うので、何回かダッシュボタンを押してarpパケットを発してるデバイスのMACアドレスを取ると良い。
ルータによってだが、ダッシュボタンのパケットを取れない物があるため注意。

その後、コードにMACアドレスを記述する。

3 : Twitter APIキーを入力する。

ここで取得した認証情報諸々を記述する。
細かい説明は省かせてもらう。

4 : リツイートを行う関数を定義する。

Node.jsはノンブロッキング処理のため、パッケージを使わない限り(?)非同期処理を行う。
音色は、Node.jsの知識が乏しいため、関数を複数回呼び出す形にする。

5 : 2で拾ってきたMACアドレスを記述する。

ここでmacAddressにMACアドレスが格納されるため、対象のダッシュボタンのMACアドレスとの比較を行う。
ここの条件文を増やせば、複数のダッシュボタンを一つのアプリケーションで捌けるので非常に便利。

6 : リツイート済みか調べる。

1で指定したツイートが既にリツイートしているものか調べる。
リツイートしていた場合、その後のtwitterAccess.post(“statuses/destroy/”〜でリツイートが解除される。
twitterAccess.get(“statuses/show/”〜という処理についてだが、
リツイートは標準のツイートと異なり、RetweetIdなるものが生成される。
そのRetweetIdをdestroy(削除)することによりリツイートが解除される。
しかし、直接RetweetIdを引っ張り出してくることは不可能のため、include_my_retweet: 1というパラメータを付与して、それを引っ張り出してくる。

その後、RetweetIdを削除する処理を行う。

7 : リツイートを行う。

ここに来てようやくリツイートを行う。
4で作成した関数を利用して、リツイートを行い、結果をconsole.logで表示させる。

まとめ

・色々工夫すればStreamingAPIで地震速報が発表されるたびにリツイートされるアプリケーションを作れるかもしれない。(ロックされないとは言っていない)
・もっとマシな使い方があると思う。
・Node.jsもっと勉強したい。
・Node.jsはいいぞ。

%d人のブロガーが「いいね」をつけました。