最近 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!