2009年1月23日金曜日

(Code: sh) コンソールから英和・和英

アルク社の提供するWEB英和・和英辞書サービス英辞郎をコンソールから使うシェルスクリプトを
書いてみました。curlでサービスにアクセス、awkやsedでパース、w3mで出力しています。
件のサービスは例文が豊富で愛用しています。

・辞書データーを買うほどヘビーに使わない
・WEBブラウザーを開く手間が惜しい
そんなニッチ用途に。

※2009年9月に、UserAgentが空(curl -A '' )だとALCが無条件に「現在アクセスが集中しております。」と返答する仕様に変わったようです。UserAgentを指定するようにコードを変えました。(2009-10-2)


eijiro
#!/bin/sh

## prog
PROG=`basename $0`

## check cmd
LIST="mktemp curl w3m"
for CMD in $LIST ;do
  TEST_CMD=`which $CMD`
  if [ -z "$TEST_CMD" ] ;then
    echo "$PROG: Error: we need command \"$CMD\"" >&2
    exit 1
  fi
done

## usage
function my_usage {
  echo "usage: $PROG <word>"
  exit 1


## init
### arg
if [ -z "$1" ] ;then
  my_usage
fi
KEY=`echo "$1" |sed 's/ /+/g'`

### dir and file
DIR_TMP=`mktemp -d /tmp/$PROG.XXXXXXXXXX`
FILE_SRC=$DIR_TMP/src
FILE_CUT=$DIR_TMP/cut
FILE_MOD=$DIR_TMP/mod

DIR_HOME="$HOME"/.$PROG
if [ ! -d "$DIR_HOME" ] ;then 
  mkdir "$DIR_HOME"
fi
FILE_CACHE="$DIR_HOME"/"$KEY"

### function
function my_exit {
  #echo $DIR_TMP  ## debug
  rm -r $DIR_TMP
  exit $1
}

### environment
export LANG=ja_JP.UTF-8


## body
if [ -r "$FILE_CACHE" ] ;then
  echo "Warning: cache file exists for \"$KEY\". don't use curl" >&2
  echo "---" >&2
  cat "$FILE_CACHE"
  my_exit 0
fi

UA='Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)'
URL=http://eow.alc.co.jp/"$KEY"/UTF-8/
curl -Ss -m 10 --compressed -A "$UA" "$URL" -o $FILE_SRC
TEST_SRC=$?
if [ $TEST_SRC -ne 0 ] ;then
  echo "$PROG: Error: can't get source $URL" >&2
  my_exit 1
fi

NUMS=(`grep -n '<\/\?li>' $FILE_SRC |awk -F: '{print $1}'`)
awk "NR >= ${NUMS[0]} && NR <= ${NUMS[${#NUMS[*]} - 1]}" $FILE_SRC >$FILE_CUT

sed -e 's/<span class="midashi">/* /g' -e 's/<ol>/<br>/g' -e 's/<\/ol>//g' -e 's/<\/div>/<\/div><br>/g' $FILE_CUT >$FILE_MOD

w3m -dump -T text/html -cols 100 $FILE_MOD |tee "$FILE_CACHE"


## end
my_exit 0
$ eijiro '英和・和英したい言葉'

と実行して使ってます。


このスクリプトを、さらに以下のスクリプト経由で別のターミナル(xterm)に表示して使っています。

x-eijiro
#!/bin/sh

xterm -geometry 100x64+0+0 -bg grey90 -T eijiro -e "eval eijiro \'$@\' 2>&1 |less -m"


スクリーンショット

「置き去り」を和英したときのスクリーンショットです。


$ x-eijiro '置き去り'

と実行しています。改めて思うに"置きざり"はすごくネガティブワードです…


他情報

英辞郎を利用するFirefoxの機能拡張や検索pluginをつくってる方がいらっしゃるみたい。

機能拡張
Mouseover Dictionary
http://maru.bonyari.jp
/mouseoverdictionary/
英辞郎ローカル辞書データー(2,000円)が必要になるようです。

検索plugin
KOMOREBI || blog
http://www.freesia.org/archives/2006/01/firefox.html

アルク社の規約で制限されているため公開を取りやめられたようです。


環境

OS: Linux
debian-lenny