Prev / Next

2009-03-20 / ASIN入りアマゾン商品画像URLリダイレクトCGIの雛形を Ruby で

- [を] ASIN入りアマゾン商品画像URLリダイレクトCGIの雛形
  http://chalow.net/2009-03-18-1.html
を Ruby で書いてみた(特に書き直す意味もないけど,
Amazon Web Services を使ったことがないので,試しに).

#!/usr/bin/ruby

require 'cgi'
require 'open-uri'

AWS_ID = "key"

q = CGI.new
asin = q["a"]
size = q["s"].empty? ? "s" : q["s"]

aurl = "http://webservices.amazon.co.jp/onca/xml?" +
  "Service=AWSECommerceService&" +
   "AWSAccessKeyId=#{AWS_ID}&" +
   "Operation=ItemLookup&ItemId=#{asin}&ResponseGroup=Images"
res = open(aurl).read

url = ""
case size
when "s"
  url = res.scan(/<SmallImage><URL>(.+?)</)[0].to_s
when "m"
  url = res.scan(/<MediumImage><URL>(.+?)</)[0].to_s
when "l"
  url = res.scan(/<LargeImage><URL>(.+?)</)[0].to_s
end

url = "http://...1x1.jpg(1x1画像のURL)" unless url

puts "Location: #{url}\n\n"


(※たつをさんの「雛形」同様、セキュリティとかエラー処理とかはご自分で)

まあ,これはどうでもよくて,Rewrite の方.

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^img/([A-Z0-9]+)-([sml])\.jpg$ /amaimg.cgi?a=$1&s=$2 [L]


RewriteCond でリクエストされたファイルが存在しなければ,
rewrite を行ない cgi に飛ばし,画像をキャッシュする.

なので,chalow の Amazon のイメージ付きリンクの作成 plugin は以下のように,
http://..../img/[ASIN]-[SIZE].jpg を表示するようにすればいいはず
(まだ試してない).

sub amazon_img {
my ($asin, $str) = @_;
my $prefix = "http://www.amazon.co.jp/exec/obidos/ASIN";
my $imageprefix = "http://.../img/"; # 画像を cache したディレクトリ
my $suffix = "ftnk1221-22/ref=nosim"; # アソシID使用時
$str =~ s/(\s|^)(\S+\.(jpg|jpeg|png|gif))/$1<img src="$2">/gi;
$str =~ s/$/<br>/gm;
$str =~ s/<br>\Z//m;
my $image = "<img src=\"$imageprefix/$asin-m.jpg\">";
return qq(<a href="$prefix/$asin/$suffix">$image</a><a href="$prefix/$asin/$suffix">$str</a>);
}


(すでに使用している plugin を変更するのは面倒なので,サイズは m で固定)

comments powered by Disqus