コマンドラインから英和辞書検索をする!

ふとソースみてて分からない英単語とか調べたくなる時,いっつもexciteやらつかって調べてるんですが,それもめんどくさいので,簡単なものですがコマンドライン上で和英辞書の検索できるもんを作ってみました.
ソースは以下の通り.

#!/usr/bin/perl -w
# 09.08.24, 09.08.28
# rin1024

use utf8;
use strict;
use warnings;
use LWP::UserAgent;
use Dumpvalue;
use XML::Simple;

our $ua = LWP::UserAgent->new;
if (scalar(@ARGV) == 0) {
  error('please input search word!');
}

# btonic
#my $search_url = 'http://btonic.est.co.jp/NetDic/NetDicV09.asmx/SearchDicItemLite?Dic=EJdict&Scope=HEADWORD&Match=STARTWITH&Merge=AND&Prof=XHTML&PageSize=5&PageIndex=0&Word=';
#my $document_url = 'http://btonic.est.co.jp/NetDic/NetDicV09.asmx/GetDicItemLite?Dic=EJdict&Loc=&Prof=XHTML&Item=';

# デ辞書版
my $search_url = 'http://public.dejizo.jp/NetDicV09.asmx/SearchDicItemLite?Dic=EJdict&Scope=HEADWORD&Match=STARTWITH&Merge=AND&Prof=XHTML&PageSize=5&PageIndex=0&Word=';
my $document_url = 'http://public.dejizo.jp/NetDicV09.asmx/GetDicItemLite?Dic=EJdict&Loc=&Prof=XHTML&Item=';

# 検索実行
search_word($search_url, $document_url);

# 単語
sub search_word {
  my($search_url, $document_url) = @_;
  my $search_word = $ARGV[0]; # join('%20', @ARGV);
  my $sxml = XMLin(
    $ua->request(HTTP::Request->new(
      'GET', $search_url.$search_word)
    )->content
  );

  if ($sxml->{ItemCount} == 0) {
    error('search word can not found.');
  }

  foreach my $document(
    ref $sxml->{TitleList}->{DicItemTitle} eq 'ARRAY'
    ? @{$sxml->{TitleList}->{DicItemTitle}}
    :  ($sxml->{TitleList}->{DicItemTitle})
  ) {
    my $search_id = $document->{ItemID};
    my $dxml = XMLin(
      $ua->request(HTTP::Request->new(
        'GET', $document_url.$search_id)
      )->content
    );

    if (length($dxml->{ErrorMessage}) > 30) {
      error($dxml->{ErrorMessage});
    }

    my $word = $dxml->{Head}->{div}->{span}->{content};
    my $str = $dxml->{Body}->{div}->{div};
    utf8::encode($word);
    utf8::encode($str);
    $str =~ s/\t/\n/g;
    print "[[", $word, "]]", $/, $str, $/, $/;
  }
}

exit;

sub error {
  print '***Error***', $/, $_[0], $/;
  exit;
}

#Dumpvalue->new->dumpValue($dxml);

1;

これをファイル名をdicとし/binフォルダ以下に移動させ,
ファイルに実行権限を与えると,以下のように利用できるようになります.

$ dic eclipse
(太陽・月の)食)しょく)
(権力・名声などの)失墜,衰退
〈天体が〉〈他の天体〉‘を’食する
…‘を’色をあせさせる

こんなふーになります.
ただこれ,辞書があんまり良い感じでなかったり,
vimの最後のハイライト検索の履歴を検索したり出来ないので,
気が向いたらそこら辺もなんか色々していきたい.


・8/28追記
vimrcに下記追加で,最後にヤンクしたワードで検索できるようになった!

nnoremap <c-k> :!dic <C-r>"


・8/28追記2
完全マッチじゃなくて前方一致にしたり,複数件表示するようにAPIの引数を変えた
あとデ辞書ってのも同じフォーマットだったので使えそう.
でも内容も一緒・・・?