CUI Twitterクライアント"Tw"のご紹介
この記事は UEC Advent Calendar2015 の8日目の記事です
Twitterクライアント"Tw"
普段からTwitterを利用している方々はお気づきのように、Twitterへのアクセスには実に多様なクライアントが利用されています。しかしながら、その多くはGUIクライアントで、操作の自動化などに向きません。
そこで今回は、shokai氏によるコマンドラインで動かせるTwitterクライアント"Tw"をご紹介します。 Tw - Twitter client on Ruby.
導入
TwはRubyで動作します。まずはRubyとgemを導入しましょう。パッケージ管理コマンドは適宜読み替えてください。さらにsudoが必要かもしれません。
% yum install ruby gem
Rubyとgemのバージョンを確認します。
% ruby -v # 1.8.7 以上が必要 % gem -v # 1.8.0 以上が必要
"tw" gemをインストールします。依存関係にあるほかのgemも同時にインストールされます。
% gem install tw
これで導入は完了です。
簡単な操作
導入したTwを端末から簡単に動かしてみましょう。コマンドの実行例をいくつか示します。初めてコマンドを実行した時は、他のTwitterクライアントと同様のOAuth認証をするよう促されるので画面の指示に従ってください。
User streamsをstatus付きで取得(自動で更新されます)
% tw --stream --status_id
ツイート
% tw "hello" % tw --yes "world" # 本当にツイートをするかの確認を省略する場合 % echo "腹が減った" | tw --pipe # パイプを用いる場合、確認は省略される
favやRTは各ツイートに割り当てられたstatus(18桁の数字)を使って対象のツイートを指定します。
% tw --fav=474031849790898177 % tw --rt=474031849790898177
DMを送るときは宛先を指定します。
% tw --dm:to=nkhrlab "nyaa"
その他の使い方はこちらを参照するか
% tw --help
してください。
設定ファイル
~/.tw.ymlがTwの設定ファイルです。アカウントごとにConsumer keyやAccess tokenが記録されています。twコマンドが実行されると、この設定ファイルのConsumer key及びAccess tokenを用いて操作が行われます。
簡易なbot
Twはコマンドライン上で動作するのでシェルスクリプトによって容易に操作を自動化できます。ここでは、最も簡単な例として、毎時0分に、すでに用意されたツイートの中からランダムに1つを選びツイートするbotの例を掲載します。
まずツイートをファイル名として用意します。ここでは、ルートディレクトリ直下にディレクトリstarを作成しそこにツイートを用意しています。
% cd / % mkdir star % cd star % touch Aldebaran Betelgeuse Capella Pollux Procyon Rigel Sirius % ls Aldebaran Betelgeuse Capella Pollux Procyon Rigel Sirius
ここで、sortコマンドのバージョンを確認しましょう。
% sort --version
次に、定期的にツイートさせるためcrontabの設定ファイルを編集します。
% crontab -e
sortコマンドのバージョンが6.0以上の場合は次の1行を追記します。
0 * * * * ls /star/ | sort -R | head -1 | tw --pipe
そうでない場合は次の1行を追記します。
0 * * * * ls /star/ | while read x; do echo -e "$RANDOM\t$x"; done | sort -k1,1n | cut -f 2- | head -1 | tw --pipe
sortコマンドの-Rオプションは、ソートではなくランダムな順番に表示するオプションで、バージョン6.0以降で実装されています。また、ここでは毎時0分にツイートするよう設定していますが、コマンドの最初の" 0 * * * * "という部分を変更するとツイートの頻度を調整できます。
これで定期的にツイートするbotができました。あとはタイムラインを見て実際にツイートがされていることを確認するだけです。今回は用意したツイートが少ないので、ツイートが重複して実際にはツイートされないことが多いかもしれません。
今回は単なるbotを作りましたが、このようにtwはパイプを用いたデータの受け渡しが容易なので、もっと様々な用途、例えばサーバの死活監視、室温や日照時間や利用した電力量の計測結果の報告などの広い用途に使えると考えます。