商品を指定して取得する
今日出版されている書籍の大部分には、バーコードが2つ付いています。上段に付いているものはJANコードと呼ばれるものですが、AWSではこれを用いて商品を検索することができます(主なコードの種類については表を参照)。
| コード名 | 説明 |
| EAN | 流通コードの国際標準。 |
| JAN | EANの日本での呼び名。 |
| ISBN-13 | 国際標準図書番号。EAN(JAN)と同じ。 |
| ISBN-10 | 古い規格のISBN。 |
| ASIN | Amazon Standard Item Number。書籍のASINはISBN-10と同じ。 |
例として、JANが9784627847316の商品と9784891005849の商品を検索しましょう。次のようにパラメータを設定します。
| パラメータ名 | 値 | 補足 |
| Operation | ItemLookup | 操作は「ItemLookup」 |
| IdType | EAN | IdTypeは「JAN」でなく「EAN」 |
| ItemId | 9784627847316,9784891005849 | ItemIdはカンマで区切って10個まで複数指定できる(参考) |
| SearchIndex | Books | 検索対象は「Books」 |
AWSで可能な操作(Operation)はたくさんありますが、本稿では、ある決まった商品を取得するItemLookupと、商品を検索するItemSearchだけを使います(決まった商品についての情報を得たいときにはItemLookupを、商品を探すときにはItemSearchを使います)。IdTypeでは与えるIDの種類を指定します。ここではJANと互換性のあるEANとします(開発者ガイドによればJANを指定可能なはずですが、試したところ、エラーになってしまいました)。
検索対象は「Books」とします。これはIdTypeがデフォルト値(ASIN, Amazon Standard Item Number)以外の場合には必須です(指定し忘れると、そのことを示すエラーメッセージが帰ってきます)。ちなみに、ASINはAmazonの商品に一意にふられた番号です。書籍の場合には、ISBN-10がASINになっています。JANコードからASINへは簡単な計算で変換できるので、いつもASINを使うことに決めておいてもいいでしょう(本稿では変換の方法は説明しません。サンプルコードの関数janToIsbn10を参照してください)。ItemLookupではここで挙げた以外として、商品の状態を表すCondition(選択肢は、UsedとCollectible, Refurbished, New, All)や結果の形式を指定するResponseGroup(後述)などのパラメータを利用できます。
URLは次のようになります。
$request=$url .'&Operation=ItemLookup' .'&IdType=EAN' .'&ItemId=9784627847316,9784891005849' .'&SearchIndex=Books'; echoUrl($request);//確認のためにURLを表示する
作成したURLで、サーバにアクセスします(関数file_get_contentsを使うのが簡単です)。結果はXML形式で帰ってくるので、関数simplexml_load_stringを使って、オブジェクトに変換します。
$result=simplexml_load_string(file_get_contents($request));
ちなみに、XMLは次のような形式です。
<ItemLookupResponse>
...
<Items>
...
<Item>
<ASIN>4627847319</ASIN>
...
<ItemAttributes>
<Author>矢吹 太朗</Author>
...
<Title>初級プログラマのためのWebアプリケーション構築入門 - 実践で学ぶJava,XHTML,SQL</Title>
</ItemAttributes>
</Item>
<Item>
<ASIN>489100584X</ASIN>
<ItemAttributes>
<Author>WINGSプロジェクト 矢吹 太朗</Author>
...
<Title>プログラムを作ろう...</Title>
</ItemAttributes>
</Item>
</Items>
</ItemLookupResponse>
結果はこのオブジェクトから取り出します。例えば、タイトルはItem・ItemAttributes・Titleとたどればよいので、次のように取り出せます(形式がよく分からないときは、print_rで確認するといいでしょう)。
echo '<ul>'; foreach($result->Items->Item as $item){//結果のItemを一つずつ処理する //print_r($item);//結果の形式が不明なときは、print_rで確認 echo "<li>{$item->ItemAttributes->Title}</li>";//ItemのItemAttributesのTitleを取り出す } echo '</ul>';
この場合は、次のように表示されます。
・初級プログラマのためのWebアプリケーション構築入門 - 実践で学ぶJava,XHTML,SQL ・プログラムを作ろう!Microsoft Visual Web Developer 2008 Express Edition入門 (マイクロソフト公式解説書 Microsoft Visual Studi)
キーワードで商品を検索する
もう一つ、RESTを使って例を紹介しましょう。「クヌース」をキーワードにAmazonの書籍を検索します。
次のようなパラメータで検索します。今回は、タイトルだけでなく、出版社や出版年月日も取得できるように、ResponseGroupをMediumにします(画像のURLなども取得できるようになります)。ResponseGroupは、結果の形式を指定するためのパラメータです。ResponseGroupの値と結果に含まれるデータの関係の一部を表にまとめました。
| Small | Actor, Artist, ASIN, Author, CorrectedQuery, Creator, DetailPageURL, Director, Keywords, Manufacturer, Message, ProductGroup, Role, Title, TotalPages, TotalResults |
| Medium | Smallに含まれるものと、EditorialReview, Images(大中小の画像のURL), ItemAttributes(商品の属性。大量), OfferSummary, Request, SalesRank |
| Large | Mediumに含まれるものと、Accessories, BrowseNodes, ListmaniaLists, Medium, Offers, Reviews, Similarities, Tracks |
ここでは商品を検索したいので、先ほど用いたItemLookupではなくItemSearchを使います。
| パラメータ名 | 値 | 説明 |
| Operation | ItemSearch | 操作は「ItemSearch」 |
| ResponseGroup | Medium | 結果の形式は「Medium」 |
| SearchIndex | Books | 検索対象は「Books」 |
| Keywords | urlencode('クヌース') | キーワード「クヌース」を、URL中で使える形に変換 |
URLは次のようになります。
$request=$url
.'&Operation=ItemSearch'
.'&ResponseGroup=Medium'
.'&SearchIndex=Books'
.'&Keywords='.urlencode('クヌース');
echoUrl($request);//確認のためにURLを表示する
file_get_contents関数で問い合わせ、戻ってきたXMLをsimplexml_load_stringでオブジェクトに変換するのは先ほどと同様です(著者が複数の場合にカンマ区切りで表示するようにしていますが、本質的なものではないので、よく分からない場合は無視してください)。
$result=simplexml_load_string(file_get_contents($request));
echo '<ul>';
foreach($result->Items->Item as $item){//結果のItemを一つずつ処理する
$authors='';//著者が複数の場合は「, 」で区切って表示するようにする
foreach($item->ItemAttributes->Author as $tmp) $authors.="$tmp, ";
$authors=substr($authors,0,-2);
echo '<li>'
.($authors!='' ? "$authors. " : '')
."{$item->ItemAttributes->Title}. "//タイトルを取得
."{$item->ItemAttributes->Manufacturer}, "//出版社を取得
."{$item->ItemAttributes->PublicationDate}.</li>";//出版年月日を取得
}
echo '</ul>';
この場合は、次のように表示されます。
・ドナルド・E・クヌース. The Art of Computer Programming Volume1 Fundamental Algorithms Third Edition 日本語版 (ASCII Addison Wesley Programming Series). アスキー, 2004-02-18. ・ドナルド・E. クヌース. The Art of Computer Programming Volume 3 Sorting and Searching Second Edition 日本語版 (Ascii Addison Wesley programming series). アスキー, 2006-04. ・Donald E. Knuth. The Art of Computer Programming,Volume 4, Fascicle 2: Generating All Tuples and Permutations[日本語版] (アスキー・アジソンウェスレイシリーズ). アスキー, 2006-11-13. ・ドナルド・E. クヌース. The Art of Computer Programming Volume 1,Fascicle 1:MMIX―A RISC Computer for the New Millennium日本語版 (Ascii Addison Wesley programming series). アスキー, 2006-01. ・Donald E.Knuth, 有沢 誠, 和田 英一, 斎藤 博昭, 長尾 高弘, 松井 祥悟, 松井 孝雄, 山内 斉. The Art of Computer Programming (2) 日本語版 Seminumerical algorithms Ascii Addison Wesley programming series. アスキー, 2004-10. ・Donald E. Knuth, Paul M. Roberts, Tracy Larrabee. クヌース先生のドキュメント纂法. 共立出版, 1989-12. ・ロナルド・L. グレアム, オーレン パタシュニク, ドナルド・E. クヌース. コンピュータの数学. 共立出版, 1993-08. ・ドナルド・E. クヌース. 至福の超現実数―純粋数学に魅せられた男と女の物語. 柏書房, 2004-11. ・D・E・クヌース. コンピュータ科学者がめったに語らないこと. エスアイビー・アクセス, 2003-09-18. ・クヌース先生のプログラム論. 共立出版, 1991-05.
