拙作AAA(Amazon Associate Assistant)などで実現していたJavaScriptによる非同期のAmazon.co.jpへの詳細情報リンクを生成するCGIをおまけとしてβ2より添付します。
なお、レンダリング結果自体はASIN:xxxx:detail記法の結果と同じです・・・というか、同じ処理を流用しています。
[asin:4097275119:async]
と記述すると、このように展開されます。
実際の中身はこのようになっています。
<script src="/blog/asin_js.cgi?asin=4097275119"> </script>
あくまでも処理発生の非同期化をしているため、アクセス数が多いとその都度Amazon Web Servicesをつかうことになり、サーバ負荷増大に繋がります。
File::FileCacheモジュールが使用可能なサーバではAmazonへの問い合わせを一定時間プールできるのでその辺も活用していただきたいと思います†1。
尚、非同期なので、発売前→発売後→品切れ→再入荷などのタイミングで表示内容が随時(ほぼ)リアルタイムに変わります。これが一番便利なところかもしれませんね。
async記法の出力内容自体は(現在)Text::Sukeroku::Kiseruに指定する形になります。
sub amazon_async_tmpl{ return << "END_OF_TMPL"; <script src="/blog/asin_js.cgi?asin=<TMPL_VAR NAME="Asin">"> </script> END_OF_TMPL }
拙作のCGIよりももっと高機能・ハイクオリティの外部サービスをお使いの場合はこの辺を書き換えていただいたらよいかと。
あと、出力時のエンコーディングも指定できます。
asin_js.cgi?asin=ASINコード&enc=文字コード
文字コードは以下のものを指定できます(指定するのは左側の文字列です)
- sjis
- Shift_JIS
- jis
- JIS(ISO-2022-JP)
- euc
- EUC-JP
- utf8
- UTF-8
EUC-JPで出力されているサイトの場合、次のようなカタチとなります。
sub amazon_async_tmpl{ return << "END_OF_TMPL"; <script src="/blog/asin_js.cgi?asin=<TMPL_VAR NAME="Asin">&enc=euc"> </script> END_OF_TMPL }
ちなみにリファラのチェックなど厳格なことはやってません。
外からアクセスされてもアソシエイトIDは自分のものなので、勝手にやってちょーだいというスタンスでよいかと思います(笑)
- †1: このサーバ自体はFile::FileCache入ってないのです…。負荷が結構かかりますです orz