2013.
12.
19
06:30:57
結論から書けば
リクエストパラメータの「Power」に「binding:not kindle」を付ける
でOKでした。
実は以前「Amazon Product Advertising API、検索結果からkindleを除外したい(暫定対処中)」の記事で、
電子媒体を除外して書籍の検索をしたい的なことを書いたのですが、
その後、すっかり放置していましてね。
ふと気になったので再度調べたらあっさり見つかりました。
「Power=binding:not kindle」を付けろだそーです。
ここに載ってたφ(--)
https://forums.aws.amazon.com/thread.jspa?messageID=218127#
前に「Amazon Product Advertising API(TIPS):売上ランキングを取得する」の記事で書いた
売上ランキングを取得するコードを例に取ると
■Util.php
■BookInfo.php
■test.php
とかすればOKです。
ちなみに「Power」パラメータを既に指定していて複数になる場合は、例えば
のように「and」で繋いであげてください。
最終的にはURLエンコードされて
のようなパラメータになりますけどね。
Powerパラメータに関する細かいことは
https://images-na.ssl-images-amazon.com/images/G/09/associates/paapi/dg/index.html?PowerSearchSyntax.html
をご覧ください。
取りあえずこれでkindleが除外できたのでスッキリです。
これにて完了\(--)/
リクエストパラメータの「Power」に「binding:not kindle」を付ける
でOKでした。
実は以前「Amazon Product Advertising API、検索結果からkindleを除外したい(暫定対処中)」の記事で、
電子媒体を除外して書籍の検索をしたい的なことを書いたのですが、
その後、すっかり放置していましてね。
ふと気になったので再度調べたらあっさり見つかりました。
「Power=binding:not kindle」を付けろだそーです。
ここに載ってたφ(--)
https://forums.aws.amazon.com/thread.jspa?messageID=218127#
前に「Amazon Product Advertising API(TIPS):売上ランキングを取得する」の記事で書いた
売上ランキングを取得するコードを例に取ると
■Util.php
class Util {
static public function urlencode_rfc3986($str) {
return str_replace('%7E', '~', rawurlencode($str));
}
}
static public function urlencode_rfc3986($str) {
return str_replace('%7E', '~', rawurlencode($str));
}
}
■BookInfo.php
class BookInfo{
public $ISBN;
public $ASIN;
public $Title;
public $Author;
public $Publisher;
public $PublicationDate;
public $DetailPageURL;
/**
* コンストラクタ
*
*/
public function __construct() {
$this->ISBN = "";
$this->ASIN = "";
$this->Title = "";
$this->Author = "";
$this->Publisher = "";
$this->PublicationDate = "";
$this->DetailPageURL = "";
}
}
public $ISBN;
public $ASIN;
public $Title;
public $Author;
public $Publisher;
public $PublicationDate;
public $DetailPageURL;
/**
* コンストラクタ
*
*/
public function __construct() {
$this->ISBN = "";
$this->ASIN = "";
$this->Title = "";
$this->Author = "";
$this->Publisher = "";
$this->PublicationDate = "";
$this->DetailPageURL = "";
}
}
■test.php
define("AWS_BASE_URL", "http://ecs.amazonaws.jp/onca/xml");
define("AWS_ACCESS_KEY", ご自分のアクセスキーをどーぞ);
define("AWS_SECRET_ACCESS_KEY", ご自分のシークレットアクセスキーをどーぞ);
define("AWS_OPTION_SERVICE", "AWSECommerceService");
define("AWS_OPTION_VERSION", "2011-08-02");
define("AWS_OPTION_ASSOCIATETAG", ご自分のアソシエイトIDをどーぞ);
define("AWS_OPTION_SEARCHINDEX", "Books");
define("AWS_OPTION_BROWSENODE", "466282");
define("AWS_OPTION_RESPONSEGROUP", "Medium");
require_once(dirname(__FILE__) ."/Util.php");
require_once(dirname(__FILE__) ."/BookInfo.php");
$baseurl = AWS_BASE_URL;
$params = array();
$params['Service'] = AWS_OPTION_SERVICE;
$params['AWSAccessKeyId'] = AWS_ACCESS_KEY;
$params['Version'] = AWS_OPTION_VERSION;
$params['AssociateTag'] = AWS_OPTION_ASSOCIATETAG;
$params['SearchIndex'] = AWS_OPTION_SEARCHINDEX;
$params['BrowseNode'] = AWS_OPTION_BROWSENODE;
$params['ResponseGroup'] = AWS_OPTION_RESPONSEGROUP;
$params['Operation'] = 'ItemSearch';
$params['ItemPage'] = 1;
$params['Sort'] = 'salesrank';
$params['Timestamp'] = gmdate('Y-m-d\TH:i:s\Z');
//add
$params['Power'] = 'binding:not kindle';
ksort($params);
$caStr = '';
foreach ($params as $k => $v) {
$caStr .= '&'.Util::urlencode_rfc3986($k).'='.Util::urlencode_rfc3986($v);
}
$caStr = substr($caStr, 1);
// 署名を作成します
// - 規定の文字列フォーマットを作成
// - HMAC-SHA256 を計算
// - BASE64 エンコード
$parsedUrl = parse_url($baseurl);
$strToSign = "GET\n{$parsedUrl['host']}\n{$parsedUrl['path']}\n{$caStr}";
$signature = base64_encode(hash_hmac('sha256', $strToSign, AWS_SECRET_ACCESS_KEY, true));
// URL を作成します
// - リクエストの末尾に署名を追加
$url = $baseurl.'?'.$caStr.'&Signature='.Util::urlencode_rfc3986($signature);
//XMLで情報を取得。
$xml = @simplexml_load_file($url);
$dataList = array();
//検索結果データ展開
foreach ($xml->Items->Item as $item) {
$data = new BookInfo();
$data->ISBN = (string) $item->ItemAttributes->ISBN;
$data->ASIN = (string) $item->ASIN;
$data->Title = (string) $item->ItemAttributes->Title;
$data->Author = (string) $item->ItemAttributes->Author;
$data->Publisher = (string) $item->ItemAttributes->Publisher;
$data->PublicationDate = (string) $item->ItemAttributes->PublicationDate;
$data->DetailPageURL = (string) $item->DetailPageURL;
$dataList[] = $data;
}
var_dump($dataList);
define("AWS_ACCESS_KEY", ご自分のアクセスキーをどーぞ);
define("AWS_SECRET_ACCESS_KEY", ご自分のシークレットアクセスキーをどーぞ);
define("AWS_OPTION_SERVICE", "AWSECommerceService");
define("AWS_OPTION_VERSION", "2011-08-02");
define("AWS_OPTION_ASSOCIATETAG", ご自分のアソシエイトIDをどーぞ);
define("AWS_OPTION_SEARCHINDEX", "Books");
define("AWS_OPTION_BROWSENODE", "466282");
define("AWS_OPTION_RESPONSEGROUP", "Medium");
require_once(dirname(__FILE__) ."/Util.php");
require_once(dirname(__FILE__) ."/BookInfo.php");
$baseurl = AWS_BASE_URL;
$params = array();
$params['Service'] = AWS_OPTION_SERVICE;
$params['AWSAccessKeyId'] = AWS_ACCESS_KEY;
$params['Version'] = AWS_OPTION_VERSION;
$params['AssociateTag'] = AWS_OPTION_ASSOCIATETAG;
$params['SearchIndex'] = AWS_OPTION_SEARCHINDEX;
$params['BrowseNode'] = AWS_OPTION_BROWSENODE;
$params['ResponseGroup'] = AWS_OPTION_RESPONSEGROUP;
$params['Operation'] = 'ItemSearch';
$params['ItemPage'] = 1;
$params['Sort'] = 'salesrank';
$params['Timestamp'] = gmdate('Y-m-d\TH:i:s\Z');
//add
$params['Power'] = 'binding:not kindle';
ksort($params);
$caStr = '';
foreach ($params as $k => $v) {
$caStr .= '&'.Util::urlencode_rfc3986($k).'='.Util::urlencode_rfc3986($v);
}
$caStr = substr($caStr, 1);
// 署名を作成します
// - 規定の文字列フォーマットを作成
// - HMAC-SHA256 を計算
// - BASE64 エンコード
$parsedUrl = parse_url($baseurl);
$strToSign = "GET\n{$parsedUrl['host']}\n{$parsedUrl['path']}\n{$caStr}";
$signature = base64_encode(hash_hmac('sha256', $strToSign, AWS_SECRET_ACCESS_KEY, true));
// URL を作成します
// - リクエストの末尾に署名を追加
$url = $baseurl.'?'.$caStr.'&Signature='.Util::urlencode_rfc3986($signature);
//XMLで情報を取得。
$xml = @simplexml_load_file($url);
$dataList = array();
//検索結果データ展開
foreach ($xml->Items->Item as $item) {
$data = new BookInfo();
$data->ISBN = (string) $item->ItemAttributes->ISBN;
$data->ASIN = (string) $item->ASIN;
$data->Title = (string) $item->ItemAttributes->Title;
$data->Author = (string) $item->ItemAttributes->Author;
$data->Publisher = (string) $item->ItemAttributes->Publisher;
$data->PublicationDate = (string) $item->ItemAttributes->PublicationDate;
$data->DetailPageURL = (string) $item->DetailPageURL;
$dataList[] = $data;
}
var_dump($dataList);
とかすればOKです。
ちなみに「Power」パラメータを既に指定していて複数になる場合は、例えば
$params['Power'] = 'binding:not kindle and pubdate:during 12-2013';
のように「and」で繋いであげてください。
最終的にはURLエンコードされて
Power=binding%3Anot%20kindle%20and%20pubdate%3Aduring%2012-2013
のようなパラメータになりますけどね。
Powerパラメータに関する細かいことは
https://images-na.ssl-images-amazon.com/images/G/09/associates/paapi/dg/index.html?PowerSearchSyntax.html
をご覧ください。
取りあえずこれでkindleが除外できたのでスッキリです。
これにて完了\(--)/
category:Amazon Product Advertising API thema:パソコンな日々 - genre:コンピュータ Posted by ササキマコト