Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Amazon API の大掛かりな仕様変更[2009-05-09-1]まであと半月。
みなさん準備はどうですか?

私は、アマゾンAPIを使っている個別サービスの数が多いので、まずは Perl で自分用 Amazon Product Advertising API proxy CGI を作って当面の対処をすることにしました。
名前は PAPAXY(パパクシィ)。
「Perl Amazon Product Advertising api proXY」の略です。
テキトー

今までの amazon api の URL、
http://webservices.amazon.co.jp/onca/xml?...
のかわりに下記のように自分用 URL を使うことにしました。
http://PAPAXY_URL/api.cgi?...
「?」以降のパラメータは今までと同じです。
URL を変更するだけで使えます。
実行結果XMLも今までとまったく同じです。

コード


サーバが非力なので、みなさんに自由に使って頂ける API proxy を提供できません。
コードだけ公開しますので、自分のサーバに置いて好きなように使ってください。

#!/usr/bin/perl -T
use strict;
use warnings;
use Digest::SHA qw(hmac_sha256_base64);
use URI::Escape qw(uri_escape);
use CGI;
use LWP::Simple;
use POSIX qw(strftime);

my $q = new CGI;

my %pkv;
foreach my $k ($q->param) {
    $pkv{$k} = $q->param($k);
}
$pkv{"Timestamp"} = strftime("%Y-%m-%dT%H:%M:%SZ", gmtime);

my $pstr = join('&', map {"$_=".uri_escape($pkv{$_})} (sort keys %pkv));
my $data = "GET\nwebservices.amazon.co.jp\n/onca/xml\n$pstr";
my $key = "Your Secret Access Key";
my $signature = hmac_sha256_base64($data, $key);
$signature .= '=' while length($signature) % 4;
$signature = URI::Escape::uri_escape($signature);

my $aurl = qq(http://webservices.amazon.co.jp/onca/xml?)
    .qq($pstr&Signature=$signature);

print $q->header(-type=>'text/xml; charset=UTF-8');
print get($aurl) || "";
print "\n";
(ライセンス的なもの:http://lifehacks.ta2o.net/byebye-copyright.html

関連情報


- [を] アマゾンAPIを使うのに2009年8月15日から認証が必要になるらしい[2009-05-09-1]

- Product Advertising API 開発者向けガイド リクエストの署名認証について(参考訳)
https://affiliate.amazon.co.jp/gp/associates/help/t126

- Amazon API認証のPROXYを書いたよ (ただのにっき)
http://sho.tdiary.net/20090619.html#p01
  Ruby による proxy。

- Ajax - AWS Caching Proxy w/ Authentication Support (404 Blog Not Found)
http://blog.livedoor.jp/dankogai/archives/51227901.html
  データをそのまま受け渡す proxy ではないけど。