それではLWPとXML::SimpleでAmazon Webサービスを使ったアプリケーションを……といきたいところですが、Amazon Webサービスの仕様は結構大きめで、クエリの組み立てやXML文書のパースもなかなか大変です(それに、AmazonWebサービスの仕様をすべて解説して至ら誌面が幾らあっても足りません:P)。
こんなときはやっぱりCPAN。CPANにはNet::AmazonというAmazon Webサービスを簡単に利用するためのモジュールもちゃんと登録されています。Net::Amazonを使うと、Amazon Webサービスを使ったアプリケーションを作る作業量がぐぐっと減ってお得です。CPANシェルから「install Net::Amazon」でインストールしてしまいましょう。
ここでは例によって、コマンドプロンプトから任意の単語でAmazonの商品を探すアプリケーションを作ってみました。コードはリスト3のようになります。このスクリプトをコマンドラインから実行する(任意のキーワードを引数で渡す)と、商品名が表示されます。実行例1では、キーワードとして「perl」を渡しました。
1 #!/usr/local/bin/perl
2 use strict;
3 use Jcode;
4 use Net::Amazon;
5
6 my $query = shift;
7 $query = Jcode->new($query, 'euc')->utf8;
8 my $ua = Net::Amazon->new(
9 token => '**********',
10 locale => 'jp',
11 );
12 my $response = $ua->search(
13 keyword => $query,
14 mode => 'books',
15 );
16
17 if ($response->is_success) {
18 print Jcode->new($_->ProductName, 'utf8')->euc, "\n"
19 for ($response->properties);
20 } else {
21 die "Error: ", $response->message, "\n";
22 }
$ perl amazonsearch.pl perl
初めてのPerl
Code Reading―オープンソースから学ぶプログラミングテクニック
一週間でマスターするPerl for Windows
はじめての人のためのかんたんPerl/CGI入門―WindowsXP/MacOS X対応
続・初めてのPerl - Perlオブジェクト、リファレンス、モジュール
Perlデータマンジング―データ加工のテクニック集
:
:
わずか十数行のコードで、Amazonから商品を検索して表示するツールが完成してしまいました。簡単にコードの解説をしていきましょう。
6、7行目では、まずキーワードを引数として受け取り、それをUTF-8に変換しています。ここでは、わたしのシステムが入出力をEUC-JPにしているため、Jcodeの第2引数に「euc」を渡しています(省略した場合は自動判定)。お使いの環境に合わせて変更してください。
続いて8行目から11行目にかけてNet::Amazonのインスタンスを作成します。ここではtokenとして先の登録ID、それからlocaleとしてjpを渡しています。jpを渡すと、Webサービスのクエリを送信する対象が、Amazon.comではなくAmazon.co.jpに変更されます。
Net::Amazonのインスタンス作成時には、ほかにもさまざまなパラメータを渡すことができます。例えばアソシエイトIDを渡しておくと、以降の検索結果で取得できるURLがアソシエイト対応になったり、PerlのCache::Cacheオブジェクトを渡すと、検索結果をローカルで一時的にキャッシュしたりといった機能が使えます。詳しくはperldocかsearch.cpan.orgのドキュメントを参照してください。
12行目から15行目のように、Net::Amazonインスタンスのsearchメソッドを呼び出せば、Amazonの商品データベースを検索できます。ここでは書籍(books)を対象に、引数で与えられた単語を検索しています。
17行目以降は、検索結果のインスタンス(Net::Amazon::Response)に、検索が成功したかどうかをis_successでたずねて、成功していたら検索結果から商品名を取り出して表示します。リスト3にあるように、propertiesメソッドで検索結果の配列が返ってくるので、それをループで回して得られるオブジェクト(Net::Amazon::Property)にProductNameメソッドで問い合わせれば、商品名が取得できます。
この程度であれば、Amazon Webサービスの細かい仕様を知らなくても、Net::Amazonの使い方だけ覚えておけば作れてしまいます。簡単ですね。Net::Amazonの使い方は、CPANのドキュメントにあります。もっといろいろやってみたいという方は、ぜひ一度ドキュメントに目を通してみてください。
前回と今回の2回は、WebサービスAPIを用いて、コマンドラインからクエリを送信、検索結果を表示するというアプリケーションを幾つか作ってみました。HTTPを介してWebサイトが持つ機能を自分のアプリケーションに取り込む、という意味でのWebサービスとはいったいどんなものかをご理解いただけたと思います。
さて、これらWebサービスを利用して本格的なアプリケーションを作ってみましょう……といきたいところですが、今回はここでおしまいです。続きは次回、WebアプリケーションとWebサービスを絡めて、インタラクティブなWebサイトを構築してみましょう。お楽しみに。
本記事は、オープンソースマガジン2005年8月号「作って学ぶ、今どきのWebサービス 第2回」を再構成したものです。
Copyright © ITmedia, Inc. All Rights Reserved.