レベル: 初級 伊藤 直也, ITmedia
2007年 3月 30日 Webサービスを使いこなすといっても、Web検索の機能をアプリケーションに統合するだけでは、いまいち面白みがありません。今回は、Amazon.comが提供するAmazon Webサービスを料理してみましょう。
Amazon Webサービスをロックオン!
前回はGoogleとYahoo!の検索機能に関するWebサービスを題材に解説してきました。しかしながら、実用的なアプリケーションを作ると言いつつも、Web検索の機能をアプリケーションに統合するだけでは、いまいち面白みがありません。工夫次第でいろいろ面白いものが作れるとは思いますが、より実用的なデータをWebサービスで扱いたいところですね。
そこでやはり思いつくのは、Amazon.comが提供するAmazon Webサービス*です。Amazon Webサービスを利用すると、Amazon.comやAmazon.co.jpにある大量の商品データをオリジナルのアプリケーションから扱うことができます。また、Amazonのカートに商品を入れるプログラムを作ったり、Amazonのアフィリエイト・プログラムであるAmazonアソシエイトと組み合わせて紹介料を受け取るプログラムを作ることも可能です(図1)。
図1 Amazon Webサービス
Amazon Webサービスで構築されたamazlet.com
ここで、実際にAmazon Webサービスを使って構築したわたしのWebサイトを紹介しましょう(図2)。
図2 Amazon Webサービスにより構築しているamazlet.com
amazlet.comはいわゆるショッピングサイトなのですが、実はこのページの商品はすべてAmazon.co.jpの商品データで成り立っています。つまり、わたしは書籍やDVDなどの在庫はもちろん、商品データも一切持たずに、AmazonWebサービスによってそれらを取得、Webサイトに表示し、カートと連動させてショッピングサイトに仕上げているのです。
このamazlet.comではアソシエイトプログラムを利用しているので、amazlet.com経由でAmazon.co.jpに売り上げが発生すると、わたしに幾ばくかの紹介料が支払われるようになっています。Webプログラミングのスキルがあれば、AmazonWebサービスなどを使ってアイデア次第でプチビジネスもできてしまう、という一例です。
それではさっそくこのAmazon Webサービスを使ってみましょう。
登録IDを取得する
Amazon Webサービスも、Yahoo! Search WebServicesと同じく利用するのに開発者登録が必要です。登録すると登録IDを受け取ることができます。この登録IDは過去にデベロッパートークンと呼ばれていたものです。このIDを持っていない方はこちらから登録を行ってください。メールで登録IDが送られてきます。
Amazon Webサービスを使ってみよう
Amazon Webサービスは、SOAPとRESTの両方をサポートしています。RESTの方がシンプルなので、ここではREST APIを使って解説します。
Amazon Webサービスはできることが多い分、先に紹介したGoogleやYahoo!のAPIに比べて仕様が少し大きめです。とはいっても、「URLでパラメータを組み立ててHTTPのGETメソッドでアクセス、そのレスポンスをXMLで受け取る」という基本は変わりません。例えばPerl関連の書籍を探すためには、リスト1のURLでクエリを飛ばします*。すると、リスト2のようなPerl関連の書籍の情報がXMLで返ってきます。
http://webservices.amazon.co.jp/onca/xml?Service=AWSECommerceService&
SubscriptionId=**********&Operation=ItemSearch
&ResponseGroup=Small,Images&Keywords=Perl&SearchIndex=Books
|
リスト1 Amazon WebサービスでPerl関連の書籍を探すURL
<?xml version="1.0" encoding="UTF-8"?>
<ItemSearchResponse xmlns="http://webservices.amazon.com/AWSECommerceService/2005-03-23">
<OperationRequest>
:
:
<Items>
<Request>
<IsValid>True</IsValid>
<ItemSearchRequest>
<Keywords>Perl</Keywords>
:
:
</ItemSearchRequest>
</Request>
<TotalResults>152</TotalResults>
<TotalPages>16</TotalPages>
<Item>
<ASIN>4873111269</ASIN>
<DetailPageURL>http://www.amazon.co.jp/exec/obidos/redirect?tag=ws%26link_code=
xm2%26camp=2025%26creative=165953%26path=http://www.amazon.co.jp/gp/redirect.html%
253fASIN=4873111269%2526location=/o/ASIN/4873111269%
25253FSubscriptionId=********</DetailPageURL>
<SmallImage>
<URL>http://images.amazon.com/images/P/4873111269.09._SCTHUMBZZZ_.jpg</URL>
<Height>60</Height>
<Width>46</Width>
</SmallImage>
<MediumImage>
:
:
</MediumImage>
<LargeImage>
:
:
</LargeImage>
<ItemAttributes>
<Author>ランダル・L. シュワルツ</Author>
<Author>トムフェニックス</Author>
<Creator Role="著">ランダル・L.シュワルツ</Creator>
:
:
<ProductGroup>Book</ProductGroup>
<Title>初めてのPerl</Title>
</ItemAttributes>
</Item>
<Item>
<ASIN>4839912653</ASIN>
:
:
</Item>
</Items>
</ItemSearchResponse>
|
リスト2 Amazon WebサービスでPerl関連の書籍を探した結果(一部のみ掲載)
書籍名や著者名に加えて、商品のISBN(ASIN*)やURL、それから画像のURLなんかが入っていますね。URLパラメータを組み替えることで、在庫状況や価格などいろいろなデータも同時に取得できます。このXML文書をパースすることで、任意のキーワードに対するAmazon.co.jpの商品データを使ったアプリケーションを作ることができる、という仕組みです。何だか面白いものが作れそうな気がしてきますよね。
Net::AmazonでAmazon Webサービスを料理する
それではLWPとXML::SimpleでAmazon Webサービスを使ったアプリケーションを……といきたいところですが、Amazon Webサービスの仕様は結構大きめで、クエリの組み立てやXML文書のパースもなかなか大変です(それに、AmazonWebサービスの仕様をすべて解説して至ら誌面が幾らあっても足りません:P )。
こんなときはやっぱりCPAN。CPANにはNet::AmazonというAmazon Webサービスを簡単に利用するためのモジュールもちゃんと登録されています。Net::Amazonを使うと、AmazonWebサービスを使ったアプリケーションを作る作業量がぐぐっと減ってお得です。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サイトを構築してみましょう。お楽しみに。
このページで出てきた専門用語
-
mazon.comが提供するAmazon Webサービス
- Amazon E-Commerce Service、略してECSとも呼ばれています。
-
リスト1のURLでクエリを飛ばします
- ********には登録IDを入力します。
-
ASIN
- Amazon Standard Item Numberの略で、Amazonで扱っている商品を一意に示すコードのこと。
参考文献
著者について  | |  | 伊藤直也,ITmedia |
記事の評価
|