読者です 読者をやめる 読者になる 読者になる

たこさんちゃんねる

WEBであったり、写真であったり、カメラであったり、旅行とか、なんかそんな感じとかでどうでしょうか。

PHPでamazonAPIを使う時の覚書き「そのいち」

WEBの話

 

アマゾンのAPIを使いたいということで、いろいろ調べた結果。

あんまり新しい情報がなくて困った。

2009年で少し変化があったらしく、

新しく、「AssociateTag」を入れなくちゃいけないらしい。

参考にしたサイト

APIの準備編

登録~アクセスキー、シークレットキーの取得まで。

http://www.ajaxtower.jp/ecs/pre/

キーを取得してから、コード書き。ベース

http://d.hatena.ne.jp/p4life/20090510/1241954889

<?php

// Access Key ID と Secret Access Key は必須です

$access_key_id = 'ここに Access Key ID を入力';

$secret_access_key = 'ここに Secret Access Key を入力';

// RFC3986 形式で URL エンコードする関数

function urlencode_rfc3986($str)

{

return str_replace('%7E', '~', rawurlencode($str));

}

// 基本的なリクエストを作成します

// - この部分は今まで通り

$baseurl = 'http://ecs.amazonaws.jp/onca/xml';

$params = array();

$params['Service'] = 'AWSECommerceService';

$params['AWSAccessKeyId'] = $access_key_id;

$params['Version'] = '2009-03-31';

$params['Operation'] = 'ItemSearch'; // ← ItemSearch オペレーションの例

$params['SearchIndex'] = 'Books';

$params['Keywords'] = 'もやし'; // ← 文字コードUTF-8

// Timestamp パラメータを追加します

// - 時間の表記は ISO8601 形式、タイムゾーンUTC(GMT)

$params['Timestamp'] = gmdate('Y-m-d\TH:i:s\Z');

// パラメータの順序を昇順に並び替えます

ksort($params);

// canonical string を作成します

$canonical_string = '';

foreach ($params as $k => $v) {

$canonical_string .= '&'.urlencode_rfc3986($k).'='.urlencode_rfc3986($v);

}

$canonical_string = substr($canonical_string, 1);

// 署名を作成します

// - 規定の文字列フォーマットを作成

// - HMAC-SHA256 を計算

// - BASE64 エンコード

$parsed_url = parse_url($baseurl);

$string_to_sign = "GET\n{$parsed_url['host']}\n{$parsed_url['path']}\n{$canonical_string}";

$signature = base64_encode(hash_hmac('sha256', $string_to_sign, $secret_access_key, true));

// URL を作成します

// - リクエストの末尾に署名を追加

$url = $baseurl.'?'.$canonical_string.'&Signature='.urlencode_rfc3986($signature);

echo $url; // ← この URL にアクセスすれば、API リクエストができます

まるっとベースを使わせていただきました。

しかしながら情報がお古なようでして、そこに、

アソシエイトID情報、ベース部分、XMLでの取得まで、

http://mayer.jp.net/?p=1086

 

$access_key_id='自分のアクセスキーID';

$secret_access_key='自分のシークレットアクセスキー';

$AssociateTag='自分のアソシエイトID-22';//←これを追加

 

$baseurl='http://ecs.amazonaws.jp/onca/xml';

$params=array();

$params['Service']='AWSECommerceService';

$params['AWSAccessKeyId']=$access_key_id;

$params['Version']='2011-08-01';

$params['Operation']='ItemSearch';//商品名や著者名でキーワード検索

$params['SearchIndex']='All';

$params['Keywords']='進撃の巨人';//文字コードUTF-8

$params['AssociateTag']=$AssociateTag;//自分のアソシエイトIDを追加

$params['ResponseGroup']='Medium';//取得したい情報の種類に合わせ追加

 

で、使わせていただきました。

ここまで来て、

$params['Keywords']='進撃の巨人';//文字コードはUTF-8

の部分の進撃の巨人さんたちの情報が取得出来ました。

こっから、先ほどと同じサイトさんの

http://mayer.jp.net/?p=1098

 

$amazon_xml=simplexml_load_string(@file_get_contents($url));//エラーを起こすのがイヤなので、ついでに@を追加

foreach((object) $amazon_xml->Items->Item as $item_a=>$item){//ここに注目

$title=$item->ItemAttributes->Title;//商品名

$detail=$item->DetailPageURL;//商品のURL

$image=$item->MediumImage->URL;//画像のURL

print '<div style="clear:both;"><a href="'.$detail.'" target="_blank"><img src="'.$image.'" align="left" />'.$title.'</a></div>';

unset($item);

}

ここで、XMLをオブジェクトにしてとる方法を拝借

そして、

まぁ、上のメタ情報で、charset=UTF-8にしないとはんぱなく文字化けするので、ちゃんと、

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

 

 

で、あとは、適当にサーチフォーム作って、$_POSTで受け取って、

さっきの$params['Keywords']='進撃の巨人';//文字コードはUTF-8を、

$params['Keywords']= $_POST['search'];//文字コードはUTF-8

とかにすればいける。

ひとまず、覚書。