Amazon Product Advertising API (PA API v5) は、Amazon の豊富な商品カタログから商品情報を取得するための仕組みです。この API を利用すると、オンラインショップやウェブサイトに、Amazon の商品詳細、価格、レビュー、画像などの情報を簡単に埋め込むことができます。
AmazonのPA APIにリクエストした結果は、JSON形式で返ってきます。JSONとは、JavaScript Object Notationの略で、データを扱う記述法の一つです。Web APIでの情報のやりとりでもよく使われる形式です。
試しにASINコード4061592998の商品情報を、リクエストしてみます。JSON形式で情報が返ってきて、中身を表示すると以下の情報が格納されています。
本のタイトル、著者、ジャンル、価格、画像のURL、アマゾンの詳細ページのURLなど、アマゾンのサーバーから送られてきた本に関するさまざまな情報が階層化されていることがわかります。
{
"ItemsResult": {
"Items": [
{
"ASIN": "4061592998",
"BrowseNodeInfo": {
"BrowseNodes": [
{
"Ancestor": {
"Ancestor": {
"Ancestor": {
"Ancestor": {
"ContextFreeName": "本",
"DisplayName": "本",
"Id": "465392"
},
"ContextFreeName": "ジャンル別",
"DisplayName": "ジャンル別",
"Id": "465610"
},
"ContextFreeName": "人文・思想",
"DisplayName": "人文・思想",
"Id": "571582"
},
"ContextFreeName": "本・図書館関連書籍",
"DisplayName": "本・図書館",
"Id": "500062"
},
"ContextFreeName": "読書法",
"DisplayName": "読書法",
"Id": "492114",
"IsRoot": false,
"SalesRank": 32
},
{
"Ancestor": {
"Ancestor": {
"Ancestor": {
"Ancestor": {
"ContextFreeName": "本",
"DisplayName": "本",
"Id": "465392"
},
"ContextFreeName": "ジャンル別",
"DisplayName": "ジャンル別",
"Id": "465610"
},
"ContextFreeName": "人文・思想",
"DisplayName": "人文・思想",
"Id": "571582"
},
"ContextFreeName": "本・図書館関連書籍",
"DisplayName": "本・図書館",
"Id": "500062"
},
"ContextFreeName": "図書館情報学",
"DisplayName": "図書館情報学",
"Id": "562894",
"IsRoot": false,
"SalesRank": 22
},
{
"Ancestor": {
"Ancestor": {
"ContextFreeName": "本",
"DisplayName": "本",
"Id": "465392"
},
"ContextFreeName": "ジャンル別",
"DisplayName": "ジャンル別",
"Id": "465610"
},
"ContextFreeName": "ノンフィクション",
"DisplayName": "ノンフィクション",
"Id": "492152",
"IsRoot": false
},
{
"Ancestor": {
"Ancestor": {
"Ancestor": {
"ContextFreeName": "本",
"DisplayName": "本",
"Id": "465392"
},
"ContextFreeName": "By Publishers",
"DisplayName": "By Publishers",
"Id": "465614"
},
"ContextFreeName": "講談社",
"DisplayName": "講談社",
"Id": "10805001"
},
"ContextFreeName": "全書籍",
"DisplayName": "全書籍",
"Id": "316850011",
"IsRoot": false
},
{
"Ancestor": {
"ContextFreeName": "本",
"DisplayName": "本",
"Id": "465392"
},
"ContextFreeName": "Featured Categories",
"DisplayName": "Featured Categories",
"Id": "202188011",
"IsRoot": false
}
],
"WebsiteSalesRank": {
"ContextFreeName": "本",
"DisplayName": "本",
"SalesRank": 10912
}
},
"DetailPageURL": "https://www.amazon.co.jp/dp/4061592998?linkCode=ogi&th=1&psc=1",
"Images": {
"Primary": {
"Large": {
"Height": 500,
"URL": "https://m.media-amazon.com/images/I/410JJdO3KvL.jpg",
"Width": 352
},
"Medium": {
"Height": 160,
"URL": "https://m.media-amazon.com/images/I/410JJdO3KvL._SL160_.jpg",
"Width": 113
},
"Small": {
"Height": 75,
"URL": "https://m.media-amazon.com/images/I/410JJdO3KvL._SL75_.jpg",
"Width": 53
}
},
"Variants": [
{
"Large": {
"Height": 500,
"URL": "https://m.media-amazon.com/images/I/41yh0Qwv+iL.jpg",
"Width": 348
},
"Medium": {
"Height": 160,
"URL": "https://m.media-amazon.com/images/I/41yh0Qwv+iL._SL160_.jpg",
"Width": 111
},
"Small": {
"Height": 75,
"URL": "https://m.media-amazon.com/images/I/41yh0Qwv+iL._SL75_.jpg",
"Width": 52
}
}
]
},
"ItemInfo": {
"ByLineInfo": {
"Brand": {
"DisplayValue": "講談社",
"Label": "Brand",
"Locale": "ja_JP"
},
"Contributors": [
{
"Locale": "ja_JP",
"Name": "J・モーティマー・アドラー",
"Role": "著",
"RoleType": "author"
},
{
"Locale": "ja_JP",
"Name": "V・チャールズ・ドーレン",
"Role": "著",
"RoleType": "author"
},
{
"Locale": "ja_JP",
"Name": "外山 滋比古",
"Role": "翻訳",
"RoleType": "translator"
},
{
"Locale": "ja_JP",
"Name": "槇 未知子",
"Role": "翻訳",
"RoleType": "translator"
}
],
"Manufacturer": {
"DisplayValue": "講談社",
"Label": "Manufacturer",
"Locale": "ja_JP"
}
},
"Classifications": {
"Binding": {
"DisplayValue": "文庫",
"Label": "Binding",
"Locale": "ja_JP"
},
"ProductGroup": {
"DisplayValue": "Book",
"Label": "ProductGroup",
"Locale": "ja_JP"
}
},
"ContentInfo": {
"Languages": {
"DisplayValues": [
{
"DisplayValue": "日本語",
"Type": "発行済み"
}
],
"Label": "Language",
"Locale": "ja_JP"
},
"PagesCount": {
"DisplayValue": 266,
"Label": "NumberOfPages",
"Locale": "en_US"
},
"PublicationDate": {
"DisplayValue": "1997-10-09T00:00:01Z",
"Label": "PublicationDate",
"Locale": "en_US"
}
},
"ExternalIds": {
"EANs": {
"DisplayValues": [
"9784061592995"
],
"Label": "EAN",
"Locale": "en_US"
},
"ISBNs": {
"DisplayValues": [
"4061592998",
"9784061592995"
],
"Label": "ISBN",
"Locale": "en_US"
}
},
"ProductInfo": {
"IsAdultProduct": {
"DisplayValue": false,
"Label": "IsAdultProduct",
"Locale": "en_US"
},
"ItemDimensions": {
"Weight": {
"DisplayValue": 0.31085178942,
"Label": "Weight",
"Locale": "ja_JP",
"Unit": "ポンド"
}
},
"UnitCount": {
"DisplayValue": 1,
"Label": "NumberOfItems",
"Locale": "en_US"
}
},
"Title": {
"DisplayValue": "本を読む本 (講談社学術文庫)",
"Label": "Title",
"Locale": "ja_JP"
}
},
"Offers": {
"Listings": [
{
"Availability": {
"Message": "一時的に在庫切れ; 入荷時期は未定です。注文確定後、入荷時期が確定次第、お届け予定日をEメールでお知らせします。万が一、入荷できないことが判明した場合、やむを得ず、ご注文をキャンセルさせていただくことがあります。商品の代金は発送時に請求いたします。",
"MinOrderQuantity": 1,
"Type": "Now"
},
"Condition": {
"SubCondition": {
"Value": "New"
},
"Value": "New"
},
"DeliveryInfo": {
"IsAmazonFulfilled": true,
"IsFreeShippingEligible": true,
"IsPrimeEligible": true
},
"Id": "",
"IsBuyBoxWinner": true,
"LoyaltyPoints": {
"Points": 20
},
"MerchantInfo": {
"Id": "AN1VRQENFRJN5",
"Name": "Amazon.co.jp"
},
"Price": {
"Amount": 1177,
"Currency": "JPY",
"DisplayAmount": "¥1,177"
},
"ProgramEligibility": {
"IsPrimeExclusive": false,
"IsPrimePantry": false
},
"ViolatesMAP": false
}
],
"Summaries": [
{
"Condition": {
"Value": "New"
},
"HighestPrice": {
"Amount": 4760,
"Currency": "JPY",
"DisplayAmount": "¥4,760"
},
"LowestPrice": {
"Amount": 1177,
"Currency": "JPY",
"DisplayAmount": "¥1,177"
},
"OfferCount": 3
},
{
"Condition": {
"Value": "Used"
},
"HighestPrice": {
"Amount": 12600,
"Currency": "JPY",
"DisplayAmount": "¥12,600"
},
"LowestPrice": {
"Amount": 355,
"Currency": "JPY",
"DisplayAmount": "¥355"
},
"OfferCount": 44
}
]
}
}
]
}
}
PA API v5のjsonを処理する
上記のJSONの形式の情報を、PHPの関数であるjson_decodeで処理をします。
$obj = json_decode( $response , false ) ;
json_decodeしたあとは、本のタイトルは$booktitleへ、著者名は$authorへ、といった具合に情報を細分化し、用意した任意の変数にそれぞれ格納します。
具体的にコードを記述してみましょう。
echo $obj->ItemsResult->Items[0]->ItemInfo->Title->DisplayValue ;
echo $obj->ItemsResult->Items[0]->ItemInfo->ByLineInfo->Contributors[0]->Name ;
echo $obj->ItemsResult->Items[0]->DetailPageURL ;
echo $obj->ItemsResult->Items[0]->Images->Primary->Medium->URL ;
ここでは、それぞれタイトル、著者、詳細ページURL、表紙イメージを変数に格納しています。これを実行するとブラウザ上に取得した情報が表示されます。