xmpp4r + google talk bot (en2ja/ja2en) で webster もどき

最近 gtalk translator bot を使って辞書を引く回数が増えてきたのですが、Mac OSXでは専用のクライアントがないのでウェブインタフェースを使っているのですが、ポップアップしたウィンドウがすぐにどこかに行ってしまいイライラすることが多いので、ターミナルから gtalk に簡単にアクセスできるツールがないかと色々探したのがみつかりませんでした。Ruby でなにかできないかと色々見ていたら xmpp4r を使うと出来そうだという事がわかりました。xmpp4r に付属の example ファイル(client.rb)とmonogiki のコードを参考にさせて頂き、適当なものを作ってみました。せっかくなのでこっそり公開しておきます。検索結果の表示の処理とかちょっとおかしいのでまだまだ直すべきところがあります。もちろん無保証です。ターミナルは utf-8 にしてます。
webster は、Webster's dictionary のオンライン版で大学とかだとUNIXに仕込まれていることがあるようです。これはたしか英英辞典だったと思うのですが、gtalk を使えば en2ja, ja2en だけでなく、ar2en, de2en, de2fr, el2en, en2ar, en2de, en2el, en2es, en2fr, en2it, en2ko, en2nl, en2ru, en2zh, es2en, fr2de, fr2en, it2en, ko2en, nl2en, ru2en, zh2en等の色々な言語の辞書が無料で使えます。すばらしい!しかも辞書を引いた履歴が Gmail の "Recent Conversations" に残ります(これはこれであとで自分で統計をとれるようにしたいところ)。
ところで今思いつきましたが、en を媒介としてメッセージを中継してやれば色々な日本語対応辞書が出来そうですね。fr2en2ja とか。

#!/usr/bin/env ruby

require 'xmpp4r/Client'
include Jabber

class GtalkClient
  def initialize(jid, pass, target_jid)
    puts "now connecting..."

    @client = Client::new(JID::new(jid))
    @client.connect
    puts "connected!"

    @client.auth(pass)
    puts "authenticated!"

    puts "hit 'exit' or 'quit' to escape"

    @client.add_message_callback do |msg|
      puts "#{msg.body.toutf8}" if msg.type != :error
    end

    @quit = false
    while not @quit do
      print "> "
      $defout.flush
      line = gets
      @quit = true if line.nil?
      if not @quit
        arg = line.to_s.chomp

        case arg
        when 'exit'
          @quit = true
        when 'quit'
          @quit = true
        else
          message = Jabber::Message.new(target_jid, arg).set_type(:chat)
          @client.send message
          $defout.flush
        end
      end
    end
    puts "Goodbye!"
    @client.close
  end
end

if __FILE__ == $0
  CONFIGFILE = "~/.gtalkrc"
  load CONFIGFILE

  dict = ARGV.shift
  if dict == "en2ja" || dict == "ja2en"
    target_jid = "#{dict}@bot.talk.google.com" 
  else
    target_jid = "en2ja@bot.talk.google.com"
  end

  gc = GtalkClient.new(MYJID, MYJIDPASSWD, target_jid)
end

.gtalkrc はこんな感じに。permission に気をつけましょう。 

MYJID="user@gmail.com"
MYJIDPASSWD="password"

動作例

now connecting...
connected!
authenticated!
hit 'exit' or 'quit' to escape
> beer
> ビール

> beef
> 牛肉
> exit
Goodbye!