第5回 Amazon Webサービスを料理してみる作って学ぶ、今どきのWebサービス(3/3 ページ)

» 2007年03月06日 08時00分 公開
[はてな 伊藤直也,ITmedia]
前のページへ 1|2|3       

Net::AmazonでAmazon Webサービスを料理する

 それでは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 }
リスト3 任意の単語でAmazonの商品を探すアプリケーション(便宜上行番号を表示しています)

$ perl amazonsearch.pl perl

初めてのPerl

Code Reading―オープンソースから学ぶプログラミングテクニック

一週間でマスターするPerl for Windows

はじめての人のためのかんたんPerl/CGI入門―WindowsXP/MacOS X対応

続・初めてのPerl - Perlオブジェクト、リファレンス、モジュール

Perlデータマンジング―データ加工のテクニック集

                :

                :


実行例2 Net::Amazonを使って「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回」を再構成したものです。


前のページへ 1|2|3       

Copyright © ITmedia, Inc. All Rights Reserved.

注目のテーマ