【webapi】Amazon/AWSからデータを取得してみる

開発ざれごとamazon,AWS,php,webapi

sc20111023192323

アフィリサイトがあるんですが、ちまちまコード貼り付けるのが億劫で、面倒この上ありませぇん。

自分も技術者の端くれっだった事を思い出してしまったので重い腰を、いまさら上げてみようと思って、かれこれ数年。

・・・いや、実際に行動してみた。以下覚書。 追記

 

ValueCommarceのWebAPIは、Tokenさえ取ればいとも簡単に、取得できます。取得タイプは、RSS2.0形式でした。驚きです。但し、独自タグですので、RSSリーダーじゃ読めません。

A8.netは、提供してねぇのかよ!マジッすか。

次はYahoo API辺りを試してみようと思ったが、Amazon/AWSを攻めてみる。

ただのネットショップとは思えない技術傾倒に、日本国内ショップのショボさ加減を感じながら・・。

まず、AmazonのアフィリエイトIDは所有してるが、これとは別にIDを取得しないといけない(Amazon Product Advertising)※そう、つまりWebAPIと、アフィリは別物なので、問い合わせの段階で、アソシエイトIDを付与しないといけない

英語サイトでの登録作業になるが、ここで(自分の場合)つまづいた。

以前、USA amazonで買い物をした事があって、その時に取ったIDが邪魔をして、メールの登録のところで弾かれてしまった(日本Amazonと同じものにして、問題なかったんですけど)

個人情報を登録後、シークレットコードとアクセスキーを取得メモしておきます。

後は、レッツアクセスぅ~と思いきや、コード上で署名手順というものが必要なんだそうで、そのまま手書きアクセスはできないらしい。

以下、Amazonさん提供の署名を付与するというコード(PHP)。ここから出てきたアドレスにアクセスすれば良いとの事らしい。暗号化してるようです。

/*
* Amazon Product Advertising API 向け 電子署名付加関数
*
*     author  : Takahiro Baba (http://ringoon.jp/)
*     license : クリエイティブ・コモンズ 表示 2.1 日本 ライセンス
*               (http://creativecommons.org/licenses/by/2.1/jp/)
*     version : 0.4 (2009/05/16)
*
*/

function add_signature($url){

    // "Your Secret Access Key"
    $secret_key = " シークレットコード ";
    $ret_char = "n";
    $url_array = parse_url($url);
    parse_str($url_array["query"], $param_array);
    $param_array["Timestamp"] = gmdate("Y-m-dTH:i:sZ");
    ksort($param_array);
    $str = "GET".$ret_char.$url_array["host"].$ret_char.$url_array["path"].$ret_char;
    $str_param = "";
    while( list($key, $value) = each($param_array) ){
        $str_param =
        $str_param.strtr($key, "_", ".")."=".rawurlencode($value)."&";
    }
    $str = $str.substr($str_param, 0, strlen($str_param)-1);
    $signature = base64_encode( hash_hmac("sha256", $str, $secret_key, true) );
    $url_sig =
        "http://".$url_array["host"].$url_array["path"]."?".
    $str_param."Signature=".rawurlencode($signature);
    return $url_sig;
}

実際にアクセスに使うリクエストですが、さすがAmazonさんです。初見さんには厳しい。

なんとか、ドキュメントを読んでこんな感じでアクセスしてみました。

http://ecs.amazonaws.jp/onca/xml?Service=AWSECommerceService&AWSAccessKeyId=アクセスキー&AssociateTag=アソシエートID&Operation=ItemSearch&SearchIndex=Electronics&Condition=New&Keywords=memory&Version=2009-01-06&ResponseGroup=Large&Sort=salesrank&ItemPage=1

ながーいですよねぇ。

これは、日本Amazon対象で、エレクトロニクスで、新製品で、”memory”で検索という意味になります。さらに、検索結果は、詳細で、売り上げ順でソートします。

ちなみに、検索は最高10件までしか表示できません。さらに、ページ指定も行えますが、400ページまでが制限のようです。つまりは、全商品を舐めるのは無理。

10件とはいえ、これだけでも150KBのシロモノが返ってきますよ。おとろしい

また、リクエストコードは、検索対象によって、使える or 使えないなどの細かい制限事項があるので、やはりちゃんとドキュメントを見ないとだめです。

エラーコードは、日本語で解りやすく返してくれるので、レスポンスを見ておけば解決も早い。日本Amazonの技術者さんに感謝です。

こちらが日本語のProduct Advertising APIドキュメント(開発者ガイド)です。英語だけかよ!とか思ってたら、ちゃんとありましたよ。

https://images-na.ssl-images-amazon.com/images/G/09/associates/paapi/dg/index.html?SellerLookup.html

★マークの評価がなんでかとれてないなぁ・・と、思ったら、これは取れないものらしい。AverageFeedbackRatingは、違うようだ。

さて、なにをしようかな。

追記。

Yahoo APIも試してみた。こちらも、APP-IDだけで手軽に利用できた。まだ、ドキュメントを読んでないんで、何ができるのかは分からないけんども。

開発ざれごとamazon,AWS,php,webapi

Posted by nabe