amazonのURL短縮ブックマークレットを多ヶ国に対応させた

アマゾンの商品へのURLをブログに貼りたい時が多々あるのだが、amazonはURLに余計な文字列を沢山つける。本来いらない部分が大半なのでブログに貼り付けるときには最低限のURLで貼りたい。これにもっとも便利なのがアマゾン用のURL短縮化ブックマークレットで、google:amazon url ブックマークレットなどで調べればかなりの数が出てくる。
しかし、これらは基本的にamazon.co.jp(日本法人)にしか対応しておらず、amazon.comはおろかamazon.deなどには基本的に対応していない。また、amazon.comに対応していても基本的にamazon.com専用で、世界のどこのアマゾンでも汎用的に使用できるブックマークレットはなかなかなかった。
そこで、自分で作ることにした。作りたいものは、

amazon(.com|.co.jp|.de|.co.uk|.fr)(つまりアメリカ/日本/ドイツ/イギリス/フランス)に対応したURL短縮化ブックマークレット

である。

コードと変更点

参考というか、ほぼ完成しているものが#!電式ブログ アマゾン短縮URLブックマークレット改で公開されている。こちらのブックマークレットは.co.jpと.comに対応しており、これに他のドメインを追加するだけで基本的には動くはずだ。

主に変更した部分は以下。

  1. .co.jp/.comに加えてドイツ/フランス/イギリスのアマゾンでも動くように.de/.fr/.co.ukを追加
  2. リダイレクトが発生したり、普段見慣れない短縮されたURL(amzn.comなど)だと無用な警戒感を抱かせてしまう可能性があるので、wwwをつけてamznも普通にamazonとした
  3. ダイアログのテキストを修正
  4. amazon以外のサイトや商品のページでないところでブックマークレットを起動した場合でも、ダイアログを出して知らせるようにした
コード
javascript: if (location.href.match(/(http:\/\/www\.amazon\.(com|co\.jp|de|fr|co\.uk))/)) {
    var asin = document.getElementById("ASIN").value;
    if (asin != null) {
        var shorten_url = RegExp.$1 + "/dp/" + asin;
        var result = prompt("クリップボードにURLをコピーしたい場合Ctrl-Cを押してください。\n短縮URLのページへ移動したい場合はOKもしくはEnterを押してください。\nそうでない場合はキャンセルまたはEscapeでダイアログを閉じてください。", shorten_url);
        if (result == shorten_url) location.href = shorten_url;
        else void(0);
    } else alert("商品のページではありません(もしくはブックマークレットのバグで対応できないページなのかもしれません)。");
} else alert("対応サイトではありません。このブックマークレットはamazon.(com|co.jp|de|fr|co.uk)で使えます。");

どうやって公開しようか迷ったのだが、とりあえずはてなのサービスが最初に目についたのでこちらで公開した。

使用方法

使用方法としては、上のbookmarklet:と書かれた部分の右のリンクをブックマークまでドラッグアンドドロップで落とせばいい。あとは各種アマゾンのページに行ったときにこのブックマークレットをクリックすればダイアログが表示されて短縮URLをコピーできるはず。

動作状況と残ったバグ

とりあえず一通り各国amazonのページで実験してみたが、一応正常に動いている模様。ただ、amazonサイト内で商品以外のページにいたときにダイアログを表示するはずが(一つ目のalert)、なぜかうまくいかない。対応サイト以外での警告ダイアログは正常に表示されるので、おそらくjavascriptかその関数の使用上の問題だと思われるが、ぐぐってもnullを返すとしか書かれていないので原因がわからない。javascriptに詳しい方いたらコメント欄で教えてください。

2011/05/20 コードを修正

コメント欄とtwitterでunowenが上記のバグの原因を指摘してくれたので修正。はてなの先のコードはすでに修正されているので、上のリンクから登録してもらえば最新版が入る。

javascript: if (location.href.match(/(http:\/\/www\.amazon\.(com|co\.jp|de|fr|co\.uk))/)) {
    var e = document.getElementById("ASIN");
    if (e != undefined) {
        var shorten_url = RegExp.$1 + "/dp/" + e.value;
        var result = prompt("クリップボードにURLをコピーしたい場合Ctrl-Cを押してください。\n短縮URLのページへ移動したい場合はOKもしくはEnterを押してください。\nそうでない場合はキャンセルまたはEscapeでダイアログを閉じてください。", shorten_url);
        if (result == shorten_url) location.href = shorten_url;
        else void(0);
    } else alert("商品のページではありません(もしくはブックマークレットのバグで対応できないページなのかもしれません)。");
} else alert("対応サイトではありません。このブックマークレットはamazon.(com|co.jp|de|fr|co.uk)で使えます。");