| チュウトリアル | |
| |TOP| |1||2||3||4||5||6||インスト1||インスト2||インスト3||Linux| | |
アマゾンAPIの認証方式に対応する
Amazonからのメールによると、Web サービスの名称が変わり、認証が必要になるらしい、、、 名称変更にともない、Product Advertising API にリクエストを送信いただく都度、 認証のための電子署名を含めていただくことが必要になります。 この変更は、2009年5月11日より3ヶ月の間の移行期間の後、2009年8月15日には、 Product Advertising API へ送信されるリクエストは全て認証されることとなり、 認証されない場合、リクエストは処理されなくなります。8月だから、まだいっか・・・。 、と、思ったらいくつか情報発見。
アマゾンAPIを使うのに2009年8月15日から認証が必要になるらしい http://chalow.net/2009-05-09-1.html ここを参考にして、 Secret Access Key は、 http://aws.amazon.com/ へ行って、 「Your Account」→「Access Identifiers」へ移動すると見ることができます。ログインして上の場所へ行くと、認証キーをGETできます。 Your Access Key ID: 1D4P12WWD7KPTPH77H82 Your Secret Access Key: Cwl0Z7Ur1lzuAO9DE0Hz28Nuw7lRdfeMxr5IrXnY
グーグルさんしてみると、PHP用のソースがフォーラム(英語)にあるようです。 ちょっと探すと、ありました。 http://developer.amazonwebservices.com/connect/thread.jspa?threadID=31679 ソースのURLは、こっちのようです。 http://mierendo.com/software/aws_signed_query/ では、動かしてみましょう。 Fatal error: Call to undefined function: hash_hmac() in...「hash_hmac関数が定義されてない」と怒られました、、、「hash_hmac」関数を調べてみます。 http://php.s3.to/man/function.hash-hmac.html http://php.s3.to/man/hash.setup.html ハッシュ拡張モジュールは外部のライブラリを必要とせず、PHP 5.1.2 では デフォルトで有効となります。~略~ それ以前のバージョンの PHP にハッシュ拡張 モジュールを組み込むには、≫ PECL モジュール をインストールします。いまだにPHP4を使っている化石サイトなので、当然入っていませんでした・・・。 PECLでインストールしましょうか。 [php@localhost]#pecl install hashhash.soがインストールされたようなので、php.iniのextensionの項目にhash.soを追加します。 ;extension=yyyy.dll ;extension=xxxx.dll extension=hash.sohttpdをリスタート。 動きません。。。 hash.soの入ってるディレクトリを見ると、1人だけパーミッションが変なようです。 [php@localhost]#chmod 755 hash.soこれで動くようになり、、ませんでした Fatal error: Call to undefined function: simplexml_load_string() in...また怒られました。。。でも、これはXMLをパースする関数なので削除しちゃいます。 そして、手を加えた関数がこちら。
<?php
function aws_request($params){
// Your Access Key ID
$public_key = "1D4sくぁwせPH77H82";
// Your Secret Access Key
$private_key = "Cwl0Z7Ur1lz0000w7lRdfeMxr5IrXnY";
$host="webservices.amazon.co.jp";
$method = "GET";
$uri = "/onca/xml";
$params["Service"] = "AWSECommerceService";
$params["AWSAccessKeyId"] = $public_key;
$params["Timestamp"] = gmdate("Y-m-d\TH:i:s\Z");
$params["Version"] = "2009-01-06";
ksort($params);
$query = array();
foreach ($params as $param=>$value){
$param = str_replace("%7E", "~", rawurlencode($param));
$value = str_replace("%7E", "~", rawurlencode($value));
$query[] = $param."=".$value;
}
$query = implode("&", $query);
$string_to_sign = $method."\n".$host."\n".$uri."\n".$query;
$signature = base64_encode(hash_hmac("sha256", $string_to_sign, $private_key, True));
$signature = str_replace("%7E", "~", rawurlencode($signature));
$request = "http://".$host.$uri."?".$query."&Signature=".$signature;
return file_get_contents($request);
}
// sample
$xml = aws_request(array("Operation"=>"ItemSearch",
"SearchIndex"=>"HealthPersonalCare",
"BrowseNode"=>"171312011",
"ResponseGroup"=>"Images,ItemAttributes,OfferFull"));
echo $xml;
?>
実行サンプル ソースキーワード検索の例:
// 日本語キーワードは関数側でurlエンコードしている, ページはItemPage
$xml = aws_request(array("Operation" => "ItemSearch",
"SearchIndex" => "Books",
"Keywords" => "PHP",
"ItemPage" => 1,
"ResponseGroup"=>"Images,ItemAttributes,OfferSummary,Reviews"));
// PHP4でXML解析をする方法
require_once("XML/Unserializer.php");
$Unserializer =& new XML_Unserializer();
$Unserializer->setOption('parseAttributes', TRUE);
$status = $Unserializer->unserialize($xml);
$val = $Unserializer->getUnserializedData();
print_r($val);
ASIN検索の例:
$xml = aws_request(array("Operation" => "ItemLookup",
"ItemId" => "B000NODF50",
"ResponseGroup"=>"Large"));
ちなみに、以前のURLはhttp://webservices.amazon.co.jp/onca/xml? Service=AWSECommerceService &AssociateTag=letsphp-22 &SubscriptionId=1KSCR3JZ6P65QT1AN702 &Operation=ItemSearch &SearchIndex=HealthPersonalCare &BrowseNode=171312011 &ItemPage=1 &ResponseGroup=Images,ItemAttributes,OfferFullXMLで見る 表示サンプル
LastModified June 14 2009 21:19:10
|
| |HOME||チュウトリアル||使用上の注意||スクリプト||無料鯖情報||BBS||リンク| Copyright(C) 1999-2012 ToR all rights reserved. |