2011-02-20
google翻訳を利用した英和-和英辞書コンソールコマンド
コマンドライン上で簡易的に英単語を調べるのに使います。
ソースコードの変数名で悩んだときとかに使いたくて作りました。
hpricotをgemでインストールすれば使えると思います。
ただし、ruby1.9だと英和が出来ません。なんかhpricotにおけるutf8の処理に問題があるようです(TODO:あとで調べる)。
【使い方とか】
$ rvm list
rvm rubies
ruby-1.8.7-p330 [ x86_64 ]
ruby-1.9.2-p136 [ x86_64 ]
$ rvm 1.8.7
$ ruby translator.rb こんにちわ
Hello
$ ruby translator.rb hello
こんにちは
$ rvm 1.9.2
$ ruby translator.rb こんにちわ
Hello
$ ruby translator.rb hello
/Users/hoge/.rvm/gems/ruby-1.9.2-p136/gems/hpricot-0.8.3/lib/hpricot/builder.rb:9:in `gsub': invalid byte sequence in UTF-8 (ArgumentError)
from /Users/hoge/.rvm/gems/ruby-1.9.2-p136/gems/hpricot-0.8.3/lib/hpricot/builder.rb:9:in `uxs'
from /Users/hoge/.rvm/gems/ruby-1.9.2-p136/gems/hpricot-0.8.3/lib/hpricot/tag.rb:139:in `to_s'
from /Users/hoge/.rvm/gems/ruby-1.9.2-p136/gems/hpricot-0.8.3/lib/hpricot/traverse.rb:160:in `block in inner_text'
from /Users/hoge/.rvm/gems/ruby-1.9.2-p136/gems/hpricot-0.8.3/lib/hpricot/traverse.rb:160:in `map'
from /Users/hoge/.rvm/gems/ruby-1.9.2-p136/gems/hpricot-0.8.3/lib/hpricot/traverse.rb:160:in `inner_text'
from /Users/hoge/.rvm/gems/ruby-1.9.2-p136/gems/hpricot-0.8.3/lib/hpricot/traverse.rb:160:in `block in inner_text'
from /Users/hoge/.rvm/gems/ruby-1.9.2-p136/gems/hpricot-0.8.3/lib/hpricot/traverse.rb:160:in `map'
from /Users/hoge/.rvm/gems/ruby-1.9.2-p136/gems/hpricot-0.8.3/lib/hpricot/traverse.rb:160:in `inner_text'
from /Users/hoge/.rvm/gems/ruby-1.9.2-p136/gems/hpricot-0.8.3/lib/hpricot/elements.rb:108:in `block in inner_text'
from /Users/hoge/.rvm/gems/ruby-1.9.2-p136/gems/hpricot-0.8.3/lib/hpricot/elements.rb:108:in `map'
from /Users/hoge/.rvm/gems/ruby-1.9.2-p136/gems/hpricot-0.8.3/lib/hpricot/elements.rb:108:in `inner_text'
from translator.rb:40:in `block in <main>'
from /Users/hoge/.rvm/rubies/ruby-1.9.2-p136/lib/ruby/1.9.1/net/http.rb:627:in `start'
from /Users/hoge/.rvm/rubies/ruby-1.9.2-p136/lib/ruby/1.9.1/net/http.rb:490:in `start'
from translator.rb:36:in `<main>'
【translator.rb】
#!/usr/bin/env ruby #-*- encoding: utf-8 -*- # ruby v1.9 #$KCODE = 'u' # ruby v1.8 require 'rubygems' require 'hpricot' require 'net/http' require 'kconv' if ARGV.length == 0 print "\nUsage : \n" print "#{$0} \"query sentense (Japanese or English)\"\n\n" exit end if ARGV.length>1 print "\nError : \n" print "too many queries\n\n" exit end if ARGV[0] =~ /^[ -~。-゚]*$/ # english query = "langpair=en|ja&text=#{ARGV[0]}" else # japanese query = "langpair=ja|en&text=#{Kconv.kconv(ARGV[0], Kconv::UTF8)}" end Net::HTTP.version_1_2 #proxy_class = Net::HTTP::Proxy( 'proxy.hoge.com', 10080 ) #http = proxy_class.new( 'translate.google.com', 80 ) #http.start { |http| Net::HTTP.start( 'translate.google.com', 80 ) { |http| response = http.post('/translate_t', query) puts Hpricot(response.body).search("#result_box").inner_text.toutf8 }
【参考にさせて頂きました。(というかただの組み合わせ・・・)】