月別アーカイブ: 2010年9月

セブンネットショッピングAPIをPHPで動かしてみた。


セブンネットショッピングAPIが公開されたので早速動かしてみようと思ったら、
Amazonのような認証が必要なことがわかった。
PEARのServices_Amazonのようなモジュールはまだないようなので、
もやし日記さんのAmazon向けのPHPサンプルを参考に、セブンネットショッピングAPI版の認証PHPを作ってみた。

動作サンプル

// PHPコードここから
<html>
<head>
<meta http-equiv="Content-type" content="text/html; charset=UTF-8">
</head>
<body>
<?php
$api_user_id = '<あなたのAPIユーザキー>';
$secret_access_key = '<あなたの秘密キー>';
$baseurl = 'http://api.7netshopping.jp/ws/affiliate/rest/SearchProduct';
$params = array();
$params['ApiUserId'] = $api_user_id;
$params['Version'] = '2010-08-01';
$params['Timestamp'] = gmdate('Y-m-dTH:i:sZ');
$params['CategoryCode'] = 'books';
if($_GET['q'] != ""){
$params['KeywordIn'] = $_GET['q'];
}
else{
$params['KeywordIn'] = 'ワンピース'; // 初期キーワード
}
function urlencode_rfc3986($str){
return str_replace('%7E', '~', rawurlencode($str));
}
$enbaseurl = urlencode_rfc3986($baseurl);
ksort($params);
$canonical_string = '';
$query_string = '';
foreach ($params as $k => $v) {
$canonical_string .= urlencode_rfc3986('|'.$k.'='.$v);
$query_string .= '&'.$k.'='.urlencode_rfc3986($v);
}
$query_string = substr($query_string, 1);
// 署名を作成
$string_to_sign = "GET%7C{$enbaseurl}{$canonical_string}";
$signature = base64_encode(hash_hmac('sha256', $string_to_sign, $secret_access_key, true));
// URLを作成
$url = $baseurl.'?'.$query_string.'&Signature='. $signature;
$baseEnc = "UTF-8";
$contents = file_get_contents($url);
$contents = preg_replace("/aff:/","",$contents);
mb_language("Japanese");
mb_internal_encoding("UTF-8");
mb_detect_order("ASCII,JIS,UTF-8,EUC-JP,SJIS");
$targetEnc = mb_detect_encoding($contents);
if ( $targetEnc != $baseEnc ) {
$contents = mb_convert_encoding($contents, $baseEnc, $targetEnc);
}
$xml = simplexml_load_string($contents);
$TotalAmount = $xml->TotalAmount;
print <<< DOC_END
<form action="./" method="get">
<input type="text" name="q" value="{$_GET['q']}">
<input type="submit" value="検索">
</form>
<ol>
DOC_END;
foreach ($xml->Products->Product as $item){
$ProductCode = $item->ProductCode;
$ProductName = $item->ProductName;
$AffiliateUrl = $item->AffiliateUrl;
$PersonName = $item->PersonName;
$Manufacturer = $item->Manufacturer;
$IsbnCode = $item->IsbnCode;
$SalesPrice = $item->SalesPrice;
$SalesPrice = preg_replace("/(d{1,3})(?=(?:ddd)+(?!d))/","$1,",$SalesPrice);
$ImageUrl = $item->ImageUrl;
$SmallImageHeight = $item->SmallImage->Height;
$SmallImageWidth = $item->SmallImage->Width;
print <<< DOC_END
<li id="$ProductCode">
<dl>
<dt><a href="$AffiliateUrl" target="_blank" title="$ProductName"><img src="$ImageUrl" alt="$ProductName" height="$SmallImageHeight" width="$SmallImageWidth"></a></dt>
<dd><a href="$AffiliateUrl" target="_blank">$ProductName</a></dd>
<dd>$PersonName</dd>
<dd>$Manufacturer</dd>
<dd>$IsbnCode</dd>
<dd><strong>{$SalesPrice}</strong>円</dd>
</dl>
</li>
DOC_END;
}
print <<< DOC_END
</ol>
DOC_END;
?>
</body>
</html>
// PHPコードここまで

▼参考URL
セブンアフィリエイトAPI
セブンネットショッピング、API公開の独自アフィリエイトサービスを開始
Services_Amazon
AmazonのProduct Advertising APIを利用するにはHMAC-SHA256が必要らしい
もやし日記 Amazon Product Advertising API への対応(PHP版)