Amazon.co.jpのURLを短くする

誰かに書籍を紹介するときにamazonはとても便利だけど,唯一の不満はURLが長ったらしいこと.ISBN10がわかっていれば簡単なURLにすることができるのは知っていたけれど,もっと短くすることができるということを知った.


誰かやってないかなぁ,と思って3分くらい調べたけれど見つからなかったので,変換結果をストックする機能もつけたCGIを作ってみた.Kogai Dan氏のようにかっこよく5分で.と言いたいところだが,実際は30分くらいかかっています.これが若さか...
Amazon.co.jpのURLを短くするなんか
使い方:長ったらしいURLを入力して変換ぼたんをぽちっ

ブックマークレット(ポップアップに変換後URLを表示)を作ろうと思ったけれど,やめました.世界のどこかに必要とする人がいれば作ろうと思います.

そーすこーど

#!/usr/bin/perl
use strict;
use warnings;
use CGI;

my $cgi = new CGI();
my $input_url = $cgi->param('url');
my $records = $cgi->param('records');

# print header
print "Content-type:text/html;charset=UTF-8\n\n";
print <<"EOD";
<html><body>
EOD

my $BASE_URL = "http://amazon.jp/";
my $converted_url;

if ($input_url && $input_url =~ m<http://(www.)?amazon(.co)?.jp.*/(dp/\d{9}(\d|X))>){
  $converted_url = $BASE_URL . $3;

  # add new input url as records
  if ($records){
    $records = $converted_url . '&' . $records;
  }else{
    $records = $converted_url;
  }
}

# print form
print <<"EOD";
<h2>Amazon.co.jpのURLを短くするなんか</h2>
<form method="POST" action="./amzurl.cgi">
  <input type="text" name="url" size="120"><br />
  <input type="hidden" name="records" value="$records">
  <input type="submit" value="へんかん"><br />
</form>
<hr />
EOD

# print records
if ($records){
  my @recorded_url_list = split /&/, $records;
  print "<ul>\n";
  foreach my $recorded_url (@recorded_url_list){
    print "<li>$recorded_url</li>\n";
  }
  print "</ul>\n";
}

# print footer
print "</body></html>\n";