すらいむがあらわれた

こまんど >  たたかう  にげる

「XML Webサービス対応三省堂デイリーコンサイス体験版」をSOAP::Liteで使う

三省堂の「デイリーコンサイス国語辞典」「デイリーコンサイス英和辞典」「デイリーコンサイス和英辞典」のデータを利用できるWebサービスがあります。(実験目的の利用に限られます)


XML Webサービス対応三省堂デイリーコンサイス体験版
http://www.btonic.com/ws/
辞書サービスのURL
http://btonic.est.co.jp/NetDic/NetDicv08.asmx
WSDL
http://btonic.est.co.jp/NetDic/NetDicv08.asmx?WSDL


利用については以下の注意事項があります。

* 本サービスは、三省堂様のご厚意により実験用として無償で公開されているものです。Webサービスの接続実験用として自由にご利用ください。
* 通常の状態では24時間稼働してはおりますが、弊社として稼働保証をするものではございませんのでご注意ください。
* 商用目的でのご利用はご遠慮ください。商用のお客様には、より多くの辞書ラインナップをそろえた24時間稼働保証のある有償サービスを別途提供させていただいております。
* サーバー負荷軽減のため、プログラム開発に際してはアクセス頻度ができるだけ少なくなるような配慮をお願いします。 1クライアントからアクセス頻度としては、
o 短時間のピーク:1秒間に3回程度
o 長時間の平均値:1分間に1回程度
を目安としてください。 これ以上の頻度でのアクセスになる場合には、下記までご一報ください。


PerlSOAP::Liteモジュールをつかって呼んでみました。汚いコードですが…。
注意:日記にソースをコピペしたらバックスラッシュが自動的に「?」に置換されてしまったので、「¥」に書き換えています。


#!/usr/bin/perl
use encoding 'utf8';
use strict;
use warnings;
use SOAP::Lite; # +trace => 'debug';
use Encode;

my $targetNamespace = 'http://btonic.est.co.jp/NetDic/NetDicV08';

my $soap = SOAP::Lite

my $result;

# GetDicItemList
$result = $soap->call(
SOAP::Data->name("GetDicList")->attr({ xmlns => $targetNamespace })
);


Encode::_utf8_on($result);
if( my @DicInfo = $result =~ /.+?/g){
foreach my $dicinfo(@DicInfo){
$dicinfo =~ /(.+?)/;
my $dicid = $1;
$dicinfo =~ /(.+?)/;
my $fullname = $1;
print $fullname,"¥t",$dicid,"¥n";
}
}



# SearchDicItem

#
# 3a157a62-f2a3-44b1-aac2-cf341569fc38
# c37c56a8-dbbb-4d16-992a-be348d40e613
# 45dba8f5-0a79-4814-858f-c17e7dd4f386
#

my $dicidlist = ¥SOAP::Data->value(
SOAP::Data->name('guid' => '3a157a62-f2a3-44b1-aac2-cf341569fc38'),
SOAP::Data->name('guid' => 'c37c56a8-dbbb-4d16-992a-be348d40e613'),
SOAP::Data->name('guid' => '45dba8f5-0a79-4814-858f-c17e7dd4f386'));

#
#
# book
# HEADWORD
# STARTWITH
# OR
#

#

my $querylist = ¥SOAP::Data->value(
SOAP::Data->name('Query' => ¥SOAP::Data->value(
SOAP::Data->type('string')->name('Words' => '国語'),
SOAP::Data->name('ScopeID' => 'HEADWORD'),
SOAP::Data->name('MatchOption' => 'STARTWITH'),
SOAP::Data->name('MargeOption' => 'OR')
))
);

$result = $soap->call(
SOAP::Data->name("SearchDicItem")->attr({ xmlns => $targetNamespace }),
SOAP::Data->name("DicIDList" => $dicidlist),
SOAP::Data->name("QueryList" => $querylist),
SOAP::Data->name("FormatOption" => "HTML"),
SOAP::Data->name("ResourceOption" => "URI"),
SOAP::Data->name("CharsetOption" => "UNICODE"),
SOAP::Data->name("ReqItemIndex" => 0 ),
SOAP::Data->name("ReqItemTitleCount" => 5 ),
SOAP::Data->name("ReqItemItemContentCount" => 1 )
);

Encode::_utf8_on($result);
my @iteminfo;

if( my @DicItem = $result =~ /.+?/g){
my $count = @DicItem;
for( my $i = 0; $i < $count; $i++ ){
my $dicitem = $DicItem[$i];
$dicitem =~ /(.+?)/;
my $itemid = $1;
$dicitem =~ /(.+?)/;
my $itemdicid = $1;
print $itemdicid,"¥t",$itemid,"¥n";
$iteminfo[$i] = { dicid => $itemdicid, itemid => $itemid };
}
}


#GetDicItem

$result = $soap->call(
SOAP::Data->name("GetDicItem")->attr({ xmlns => $targetNamespace }),
SOAP::Data->name('DicID' => $iteminfo[0]->{dicid}),
SOAP::Data->name("ItemID" => $iteminfo[0]->{itemid}),
SOAP::Data->name("FormatOption" => "HTML"),
SOAP::Data->name("ResourceOption" => "URI"),
SOAP::Data->name("CharsetOption" => "UNICODE"),
);

Encode::_utf8_on($result);
print $result,"¥n";