- [を] 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 で固定)