AmazonSearch プラグインのProduct Advertising API対応
AmazonSearch プラグインなどのFreeStyleWiki用プラグインは、Amazonが提供している商品情報へのリンク作成用WebAPIを利用しています。
ひと月ほど前のAmazonからのメールで、このAPIの仕様が変わって電子署名による認証が必要になるということを知りました。3か月の移行期間をおいた2009/08/15からは、認証されないリクエストは受け付けなくなるとのこと。
8月まではまだ間があるのと、面倒くさいのとでほったらかしにしていた、このProduct Advertising APIの電子署名認証への対応ですが、やっとこさ重い腰を上げて取りかかることにしました。
やってみるとこれが予想どおり結構面倒。
以下に、インストールの手順を記しておきます。
- Digest::SHAのインストール
- インストールしたモジュールのパスの追加
- AmazonPAPI.pmのインストール
- lib以下のURIモジュールの更新
- Unicode::RecursiveDowngradeのインストール
- AmazonSearch.pmの修正とインストール
- 参照情報
Digest::SHAのインストール
電子署名の生成のために、モジュールDigest::SHAが必要になるのですが、インストールにはコンパイルを伴います。これは「lib以下にソースをコピーするだけ」という方法ではインストールできないということ。
実は、PurePerlのものもあるのですが、スピードのためと、今後、このサイトが運用されているさくらインターネットのレンタルサーバーには入っていない、いろんなモジュールをインストールしたくなったときのために、ちょうどいい機会なので、一般ユーザー環境へのCPANモジュールのインストールにチャレンジしてみました。
と言っても、こちらのページに書かれているとおりの手順で環境を整えたら、おもむろにCPANシェルから、
cpan[1]> install Digest::SHA
とやればOK。
もちろん、lib以下にPurePerl版をコピーしてインストールしてもOKのはずです(確かめてませんが)。
インストールしたモジュールのパスの追加
上記でインストールしたモジュールがFreeStyleWikiのプラグインから使えるように、一般ユーザー環境でのCPANモジュールのパスを、FreeStyleWikiのwiki.cgiに追加します。
wiki.cgiの22行目辺りの以下の行に、
use lib './lib';
一般ユーザー環境でCPANモジュールをインストールしたパスを追加します。
use lib qw(./lib /home/xxxxxxxxx/local/lib/perl5/);
AmazonPAPI.pmのインストール
以下のページから、AmazonPAPI.pmをダウンロードして、lib以下にインストールします。
lib以下のURIモジュールの更新
上記でインストールしたAmazonPAPI.pmは、内部でURI::Escape::uri_escapeを呼んでいるのですが、どうやらFreeStyleWikiに標準で添付されているlib以下のURIモジュールのバージョンが古いらしく、うまく動いてくれません(エラーになって、AmazonSearch プラグインがインストールされていません、と表示される)。
よって、このURIモジュールを新しいもので上書きします。
以下のモジュールを、lib以下に上書きしてインストールすればOK。
ちなみに、さくらインターネットの、私が使っているサーバーにインストールされているURIモジュールのバージョンは、2008/06/21現在「1.37」と、充分新しいものでしたので、わざわざ上書きインストールしなくても、lib以下からURI.pmとURIのディレクトリを削除しただけでエラーは出なくなりました。
Unicode::RecursiveDowngradeのインストール
さらに以下のモジュールを、lib以下にインストールします。
AmazonSearch.pmの修正とインストール
まず、こちらのページの手順を参考に、Amazon Product Advertising API のアカウントを作成します。
次に、以下のファイルをダウンロードしたら、
- amazonsearch.zip(284)
AmazonSearch.pmの
- 98行目の変数「$AccessKeyId」に、取得した AccessKeyId を
- 99行目の変数「$SecretAccessKey」に、取得した SecretAccessKey を
- 100行目の変数「$AssociateTag」に、取得した AssociateTag を
それぞれ設定します。
なお、125行目のハッシュの値に、アフィリエイトIDを入れるといいはずですが、自分がもってないもんで、うまく動くかどうか確かめてません。
その後、plugin以下に、ダウンロードしたファイル(修正したAmazonSearch.pmを含む)をディレクトリごとコピーして、インストールします。
以上でインストール作業は完了です。
使い方などは、従来のAmazonSearch プラグインのままです。
参照情報
- Amazon アソシエイト Web サービスの名称変更および署名認証についてのお知らせ
- ほぼ同じ内容のメールが、5月の頭にアマゾンから届きました。
- Amazon Product Advertising API
- 今のところ、Product Advertising API 開発者向けガイド リクエストの署名認証について(参考訳)が参考になります。
- local::libを使った非rootでのCPAN環境構築
- これは便利。ありがとうございます。
- perl - URI::Amazon::APA released!
- 最初はこれを使おうとしたのですが、なかなかうまく動かず断念(後になって考えてみると、FreeStyleWikiのlib以下にあるURIが古かったのが悪かったようだが、これを使おうとしていた時点ではそのことに気づいてなかった)。
- 知らないことがあってもへっちゃらさ:「Amazon Product Advertising API」 にリクエストする Perl モジュールを書いてみた
- で、代わりにAmazonPAPI.pmを使うことにしました。コメントが日本語なのもうれしい。ありがとうございます。
追加
- 2009/08/01に、Ykpamazon プラグイン、Tdamazon プラグインのAmazon Product Advertising API対応のために、WebAPIとのやりとりの部分をモジュールとして利用できるよう修正しました。
- 2011/07/27に、AssociateTag(アフィリエイトのトラッキングID)の必須パラメータ化に対応しました。
関連ページ