ハイフン無しのISBNを渡すとハイフン付きのJSONPを返すサービスを作ってみた

中身的にはBusiness::ISBN - work with International Standard Book Numbers - metacpan.orgを呼んでJSONPにして返すだけですが、ニッチな需要があるのでw
2008年10月ぐらい?のデータを元にしているので全部のパターンには対応出来ていないのが残念ではありますが

サンプル画面

http://natu.blue.coocan.jp/isbntest.htmlにアクセス

    • 入力エリアにISBNを入力(ISBN-10またはISBN-13)

http://img.skitch.com/20090110-8s4hmrtr1fq2q22xuwi82rmtch.png

http://img.skitch.com/20090110-c2h6gpen4eybigfbruanxi65ce.png

    • 桁数が合ってないとエラーになる

http://img.skitch.com/20090110-m23crmjhkiat216gtgqc3aj4n4.png

    • 99945(Namibia)以降が対応されてない

http://img.skitch.com/20090110-kxqmen69155s77pt9inyie4itg.png

JSONPのURL

http://natu-n.com/cgi/ISBN.cgi?isbn=ISBN-13(10)&callback=コールバック名
ただしcallbackはオプション

レスポンス例

  • ISBN(10桁または13桁)を渡して取得する
callback({
   "isbn10" : "4150116784",
   "isbn10e" : "4-15-011678-4",
   "isbn13" : "9784150116781",
   "isbn13e" : "978-4-15-011678-1",
   "success" : true
})
  • 与えたISBNが正しくない(桁数)とfalseで帰る
callback({
   "success" : false
})
  • callback=コールバック名で任意のコールバック名で取得出来る
callbacks({
   "isbn10" : "4150400083",
   "isbn10e" : "4-15-040008-3",
   "isbn13" : "9784150400088",
   "isbn13e" : "978-4-15-040008-8",
   "success" : true
})

サンプルソース(HTML+JS)

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html lang="ja">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <script type="text/javascript" src="lib/jquery-1.2.6.pack.js"></script>
    <title>TEST</title>
    <script type="text/javascript">
        /* <![CDATA[ */
$(document).ready(function() {
    $("#isbn").keydown(function(e) {
        if (e.which == 13) {
            return false;
        }
    });
    $("#btn").click(function() {
        $("#success").text("");
        $("#isbn10").text("");
        $("#isbn10e").text("");
        $("#isbn13").text("");
        $("#isbn13e").text("");
        $.ajax({
            url : "http://natu-n.com/cgi/ISBN.cgi",
            dataType : "jsonp",
            data : {
                isbn : $("#isbn").val()
            },
            success : function(json){
                // ロード完了時にここが呼ばれる
                $("#success").text(json.success);
                if ( json.success == true ) {
                    $("#isbn10").text(json.isbn10);
                    $("#isbn10e").text(json.isbn10e);
                    $("#isbn13").text(json.isbn13);
                    $("#isbn13e").text(json.isbn13e);
                }
            },
            error : function(){
                alert('error');
            }
        });
    });
});
        /* ]]> */
    </script>

</head>
<body>
<h2>ISBNを入力(10または13桁)</h2>
<form id="iform" name="iform">
    <input type="text" id="isbn" name="isbn" size="13">
    <input type="button" id="btn" value="変換">
</form>
<table>
    <tdoby>
        <tr><td>status</td><td>:</td><td id="success"></td></tr>
        <tr><td>isbn10</td><td>:</td><td id="isbn10" ></td></tr>
        <tr><td>isbn10e</td><td>:</td><td id="isbn10e"></td></tr>
        <tr><td>isbn13</td><td>:</td><td id="isbn13" ></td></tr>
        <tr><td>isbn13e</td><td>:</td><td id="isbn13e"></td></tr>
    </tbody>
</table>
</td>
</body>
</html>