2009年12月1日火曜日

(Code: sh) gtrans

Google Translate を利用して露英翻訳するシェルスクリプトです。
#!/bin/sh

if [ -z "$1" ] ; then
  echo "Error: need an arg (Russian phrase)" >&2
  exit 1
elif [ $# -gt 1 ] ; then
  echo "Error: too many args. need just an arg (Russian phrase)" >&2
  exit 1
fi
TEXT="$1"

UA='Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0)'
curl -Ss -m 10 -A "$UA" http://translate.google.com/ -d js=n -d prev=_t -d hl=en -d ie=UTF-8 -d text="$TEXT" -d file= -d sl=ru -d tl=en | awk 'NR == 8' | sed 's/.*<span id=result_box class="short_text"><[^>]\+>\([^/]\+\)<\/.*/\1/' | xmlstarlet unesc

  • curlで翻訳したいフレーズをPOST

  • awkとsedで結果をパース

  • xmlstarletで文字参照("&#39;"みたいなの)を解除

UserAgentがcurlだと拒絶される、空だと翻訳結果がKOI8-Rで返ってきてUTF-8の環境でパースしづらくなるのでIEに偽装しています。UAがIEやFirefoxだとUTF-8で結果が返ってくるみたい。


テスト翻訳
$ ./gtrans 'здравств'
hello

$ ./gtrans 'я из Японии'
I'm from Japan

$ ./gtrans 'только хорошие умирают молодыми'
only the good die young

$ ./gtrans
Error: need an arg (Russian phrase)

$ ./gtrans a b
Error: too many args. need just an arg (Russian phrase)
まずまず動いた!LANG=ja_JP.UTF-8のシェルでテスト翻訳しました。
ロシア版ポトリスのチャット自動翻訳に向け、ググル先生翻訳へPOSTするデーターの確認用に書いてみました。


環境

OS: Linux
debian-lenny