rubyでWWW::Babelfishっぽいものを作ってみる

Debianのsoap4rのサンプルにbabelfish.rbというのがあったので使ってみた

hoge$ ruby /usr/share/doc/soap4r/examples/sample/soap/babelfish.rb
"bonjour monde "
hoge$ ruby /usr/share/doc/soap4r/examples/sample/soap/babelfish.rb "hello"
"bonjour "
hoge$ ruby /usr/share/doc/soap4r/examples/sample/soap/babelfish.rb "hello" "en_es"
"hola "
hoge$ ruby /usr/share/doc/soap4r/examples/sample/soap/babelfish.rb "hello" "en_ja"
/usr/lib/ruby/1.8/xsd/xmlparser/xmlparser.rb:31:in `parse': not well-formed (invalid token) (XMLParserError)
        from /usr/lib/ruby/1.8/xsd/xmlparser/xmlparser.rb:31:in `do_parse'
        from /usr/lib/ruby/1.8/soap/parser.rb:92:in `parse'
        from /usr/lib/ruby/1.8/soap/processor.rb:39:in `unmarshal'
        from /usr/lib/ruby/1.8/soap/rpc/proxy.rb:236:in `unmarshal'
        from /usr/lib/ruby/1.8/soap/rpc/proxy.rb:175:in `route'
        from /usr/lib/ruby/1.8/soap/rpc/proxy.rb:141:in `call'
        from /usr/lib/ruby/1.8/soap/rpc/driver.rb:178:in `call'
        from /usr/lib/ruby/1.8/soap/rpc/driver.rb:232:in `BabelFish'
        from /usr/share/doc/soap4r/examples/sample/soap/babelfish.rb:16

しばし悩んだが、どうしていいのかわからなかったので

perlのWWW::Babelfishを参考にしようとのぞくと、たしかにWWWなかんじだった
中をのぞくとgoogleがパースが楽そうなんでgoogle
rubyにしてみようとする

#!/usr/bin/ruby
require 'net/http'
require 'kconv'

Net::HTTP.version_1_2
$KCODE='UTF8'

str = ARGV.shift || "hello"
lang= ARGV.shift || "en|ja"
a = Net::HTTP.start('translate.google.com', 80)
b = a.post('/translate_t',"text="+str+"&langpair="+lang+"&hl=en&ie=UTF8&oe=UTF8")
c = b.body.to_s.toutf8
d = c.scan(/textarea [^>]*>([^<]*?)<\/textarea>/)
p d[0].to_s.toutf8

日本語の変換やらで悩んだが、とりあえずでてきた。

hoge$ ruby translate.rb
"こんにちは "
hoge$ ruby translate.rb "I like beer"
"私はビールを好む "
hoge$ ruby translate.rb "I like beer" "en|es"
"Tengo gusto de la cerveza "

ふーむ。なんか冗長なかんじなんだが、、、

あとは、yahooとかbabelfishか

rubyのHTML parserってなんかいいのあるんだろうか、、、