コード
amazon_assieにアクセスキー、シークレットアクセスキー、アソシエイトID、検索キーワードを入れると正方形にして中心に向かってズームインした形の画像リンク配列を返す。
PHP:アマゾンAPI (AWS)で検索結果を表示 その3 – アダルトを除く | マイヤーの開発ブログさんのコードを拝借。ありがとうございます。
動作は艦これ画像まとめたった~のサイドバーを確認のこと。
//RFC3986形式でURLエンコードする関数 function urlencode_rfc3986($str) { return str_replace('%7E', '~', rawurlencode($str)); } function amazon_assie($access, $secret, $Tag, $ama_keywords) { $access_key_id = $access; $secret_access_key = $secret; $AssociateTag = $Tag; for($i = 1; $i <= 3; $i++) { //2ページ取得、ItemSearchの最大値は10まで $baseurl = 'http://ecs.amazonaws.jp/onca/xml'; $params = array(); $params['Service'] = 'AWSECommerceService'; $params['AWSAccessKeyId'] = $access_key_id; $params['Version'] = '2011-08-01'; $params['Operation'] = 'ItemSearch'; //商品名や著者名でキーワード検索 $params['SearchIndex'] = 'All'; $params['Keywords'] = $ama_keywords; //検索ワードを指定 $params['AssociateTag'] = $AssociateTag; $params['ResponseGroup'] = 'Medium'; $params['Condition'] = 'All'; //中古品も含める $params['ItemPage'] = $i; //何ページ目か //Timestamp パラメータを追加します //-時間の表記は ISO8601 形式、タイムゾーンは UTC(GMT) $params['Timestamp'] = gmdate('Y-m-dTH:i:sZ'); //パラメータの順序を昇順に並び替えます ksort($params); //canonical string を作成します $canonical_string = ''; foreach($params as $k => $v) { $canonical_string .= '&' . urlencode_rfc3986($k) . '=' . urlencode_rfc3986($v); } $canonical_string = substr($canonical_string, 1); //署名を作成します //-規定の文字列フォーマットを作成 //-HMAC-SHA256を計算 //-BASE64エンコード $parsed_url = parse_url($baseurl); $string_to_sign = "GETn{$parsed_url['host']}n{$parsed_url['path']}n{$canonical_string}"; $signature = base64_encode(hash_hmac('sha256', $string_to_sign, $secret_access_key, true)); //URLを作成します //-リクエストの末尾に署名を追加 $url = $baseurl . '?' . $canonical_string . '&Signature=' . urlencode_rfc3986($signature); $amazon_xml = simplexml_load_string(@file_get_contents($url)); // print_r($amazon_xml); foreach((object)$amazon_xml->Items->Item as $item_a => $item) { //アダルト対策 $adult_dvd = $item->ItemAttributes->Format; //「アダルト」の文字 $adult_toy = $item->ItemAttributes->IsAdultProduct; //アダルトなら「1」 if(strpos($adult_dvd, 'アダルト') !== false) { continue; } elseif(strpos($adult_toy, '1') !== false) { continue; } elseif($item->LargeImage->URL == "") { continue; } else { $detail = $item->DetailPageURL; //商品のURL $image_w = $item->LargeImage->Width; //画像の幅 $image_h = $item->LargeImage->Height; //画像の高さ if($image_h > 250) { $image_h_p = $image_w / $image_h; $image_h_e = floor((($image_h_p * $image_h) - 250) / 2); } $image = str_replace(".jpg", "._SX260_CR5,{$image_h_e},250,250_.jpg", $item->LargeImage->URL); //画像のURL $aferi_box[] = '<div class="amazonbox"><a href="' . $detail . '" target="_blank"><img src="' . $image . '" align="left" /></a></div><br />'; } } // print_r($aferi_box);"; return $aferi_box; } }