Amazonの広告を貼るとき、そのHTMLコードは、Amazonアソシエイト公式サイトから直接もらってくるか、Product Advertising APIを使って得た商品データを元に自分でデザインした書式で書くかの二種類があります。
今まで後者の方法を利用したサービスで、G-Toolsというサイトを利用させていただいていたのですが、Product Advertising APIの仕様変更により、おすすめ度の情報が取って来られなくなってしまいました。
おすすめ度が無いと、ぱっと見その商品の評価が伝わりにくいですし、見栄え的にも見劣りします。
そこで、一般のAmazonのページからおすすめ度の情報を取ってくるスクリプトを書きました。
APIが用意されているのにサイトから取ってくると言うのはスマートではありませんし、APIから外された理由を考慮せずにおすすめ度の情報をとり続けることには問題があるかもしれませんが。
それらの点を頭の隅に置いた上で、以下のようなコードを書きましたので、必要な方は参考にして下さい。
// おすすめ度を取得する関数
function get_average_rating($uri) {
$average_rating = array('value' => '', 'v' => '', 'image' => '');
$src = trim(mb_convert_encoding(file_get_contents(preg_replace("/\/\w+?\-22\/$/", "/", $uri)), "UTF-8", "SJIS"));
if (preg_match('/s_star_(\d_\d) " title="5つ星のうち (\d\.\d)"/mui', $src, $match)) {
$average_rating['v'] = str_replace("_", "-", $match[1]);
$average_rating['value'] = $match[2];
}
if ($average_rating['v']) {
$average_rating['image'] = "http://g-images.amazon.com/images/G/01/detail/stars-".$average_rating['v'].".gif";
}
return $average_rating;
}
function get_average_rating($uri) {
$average_rating = array('value' => '', 'v' => '', 'image' => '');
$src = trim(mb_convert_encoding(file_get_contents(preg_replace("/\/\w+?\-22\/$/", "/", $uri)), "UTF-8", "SJIS"));
if (preg_match('/s_star_(\d_\d) " title="5つ星のうち (\d\.\d)"/mui', $src, $match)) {
$average_rating['v'] = str_replace("_", "-", $match[1]);
$average_rating['value'] = $match[2];
}
if ($average_rating['v']) {
$average_rating['image'] = "http://g-images.amazon.com/images/G/01/detail/stars-".$average_rating['v'].".gif";
}
return $average_rating;
}
一応補足しておくと、引数の $uri は商品ページのURLで、戻り値の配列は $average_rating['value'] がおすすめ値、 $average_rating['image'] がそれを表す星画像のURLです。
なお、久しぶりにPHPで書きました。:D