Insider's Computer DictionaryのWebサービス
@ITで使われているInsider's Computer DictionaryはSOAPインターフェースを公開しています。
http://www.atmarkit.co.jp/icd/index.html
http://www.webservice.jp/netdict/index.html
ただし使用には以下の条件があります。
http://www.webservice.jp/netdict/about_nd/caution.html
禁止事項
NetDictionaryでは、次のような使用は禁止させていただきます。
商用目的での使用
実運用を目的とする使用
データを集中的、組織的に取得するような使用方法
常識の範囲を大きく逸脱して、サーバに負荷をかけるようなアクセス少しでも多くの方々にとって有意義な実験サービスとして運用できるよう、皆様のご協力をお願いいたします。
ICD WebサービスのインターフェースはシンプルでわかりやすいのでWebサービスクライアント作成の練習に良さそうです。
Perl+SOAP::Liteで呼んでみました。
#!/usr/bin/perl
use encoding 'utf8';
use strict;
use warnings;
use SOAP::Lite; # +trace => 'debug';
use Data::Dumper;
my $targetNamespace = 'http://www.iwebmethod.net';
- > uri($targetNamespace)
- > on_action( sub { $targetNamespace.'/'.$_[1] } )
- > proxy('http://www.iwebmethod.net/icd1.0/icd.asmx');
my $result;
#SearchWord
$result = $soap->call(
SOAP::Data->name('SearchWord')->attr({ xmlns => $targetNamespace }),
SOAP::Data->type('string')->name('query' => 'Web'),
SOAP::Data->name('partial' => 'true')
);
die "[".$result->faultcode."]".$result->faultstring if $result->fault;
my @idlist;
my @Words = $result->valueof('//WORD');
foreach my $word (@Words){
print $word->{'english'},"?t",$word->{'japanese'},"?n";
push( @idlist, $word->{'id'} );
}
#GetItemById
$result = $soap->call(
SOAP::Data->name('GetItemById')->attr({ xmlns => $targetNamespace }),
SOAP::Data->name('id' => $idlist[0] )
);
die "[".$result->faultcode."]".$result->faultstring if $result->fault;
print "?n";
print $result->valueof('//meaning');