HYLOGICS

今後は各分室にコンテンツを移して、ここは雑記や暮らしを中心としたライフログ的な何かにしていく予定です。

RubyでTwitterのBOTを作る

f:id:kirine:20151120153839p:plain

前置き

9月中旬に無事固定回線が開通して人権を獲得したこともあり、同月の末から事務所にサーバやPCを集約させていたのですが、

  • エンコードなどの時間のかかる作業をやっていると作業の終了を通知させたい
  • 今更メール運用という時節でもない(基本的に読まないので未読が1万通以上ある)

という話を知人としていたところ「BotTwitterに吐かせれば良いじゃん?ついでにあふれがちな録画領域の使用量の監視もさせると便利だと思う」という結論になり、それもそうだなとTwitter Botを作って10月の頭*1から運用していました。

しかしその後別件で作業時にファイルシステムごと壊してしまい*2放置していたところ、

案の定ディスク容量が溢れて派手に録画に失敗する*3

という闇堕ちしかねない状況に陥ったので反省して再作成することにしました。

以下、作業メモです。

環境の準備

RubyTwitter Gemを導入する。CentOSRubyパッケージではバージョンが古く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 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 投稿テストです"

f:id:kirine:20151120151351p:plain

mentionでスマホやPCに通知が来ればOKです。

補記

  • 同一文言で連続投稿すると弾かれる
  • APIの制限があるので15秒程度間隔を開けて投稿したほうがよい
  • 調子に乗って片っ端からmention投げてると読まなくなるので基本はTLに投げて注意が必要なものだけ通知にするなどの工夫が必要
  • 個人用なら鍵をかけておいたほうが良いかも
  • 定期的に見るので可愛いアイコンにしておくと和みます

参考

rubyでtwitterのbotを実装する(第5世代のやり方) - Qiita

TwitterのAPIを使用するために必要なキーを取得する手順 - Hello API

*1:うめ展に行く前の話です

*2:詳細は割愛しますがバックアップが壊れていてリストアに失敗しました

*3:10番組くらい録り損ねました。自業自得とはいえ辛い。