AmazonAPIã§å•†å“を自動検索ã™ã‚‹æ–¹æ³•(PHP)
目次
- 概è¦
- (1)リクエスト先URI
- (2)Amazonå„種アカウントè¨å®š
- (3)パラメータ付åŠ
- (4)タイムスタンプを付åŠ
- (5)「RFC 3986ã€å½¢å¼ã§ã‚¨ãƒ³ã‚³ãƒ¼ãƒ‡ã‚£ãƒ³ã‚°
- (6)「&ã€å‰Šé™¤ï¼†æ”¹è¡Œ
- (7)パラメーターåã§æ˜‡é †ã‚½ãƒ¼ãƒˆ
- (8)「&ã€ã§ã¤ãªã
- (9)3行をé ã«è¿½åŠ
- (10)ç½²åを作æˆ
- (11)ç½²åを付åŠ
- (12)XMLã‹ã‚‰å•†å“データを抜ã出ã—ã¦è¡¨ç¤º
概è¦
AmazonãŒå…¬é–‹ã—ã¦ã„ã‚‹ä¾¡æ ¼ã‚„å•†å“ã®æ¤œç´¢ãƒ»è³¼å…¥ã‚’プãƒã‚°ãƒ©ãƒ ã‹ã‚‰è¡Œã†ç‚ºã®API
å„種パラメータ(下記ã€1~11)ã‚’Amazonã®Webサーãƒãƒ¼ã«ãƒªã‚¯ã‚¨ã‚¹ãƒˆã™ã‚‹ã¨XMLå½¢å¼ã§ãƒ¬ã‚¹ãƒãƒ³ã‚¹ãŒè¿”ã£ã¦ãる。
XMLã‚’è§£æžã€ãƒ‡ãƒ¼ã‚¿ã‚’åŠ å·¥ã™ã‚‹äº‹ã§ç‹¬è‡ªã®Webサービスã®ä½œæˆãŒå¯èƒ½ã€‚
ãªãŠã€AmazonAPIを利用ã™ã‚‹ã«ã¯ã€
①アソシエイトID ï¼ Amazonアフィリエイト用アカウントã®ä½œæˆ(ç„¡æ–™)ã«ã‚ˆã‚Šä»˜ä¸Žã•れる。
â‘¡AWSアクセスã‚ー ï¼ Amazonアフィリエイト用アカウントã®ä½œæˆ(ç„¡æ–™)ã«ã‚ˆã‚Šä½œæˆå¯èƒ½(ç„¡æ–™)。
â‘¢AWSシークレットã‚ー ï¼ Amazonアフィリエイト用アカウントã®ä½œæˆ(ç„¡æ–™)ã«ã‚ˆã‚Šä½œæˆå¯èƒ½(ç„¡æ–™)。
ãŒå¿…è¦ã€‚
※AmazonWebServiceã«ã¤ã„ã¦ã¯ã€ŒAWS①主ãªã‚µãƒ¼ãƒ“スã€ã‚’å‚ç…§
(1)リクエスト先URI
$baseurl = "http://ecs.amazonaws.jp/onca/xml";
※日本ã®å•†å“を検索ã™ã‚‹å ´åˆã€‚他国ã¯åˆ¥ã€‚
(2)Amazonå„種アカウントè¨å®š
// ①アソシエイトタグ
define("Associate_tag", "*****");
// ②アクセスã‚ー
define("Access_Key_ID", "*****");
// ③シークレットã‚ー
define("Secret_Access_Key", "*****");
(3)パラメータ付åŠ
// リクエストã®ãƒ‘ラメータ作æˆ
$params = array();
$params["Service"] = "AWSECommerceService"
$params["AWSAccessKeyId"] = Access_Key_ID;
$params["Version"] = "2013-08-01"
$params["Operation"] = "ItemSearch"
$params["SearchIndex"] = "All";
※All/Books/DVD/Electronics ç‰ã‚’指定
$params["Keywords"] = "Windowsプãƒã‚°ãƒ©ãƒ ";
â€»å•†å“æ¤œç´¢ãƒ¯ãƒ¼ãƒ‰ã‚’指定
$params["AssociateTag"] = Associate_tag;
$params["ResponseGroup"] = "ItemAttributes,Offers,Medium"
※画åƒç„¡ã—:Small/ç”»åƒæœ‰ã‚Šï¼šMedium/レビューや関連商å“ç‰ã‚‚:Large を指定
↑ リクエスト先URIã«ãƒ‘ラメータを付åŠ
$base_request = "";
foreach ($params as $k => $v) {
  $base_request .= "&" . $k . "=" . $v;
}
$base_request = $baseurl . "?" . substr($base_request, 1);
$v) {
$base_request .= “&” . $k . “=” . $v;
}
$base_request = $baseurl . “?” . substr($base_request, 1);
?>
↓
Service=AWSECommerceService&
AWSAccessKeyId=*****&
Version=2013-08-01&
Operation=ItemSearch&
SearchIndex=Books&
Keywords=Windows&
AssociateTag=*****&
ResponseGroup=ItemAttributes,Offers,Medium
(4)タイムスタンプを付åŠ
$params["Timestamp"] = gmdate("Y-m-d\TH:i:s\Z");
$base_request .= "&Timestamp=" . $params['Timestamp'];
↓
Service=AWSECommerceService&
AWSAccessKeyId=*****&
Version=2013-08-01&
Operation=ItemSearch&
SearchIndex=Books&
Keywords=Windows&
AssociateTag=*****&
ResponseGroup=ItemAttributes,Offers,Medium&
Timestamp=2015-04-27T21:30:35Z
(5)「RFC 3986ã€å½¢å¼ã§ã‚¨ãƒ³ã‚³ãƒ¼ãƒ‡ã‚£ãƒ³ã‚°
$base_request = "";
foreach ($params as $k => $v) {
  $base_request .= '&' . $k . '=' . rawurlencode($v);
  $params[$k] = rawurlencode($v);
}
$base_request = $baseurl . "?" . substr($base_request, 1);
$v) {
$base_request .= ‘&’ . $k . ‘=’ . rawurlencode($v);
$params[$k] = rawurlencode($v);
}
$base_request = $baseurl . “?” . substr($base_request, 1);
?>
↓
Service=AWSECommerceService&
AWSAccessKeyId=%2A%2A%2A%2A%2A&
Version=2013-08-01&
Operation=ItemSearch&SearchIndex=Books&
Keywords=Windows&
AssociateTag=%2A%2A%2A%2A%2A&
ResponseGroup=ItemAttributes%2COffers%2CMedium&
Timestamp=2015-04-27T21%3A32%3A50Z
(6)「&ã€å‰Šé™¤ï¼†æ”¹è¡Œ
$base_request = preg_replace("/.*\?/", "", $base_request);
$base_request = str_replace("&", "\n", $base_request);
↓
Service=AWSECommerceService
AWSAccessKeyId=%2A%2A%2A%2A%2A
Version=2013-08-01
Operation=ItemSearch
SearchIndex=Books
Keywords=Windows
AssociateTag=%2A%2A%2A%2A%2A
ResponseGroup=ItemAttributes%2COffers%2CMedium
Timestamp=2015-04-27T21%3A35%3A07Z
(7)パラメーターåã§æ˜‡é †ã‚½ãƒ¼ãƒˆ
ksort($params);
$base_request = “”;
foreach ($params as $k => $v) {
  $base_request .= "&" . $k . "=" . $v;
}
$base_request = substr($base_request, 1);
$base_request = str_replace("&", "\n", $base_request);
$v) {
$base_request .= “&” . $k . “=” . $v;
}
$base_request = substr($base_request, 1);
$base_request = str_replace(“&”, “\n”, $base_request);
?>
↓
AWSAccessKeyId=%2A%2A%2A%2A%2A
AssociateTag=%2A%2A%2A%2A%2A
Keywords=Windows
Operation=ItemSearch
ResponseGroup=ItemAttributes%2COffers%2CMedium
SearchIndex=Books
Service=AWSECommerceService
Timestamp=2015-04-27T21%3A35%3A07Z
Version=2013-08-01
(8)「&ã€ã§ã¤ãªã
$base_request = str_replace("\n", "&", $base_request);
↓
AWSAccessKeyId=%2A%2A%2A%2A%2A&
AssociateTag=%2A%2A%2A%2A%2A&
Keywords=Windows&
Operation=ItemSearch&
ResponseGroup=ItemAttributes%2COffers%2CMedium&
SearchIndex=Books&
Service=AWSECommerceService&
Timestamp=2015-04-27T21%3A40%3A30Z&
Version=2013-08-01
(9)3行をé ã«è¿½åŠ
$parsed_url = parse_url($baseurl);
$base_request =
  "GET" . "\n"
  . $parsed_url['host'] . "\n"
  . $parsed_url['path'] . "\n"
  . $base_request;
