すらいむがあらわれた

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

「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";

SOAP::Liteで .NETのWebサービスを使う

SOAP::Liteで .NETWebサービスを使うためには多少こつが要ります。
SOAP::Liteを使ったクライアントを作る際に参考になるURLをまとめておきます。(SOAP::Liteのサーバは作ったことがありません…)

http://www.geoap.jp/service/tech/tech2_etc.htm#perl
ここのサンプルコードにSOAP::Liteでのクライアントを作るときのポイントがまとまっています。

  • Interoperability demo: consume a .NET web service with Perl.

http://users.skynet.be/pascalbotte/rcx-ws-doc/perldotnet.htm
ここのサンプルコードも参考になります。

  • Amazon E-Commerce Service(Amazon Web Service)のサンプルコード

http://www.amazon.com/gp/browse.html/ref=sc_fe_c_0_12738641_1/102-8127056-1568139?%5Fencoding=UTF8&node=3434641&no=12738641&me=A36L942TSJ2AJA
複雑なリクエストの組み立て方が参考になります。

Amazon Historical Pricing

AmazonにあたらしいWebサービスができていました

The Amazon Historical Pricing web service gives developers programmatic access to over three years of actual sales data for books, music, videos, and DVDs (as sold by third-party sellers on Amazon.com). Sellers can use Amazon Historical Pricing to make informed decisions on pricing and purchasing.

Amazon Historical Pricing
http://www.amazon.com/gp/browse.html/ref=sc_fe_l_2/102-8127056-1568139?%5Fencoding=UTF8&node=15811391&no=3435361&me=A36L942TSJ2AJA