ruby で twitter bot を作る
先月末からしばらく github やら ruby やら twitter API やらをいじってはエントリしていたのは、twitter bot を作りたかったのでその予習をしていたのであった。稼働からしばらく時間が経ってしまったのでちょっと今更感があるが、twitter bot のデビュー作を晒してみようと思う。
アカウント停止のお知らせ
- *2010-01-19 追記
諸事情によりアカウントを停止した。ソースコードなどはそのままにしてあるので、twitter botを作る際の参考資料として役立てていただければ幸いである。
- *追記ここまで
概要
いきさつ
「ラクをしないと成果は出ない」という本がある。ライフハック的なエッセイを見開き2ページで100本集めた本で、かのダンコーガイが絶賛していたことでもおなじみ。発売当時、仕事環境的な理由で技術書よりビジネス本を読みまくっていた私にはストライクな本で、100か条をわざわざテキストファイルに「写経」しては眺めていたりした。
さすがにしばらくして熱は冷めたのだが、今回の「twitter botを作りたい」という欲求と一緒の写経したテキストの存在を思い出し、「名言botなら実装もカンタンだ」とネタに選んだというわけ。
仕様
プロジェクトはGitHubで公開している。「だからソースコード読んでください」、で済ますのもあんまりなので。
一定の間隔で名言をつぶやく。本来は全裸bot(現在規制中)がかつて利用していた「23分毎に呟く」というアルゴリズムを使いたかった…のだが、coreserver の cron は1エントリの最短間隔が1時間という仕様になっている。仕方ないので1時間に1回のエントリを4つ用意して、15分に一度処理するようにしている。
一度つぶやいたあと、次のつぶやき間隔を2時間前後で抽選する…のだが、上記のような仕様のため15分単位に丸められてしまう、というのは悲しいところ。
@rakuseika 宛に mention を飛ばすと、正規表現で最初に match した数字を探す。それが 1 〜 100 の範囲に収まっていればその名言の「ポイント」を、そうでなければランダムで名言を、それぞれ reply する。
実装
利用ライブラリ
主なものは…
- oauth
- rubytter
どちらも gem install **** でインストール可能。制作当初の rubytter (0.9.1) には patch の必要があったのだが、現行のバージョン (0.9.3) ならそのままで問題なく動作する。
oauth / rubytter の使い方は一つ前のエントリにまとめてあるので参照されたい。
coreserver と cron
coreserver の crontab は…
最短動作が1時間に1回
設定変更は web 上のコンパネから
→反映に1時間近くかかる
環境変数は丸裸
/bin/sh で実行する
→直接 hogehoge.rb を叩いたりはできない
…という具合に、いろいろ制限がある。テストに非常に手間がかかるのだが、共用サーバだししょうがないか…さくらに乗り換えちゃおうか…などと考えつつ、本体の ruby スクリプトをキックするためのエントリポイントを用意した。
rakuseikabot
#!/bin/sh
export RUBYLIB=$HOME/local/lib
export GEM_HOME=$HOME/local/lib/ruby/gem
cd $HOME/var/twitter_bot/rakuseika
/usr/local/bin/ruby rakuseika.rb
実行権限をつけておくのを忘れないように。gem の path は去年のエントリでインストールしたものに基づいている。
まとめ
- oauth / rubytter を使うと twitter bot はかなり簡単に作ることができる
- bot なら cron で動作するのが必然だが、coreserver だとそこそこ大変
- 味をしめたので次回作も構想中
twitter bot を作るのは意外と簡単で、思ったより楽しい。しかしもちろん、人気 bot を作るには、何かひとつ光るアイデアがないと難しいだろう。もはや伝説とも言える「全裸bot」を目指すのに、このエントリが一助となれば幸いである。
Links
●kwappa’s rakuseika at master – GitHub
http://github.com/kwappa/rakuseika
http://d.hatena.ne.jp/sugyan/20090822/1250911865
●rubytter と oauth を使う: Kwappa開発室
http://kwappa.txt-nifty.com/blog/2009/10/rubytter-oauth-.html
●Coreserverにrubygems1.3.1をインストールする: Kwappa開発室
http://kwappa.txt-nifty.com/blog/2008/12/coreserverrubyg.html