3 分で出来る Twitter BOT
BOT とは Twitter の自動ポストプログラムのことです。主にキャラクターや偉人の名言集を定期的につぶやくものが多いようです。私はピーター・ドラッカーの BOT をフォローしているのですが、心に響く名言がぽつりぽつり表れてとても面白いです。(^^)
ふと「この BOT のしくみは日々の英単語学習に生かせるのでは?」と思い、以前から作成していた英単語帳を Twitter で定期的につぶやく BOT スクリプトを ruby で作成してみました。Ubuntu 9.04 + ruby 1.9 + twitter gem 0.6.15 の環境で動作確認しています。
■インストール(ruby, rubygems, twitter gem)
$ sudo apt-get install ruby1.9 rubygems1.9 $ sudo ln -s /usr/bin/ruby1.9 /usr/bin/ruby $ sudo gem install twitter $ gem list -d twitter *** LOCAL GEMS *** twitter (0.6.15) Author: John Nunemaker Rubyforge: http://rubyforge.org/projects/twitter Homepage: http://github.com/jnunemaker/twitter Installed at: /var/lib/gems/1.9.0 wrapper for the twitter api
$ cat kyagi_ew_bot.rb #!/usr/bin/ruby $LOAD_PATH.push("/usr/lib/ruby/1.9.0/xmlrpc/") require 'rubygems' require 'twitter' # 辞書ファイル dict="/home/kyagi/prv/english/dict.org" # ポストする間隔 period=600 # アカウント名とパスワード username='Twitter アカウント' password='Twitter アカウントのパスワード' httpauth = Twitter::HTTPAuth.new(username, password) client = Twitter::Base.new(httpauth) File.open(dict) do |file| # org-mode の英単語帳のフォーマットに合わせてちょっとだけパースする while line = file.gets if (line =~ /\*/) header = line.split(/ /) message = header[1 .. -2] line = file.gets message.push(line) message.push(header[-1]) client.update(message.join.to_s) sleep period end end end $ ruby kyagi_ew_bot.rb
■単語帳ファイル
$ head /home/kyagi/prv/english/dict.org * tied up :20090624: - She is so tied up with work that she can't go out for lunch. * skyscraper :20090624: - There are numerous skyscrapers along the high way. * pull together :20090621: - By pulling together, they were able to finish the work. * regime :20090621:
■動作確認
kyagi_ew_botという新しい BOT用 のアカウントを作成してこの BOT プログラムから単語帳のエントリを 10 分間隔で流すようにしています。メインのアカウントからこのアカウントをフォローすれば完了です。これで自分で作成した英単語を Twitter を通して復習できるようになりました。とても便利で気に入っています。(^^)
上の例では私の英単語帳のフォーマットをパース/加工して出力していますが、普通に「名言ファイル」を「一行一言」で作成すればそのまま puts すれば OK です。IO.readlines で配列に格納したあと rand などでランダムに出力を生成してもいいと思います。
■その他
$LOAD_PATH を追加しているのは base64.rb にパスを通すためです。以下のエラーが出たからです。デフォルトで /usr/lib/ruby/1.9.0 配下にはリカーシブで通っているかなと思うと違うみたいです。
$ ruby kyagi_ew_bot.rb /var/lib/gems/1.9.0/gems/oauth-0.3.6/lib/oauth/helper.rb:2:in `require': no such file to load -- base64 (LoadError) (...snip...) $ ruby -e '$LOAD_PATH.each do |x| puts x; end' | grep '/usr/lib/' /usr/lib/ruby/vendor_ruby/1.9.0 /usr/lib/ruby/vendor_ruby/1.9.0/i486-linux /usr/lib/ruby/vendor_ruby /usr/lib/ruby/1.9.0 /usr/lib/ruby/1.9.0/i486-linux /usr/lib/ruby/1.9/i386-linux