RubyでTwitterのBOTを作る
前置き
9月中旬に無事固定回線が開通して人権を獲得したこともあり、同月の末から事務所にサーバやPCを集約させていたのですが、
- エンコードなどの時間のかかる作業をやっていると作業の終了を通知させたい
- 今更メール運用という時節でもない(基本的に読まないので未読が1万通以上ある)
という話を知人としていたところ「BotでTwitterに吐かせれば良いじゃん?ついでにあふれがちな録画領域の使用量の監視もさせると便利だと思う」という結論になり、それもそうだなとTwitter Botを作って10月の頭*1から運用していました。
しかしその後別件で作業時にファイルシステムごと壊してしまい*2放置していたところ、
案の定ディスク容量が溢れて派手に録画に失敗する*3
という闇堕ちしかねない状況に陥ったので反省して再作成することにしました。
以下、作業メモです。
環境の準備
RubyとTwitter Gemを導入する。CentOSのRubyパッケージではバージョンが古くTwitter Gemが使えないため、自分でビルドすること。
Install Ruby
# wget https://cache.ruby-lang.org/pub/ruby/2.2/ruby-2.2.3.tar.gz
# ./configure
# make && make install
# which ruby /usr/local/bin/ruby # which gem /usr/local/bin/gem # ruby -v ruby 2.2.3p173 (2015-08-18 revision 51636) [x86_64-linux]
Install Twitter Gem
# gem install twitter
# gem list twitter *** LOCAL GEMS *** twitter (5.15.0)
トークンの発行
APIを叩く際に必要なトークンを発行する。
Twitterアカウントの作成
適当な名前でアカウントを作成する。メールは本アカウントと分けておいたほうが良いかもしれない。
Twitter developersへログイン
アプリケーションの作成
情報は適当で良い。あとで修正することも可能だけど自分用なのでどうせ見ない。
Twitter Application Management
アクセストークンの取得
上記で作成したアプリケーションを開き、Detailsタブの"Application Settings"の項目の"Consumer Key (API Key)"から"manage keys and access tokens"をクリックする。
必要なのは以下の4つ。
- "Application Settings"に記載
- consumer_key
- consumer_secret
- "Your Access Token"に記載
スクリプトの作成
とりあえずはシェルや他スクリプトから呼び出せれば良いのでTwitterに引数をぶん投げる形にしました。
#! /usr/local/bin/ruby require "twitter" client = Twitter::REST::Client.new( consumer_key: "YOUR_CONSUMER_KEY", consumer_secret: "YOUR_CONSUMER_SECRET", access_token: "YOUR_ACCESS_TOKEN", access_token_secret: "YOUR_ACCESS_TOKEN_SECRET", ) client.update("#{ARGV[0]}")
テスト
# tw.rb "@kirinetter 投稿テストです"
mentionでスマホやPCに通知が来ればOKです。
補記
- 同一文言で連続投稿すると弾かれる
- APIの制限があるので15秒程度間隔を開けて投稿したほうがよい
- 調子に乗って片っ端からmention投げてると読まなくなるので基本はTLに投げて注意が必要なものだけ通知にするなどの工夫が必要
- 個人用なら鍵をかけておいたほうが良いかも
- 定期的に見るので可愛いアイコンにしておくと和みます