古い記事
ランダムジャンプ
新しい記事
先日公開した、
アマゾンの商品のカスタマーレビューを一気に表示するサイト
「Revilist」ですが[2008-12-25-1]
ASINだけでなく13桁のISBN(ISBN-13)も使えるようにしました。

- Revilist - アマゾンのレビューを一気読み
ttp://revilist.net/

ISBN-13をASIN(ISBN-10)に変換してから、
既存の Revilist の枠組みに投げるようにしています。

■変換ロジック

(1) 13桁の数字文字列から、最初の3文字と最後の1文字を削除する。
9784774133416 → 978[477413341]6 → 477413341

(2) 各桁の数字をそれぞれ左から10倍、9倍、8倍、...、3倍、2倍して合計する。
4×10 + 7×9 + 7×8 + 4×7 + 1×6 + 3×5 + 3×4 + 4×3 + 1×2 = 234
それを11で割った余りを11から引く。
10のときは "X"、11のときは "0" にする。
(「モジュラス11 ウェイト10-2」 ref. Wikipedia:ISBN
234÷11=29 余り3 → 11 - 3 = 8

(3) これを(1)の9桁数字文字列の末尾に足す
"477413341" + "8" → 4774133418

■以上の処理を行うコード片

JavaScript :
asin = isbn13.substr(3,9);
var ck = 0;
for (var i = 0; i < 9; i++) {
  ck += asin.substr(i,1) * (10 - i);
}
ck = (11 - ck % 11) % 11;
asin = asin + ((ck == 10) ? 'X' : ck);

Perl :
$asin =~ s/^\d{3}(\d{9})\d$/$1/;
my $ck;
for (my $i = 0; $i < 9; $i++) {
    $ck += substr($asin, $i, 1) * (10 - $i);
}
my $cs = (11 - $ck % 11) % 11;
$asin .= ($cs == 10) ? "X" : $cs;

■リダイレクト CGI

ISBN-13 を指定して Revilist の ASIN ページへリダイレクトする
CGI も用意しました。
どうぞご利用ください。

使用例:
- ttp://revilist.net/rd/redirect.cgi?isbn=9784774133411
- ttp://revilist.net/rd/redirect.cgi?isbn=4774133418
  (↑ASIN(ISBN-10)でもOK!)
- ttp://revilist.net/rd/9784774133411
  (↑Rewrite しているのでこういうURLでもOK!)

■参考

- 水野貴明 / 俺流amazonの作り方-Amazon Webサービス最新活用テクニック
  (3年弱前の本だけど、いまだにいろいろと参考にしています。)
- ISBNコード(とASIN)のまとめ
  http://www.marusankakusikaku.jp/archives/2007/01/06-isbn-asin.html
- RevlistをISBN-13対応にするスクリプト(SeaHorse/Greasemonkey)
  (風柳亭 - 別館:書庫のある庵 -)
  http://furyu.tea-nifty.com/annex/2008/12/revlistisbn-13s.html
-- RevilistをISBN-13に対応するスクリプト
   http://furyu.tea-nifty.com/script/RevilistPlus.user.js