Amazon PAAPIのItemLookUpは複数ASINのリクエストが出来た

以前の記事「Amazon Product Advertising APIが簡単に使えるようになっていて驚いた」では久しぶりにAmazonのAPIを使って、特定のブラウズノードの商品一覧を取得しました。

しかし今度は別々のブラウズノードにある複数の商品のデータが欲しくなり、その商品数分のリクエストをItemLookUpでループして取得していたのですが…

ItemLookUpのItemIdには複数のASINが書けた

知っている人には当たり前の話ですが、ItemIdにASINをセットする際、
B01LW20AN8,B07J4HGKN4,B07GNC75CG
みたいにカンマ区切りにすることで複数のASINをまとめて指定できたんですねー。

考えてみれば Operation=ItemSearch とかではまとめて10個のデータを持ってきてくれるのですから、ItemLookUpで出来ても不思議ではなかった…。もちろんASINが書けるのは10個までという制限がありますが、それでも1つ1つリクエストするのに比べれば実に10倍です。

というわけで忘れないうちにメモメモ。

■PHPでAmazonの複数ASINを取得する例

<?php
$cfg['AWSAccessKeyId'] = "***********************";
$cfg['AWSSecretAccessKeyId'] = "***********************";
$cfg['AssociateTag'] = "**********-22";

$item_id = 'B01LW20AN8,B07J4HGKN4,B07GNC75CG';
$xml = getAmazon($item_id);

print_r($xml);

/**********************************************
 * Amazon Product Advertising API
 **********************************************/
function getAmazon($item_id) {
	global $cfg;
	$params = array(
		'Service'        => 'AWSECommerceService',
		'Operation'      => 'ItemLookup',
		'AWSAccessKeyId' => $cfg['AWSAccessKeyId'],
		'AssociateTag'   => $cfg['AssociateTag'],
		'ItemId'         => $item_id,
		'IdType'         => 'ASIN',
		'ResponseGroup'  => 'ItemAttributes'
	);
	$endpoint = 'webservices.amazon.co.jp';
	$uri = '/onca/xml';
	// Set current timestamp if not set
	if (!isset($params["Timestamp"])) {
		$params["Timestamp"] = gmdate('Y-m-d\TH:i:s\Z');
	}
	// Sort the parameters by key
	ksort($params);
	$pairs = array();
	foreach ($params as $key => $value) {
		array_push($pairs, rawurlencode($key)."=".rawurlencode($value));
	}
	// Generate the canonical query
	$canonical_query_string = join("&", $pairs);
	// Generate the string to be signed
	$string_to_sign = "GET\n".$endpoint."\n".$uri."\n".$canonical_query_string;
	// Generate the signature required by the Product Advertising API
	$signature = base64_encode(hash_hmac("sha256", $string_to_sign, $cfg['AWSSecretAccessKeyId'], true));
	// Generate the signed URL
	$request_url = 'https://'.$endpoint.$uri.'?'.$canonical_query_string.'&Signature='.rawurlencode($signature);

	$response = @file_get_contents($request_url);
	$parsed_xml = null;
	if (isset($response)) {
		$parsed_xml = simplexml_load_string($response);
	}
	return $parsed_xml;
}

?>

こんな感じで、無事10倍の速度でAmazonの商品データが取得できるようになりました。
めでたしめでたし。

adsbygoogle

フォロー