IT系おじさんのチラシの裏
2018年10月~
当サイトの記事にはアフィリエイト広告のリンクが含まれる場合があります

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の商品データが取得できるようになりました。
めでたしめでたし。

関連記事

Windows環境にphpmyadminをインストールする

最近のレンタルサーバーなら管理ページでポチっとボタンひとつでphpmyadminのインストールくらい完了しますし、手動でやるとしても公式サイトからZIPをダウンロードして解凍してアップロードする程度で

Windows版PHPでSFTP接続するにはphp_ssh2.dllが必要

Web運営のメンテナンス作業(ローカルへのバックアップ作業とか)を自動化する方法について4回にわけて記事にしてきました。 WSHでブラウザを自動操作する PHPでファイルとDB(Postgre

コメント

新しいコメントを投稿する

[新規投稿]
 
TOP