↓
GET
webservices.amazon.com
/onca/xml
AWSAccessKeyId=%2A%2A%2A%2A%2A&
AssociateTag=%2A%2A%2A%2A%2A&
Keywords=Windows&
Operation=ItemSearch&
ResponseGroup=ItemAttributes%2COffers%2CMedium&
SearchIndex=Books&
Service=AWSECommerceService&
Timestamp=2015-04-27T21%3A40%3A30Z&
Version=2013-08-01
(10)ç½²åを作æˆ
$signature = base64_encode(hash_hmac('sha256', $base_request, Secret_Access_Key, true));
$signature = rawurlencode($signature);
↓
5cqsDfQNvWujrBWtFjy8RYm4rXi%2B6OcmygkLILe1D8A%3D
(11)ç½²åを付åŠ
$base_request = "";
foreach ($params as $k => $v) {
  $base_request .= "&" . $k . "=" . $v;
}
$base_request = $baseurl . "?" . substr($base_request, 1) . "&Signature=" . $signature;
$v) {
$base_request .= “&” . $k . “=” . $v;
}
$base_request = $baseurl . “?” . substr($base_request, 1) . “&Signature=” . $signature;
?>
↓
AWSAccessKeyId=%2A%2A%2A%2A%2A&
AssociateTag=%2A%2A%2A%2A%2A&
Keywords=Windows&
Operation=ItemSearch&
ResponseGroup=ItemAttributes%2COffers%2CMedium&
SearchIndex=Books&
Service=AWSECommerceService&
Timestamp=2015-04-27T21%3A40%3A30Z&
Version=2013-08-01&
Signature=5cqsDfQNvWujrBWtFjy8RYm4rXi%2B6OcmygkLILe1D8A%3D
(12)XMLã‹ã‚‰å•†å“データを抜ã出ã—ã¦è¡¨ç¤º
XMLã‹ã‚‰å•†å“データを抜ã出ã—
$amazon_xml=simplexml_load_string(@file_get_contents($base_request));
抜ã出ã—ãŸãƒ‡ãƒ¼ã‚¿ã‚’全件Loop
foreach((object)$amazon_xml->Items->Item as $item_a=>$item){
  //商å“å
  $title=$item->ItemAttributes->Title;
  //商å“ã®URL
  $detail=$item->DetailPageURL;
  //ç”»åƒã®URL
  $image=$item->MediumImage->URL;
  
  // ↑ をリンクã«ã—ã¦html表示
  print '<div style="clear:both;">
        <a href="'.$detail.'" target="_blank">
          <img src="'.$image.'" align="left"/>
          '.$title.'
        </a>
      </div>';
  unset($item);
Items->Item as $item_a=>$item){ //ã“ã“ã«æ³¨ç›®
$title=$item->ItemAttributes->Title; //商å“å
$detail=$item->DetailPageURL; //商å“ã®URL
$image=$item->MediumImage->URL; //ç”»åƒã®URL
print ‘
‘;
print ‘
‘;
unset($item);
}
?>