amazonAPIを使って商品情報取得
ウルトラマンです。
amazonAPIを使った商品情報取得
をしてみようと思います。
ソースコード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 |
function amazonLookup ($enter_code){ /* * 変数設定 */ $title; //商品名 $maker_name; //メーカー $model_number; //型番 $link_url; //URL $img_thum_path; //サムネイル画像 $img_main_path; //メイン画像 $price; //価格 $note; //備考 $params = array(); // 必須 amazonアソシエイトID $access_key_id = 'AKIAIXXXXXXXXXXX'; $secret_access_key = '2pks0XXXXXXXXXXX'; $params['AssociateTag'] = 'xxxxxxxx'; $baseurl = 'http://ecs.amazonaws.jp/onca/xml'; // パラメータ $params['Service'] = 'AWSECommerceService'; $params['AWSAccessKeyId'] = $access_key_id; $params['Version'] = '2011-08-01'; $params['Timestamp'] = gmdate('Y-m-d\TH:i:s\Z'); //リクエストデータ形式 $params['Operation'] = 'ItemLookup'; //レスポンスデータ形式 $params['ResponseGroup'] = 'Mediu==m'; $params['ItemId'] = $enter_code; $params['IdType'] = EAN; //バーコードは、12桁以下の場合0づめ13桁にする if(strlen($params['ItemId']) < 13){ $params['ItemId'] = str_pad($params['ItemId'], 13, "0", STR_PAD_LEFT); } $params['SearchIndex'] = 'All'; ksort($params); // 設定パラメータを元に送信用URL・シグネチャ作成 $canonical_string = ''; foreach ($params as $k => $v) { $canonical_string .= '&' . str_replace('%7E', '~', rawurlencode($k)); $canonical_string .= '=' . str_replace('%7E', '~', rawurlencode($v)); } $canonical_string = substr($canonical_string, 1); $parsed_url = parse_url($baseurl); $string_to_sign = "GET\n{$parsed_url['host']}\n{$parsed_url['path']}\n{$canonical_string}"; $signature = base64_encode(hash_hmac('sha256', $string_to_sign, $secret_access_key, true)); $url = $baseurl . '?' . $canonical_string . '&Signature=' . $this->urlencode_rfc3986($signature); //XML形式で情報を取得 $xml = @simplexml_load_file($url); if(!$xml){ return FALSE; } //XML形式→JSON形式→JSON形式配列に変換 $json = json_encode($xml); $json = json_decode($json, true ); if(empty($json['Items']['Item'])){ //商品情報が受け取れなかった場合 return FALSE; }else{ //抽出結果が複数判別で配列保存処理変更 if(is_array($json['Items']['Item']['0'])){ //結果が複数あった場合一番最初の情報を取得 $array_item = $json['Items']['Item'][0]; }else{ $array_item = $json['Items']['Item']; } //URL $link_url = $array_item['DetailPageURL']; //サムネイル $img_thum_path = $array_item['SmallImage']['URL']; //メイン画像 $img_main_path = $array_item['LargeImage']['URL']; //商品名 $title = $array_item['ItemAttributes']['Title']; //価格 $price = $array_item['ItemAttributes']['ListPrice']['Amount']; //メーカー if(!empty($array_item['ItemAttributes']['Manufacturer'])){ $maker_name = $array_item['ItemAttributes']['Manufacturer']; }elseif (!empty($array_item['ItemAttributes']['Publisher'])){ $maker_name = $array_item['ItemAttributes']['Publisher']; }elseif (!empty($array_item['ItemAttributes']['Studio'])){ $maker_name = $array_item['ItemAttributes']['Studio']; }elseif (!empty($array_item['ItemAttributes']['Label'])){ $maker_name = $array_item['ItemAttributes']['Label']; }elseif (!empty($array_item['ItemAttributes']['Brand'])){ $maker_name = $array_item['ItemAttributes']['Brand']; } //型番 if(!empty($array_item['ItemAttributes']['MPN'])){ $model_number = $array_item['ItemAttributes']['MPN']; }elseif (!empty($array_item['ItemAttributes']['PartNumber'])){ $model_number = $array_item['ItemAttributes']['PartNumber']; }elseif (!empty($array_item['ItemAttributes']['Model'])){ $model_number = $array_item['ItemAttributes']['Model']; } //備考 if(is_array($array_item['ItemAttributes']['Feature'])){ foreach($array_item['ItemAttributes']['Feature'] AS $code=>$value){ $note .= $array_item['ItemAttributes']['Feature'][$code]."\n"; } }else{ $note = $array_item['ItemAttributes']['Feature']; } } //返り値の配列格納 $arr_result = array( 'title' => $title, 'maker_name' => $maker_name, 'model_number' => $model_number, 'price' => $price, 'link_url' => $link_url, 'note' => $note, 'img_main_path' => $img_main_path, 'img_thum_path' => $img_thum_path ); return $arr_result; } } |
解説
- API使うのにamazonアソシエイトIDをは、必須です。
- ASINではなくEAN形式を使うバーコード(短い形式)のバーコードの場合0づめ13桁に変換してあげるASIN、EAN両方対応するため
- 必要な情報のみまとめる(商品名、メーカー、型番、URL、サムネイル画像、メイン画像、価格、備考情報)
必要な商品情報だけ取りたい時に使えます。
参考情報
https://images-na.ssl-images-amazon.com/images/G/09/associates/paapi/dg/index.html?ItemLookup.html
ディスカッション
コメント一覧
まだ、コメントがありません