ご自分で図書館データを作成することで、対応図書館を増やすことが可能です。 作成には、HTTPとJavaScriptの基礎的な知識が必要です。 慣れたら5分程度で作成できます(簡単なものの場合)。
自作スクリプトはGreasemonkey版のみの対応です。よって、このページに書いてあることはGreasemonkey版でしか使えません。
なお、既存のデータがこちらで参照できますので、こちらを参考にしながら作成されるのが最も良いかと思います。
前提として、Live HTTP Headersアドオンが入っているものとします。HTTPのRequestとResponseを見ることが出来ればいいので、他のツールでもかまいませんが、今回の説明では同ツールを使います。
まず、対象となる図書館を選んでみます。今回は、(以前住んでいたことのある)横浜市立図書館を選びました。
図書館を選んだら、libconfig.jsファイルの中より図書館のIDを調べます。横浜市のIDはp14100であることがわかりました。
次に、テスト用の書籍を選んでみます。図書館を表示しているのとは別のウィンドウで作業した方が便利です。図書館が蔵書している必要があるので、ベストセラー系か定番系を当たるのが良いでしょう。今回はチーム・バチスタの栄光(単行本)を選んでみました。
書籍を選んだら、その書籍のISBN番号を調べます。10桁のものと13桁のものがありますので、桁数を数えてみてください。Amazonだと10桁、bk1だと13桁を使っているようです。Amazonだと↓このあたりに書かれてます。
Live HTTP Headersを開き、図書館検索サービスからこのISBNを使って検索をかけ、その際のRequestヘッダを確かめます。 なお、ISBN検索が使えない場合、Bibliwoでは対応できません。その場合でも、「対応不可」と表示するためのデータを用意した方が便利なので、ご報告いただければ対応します。
今回はISBNが4796650792ですので、検索ページからこのISBNで検索をかけてみます。すると、Requestのヘッダが以下のようになりました。
http://www.lib.city.yokohama.jp/cgi-bin/Swissken.sh?0+72+0 POST /cgi-bin/Swissken.sh?0+72+0 HTTP/1.1 Host: www.lib.city.yokohama.jp User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; ja; rv:1.8.1.14) Gecko/20080404 Firefox/2.0.0.14 Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5 Accept-Language: ja,en-us;q=0.7,en;q=0.3 Accept-Encoding: gzip,deflate Accept-Charset: UTF-8,* Keep-Alive: 300 Connection: keep-alive Referer: http://www.lib.city.yokohama.jp/cgi-bin/Swwwsmin.sh?0 Content-Type: application/x-www-form-urlencoded Content-Length: 271 ktyp0=SHK&key0=&itfg0=F&ron0=m&ktyp1=ATK&key1=&itfg1=F&ron1=m&ktyp2=SPK&key2=&itfg2=F&ron2=m&ktyp3=KEK&key3=&itfg3=F&ron3=m&ktyp4=KJK&key4=&itfg4=F&tgid=010A&tkey=4796650792&sgid=SPNO&kkey=&kmonth=00&skey=&smonth=99&srkb0=1&srkb1=1&srsl0=1&srsl1=1&srsl2=1&srsl3=0&lcbs=or
ここで見るべきことは、
この3点です。
ここで得られた情報を使って、スクリプトを書いてみます。 横浜市図書館を問い合わせ対象とするよう、「図書館の設定」から設定変更します。未実装と表示されるはずです。
ブラウザの右下の猿アイコンを右クリックし、「ユーザスクリプトコマンド > Bibliwo - register test script」を選択します。
スクリプトを書き込む領域が出てきました。ここに典型的な図書館データ(これとか)をコピペし、プロパティを書き換えます。
また、先ほど Live HTTP Headersを使って得た情報をもとに、queriesメソッドが返値として投げているオブジェクトの以下のプロパティを更新します。なお、queriesメソッドへの引数itemはプロパティisbn10とisbn13を持っており、それぞれ10桁ISBN, 13桁ISBNになります。
ここまでやると、図書館データが以下のようになります。
{
id : "p14100",
name : "横浜市",
url : "http://www.city.yokohama.jp/me/kyoiku/library/",
queries : function(item){
return {
method: "POST",
url: "http://www.lib.city.yokohama.jp/cgi-bin/Swissken.sh?0+72+0",
data: "ktyp0=SHK&key0=&itfg0=F&ron0=m&ktyp1=ATK&key1=&itfg1=F&ron1=m&ktyp2=SPK&key2=&itfg2=F&ron2=m&ktyp3=KEK&key3=&itfg3=F&ron3=m&ktyp4=KJK&key4=&itfg4=F&tgid=010A&tkey=" + item.isbn10 + "&sgid=SPNO&kkey=&kmonth=00&skey=&smonth=99&srkb0=1&srkb1=1&srsl0=1&srsl1=1&srsl2=1&srsl3=0&lcbs=or",
//ここより下は未変更
resHandler: function(res){
var match = res.responseText.match(/document\.location\.replace\('(.*?)'\)/);
return match ? {
url : "http://www.library.chiyoda.tokyo.jp" + match[1],
status : RES_FOUND
} : RES_NOT_FOUND;
}
}
}
}
もう一度図書館の検索結果を見てみます。見つかった書籍へのリンクが張られているはずですので、その部分を反転選択し、コンテキストメニューから「選択した部分のソースを表示」を選びます。書籍の予約ページへのアンカーを探すと、(横浜市図書館の場合)以下のようになっています。
<a href="/cgi-bin/Swwwsvis.sh?0+72+1+1+0+206003596+0+1+0+0+1+1+1">チーム・バチスタの栄光 海堂尊/著 宝島社 </a>これを手がかりに、フルパスのURLを作成できるようなコードをresHandlerメソッドに記述します。今回は、結局以下のようにしました。
{
id : "p14100",
name : "横浜市",
url : "http://www.city.yokohama.jp/me/kyoiku/library/",
queries : function(item){
return {
method: "POST",
url: "http://www.lib.city.yokohama.jp/cgi-bin/Swissken.sh?0+72+0",
data: "ktyp0=SHK&key0=&itfg0=F&ron0=m&ktyp1=ATK&key1=&itfg1=F&ron1=m&ktyp2=SPK&key2=&itfg2=F&ron2=m&ktyp3=KEK&key3=&itfg3=F&ron3=m&ktyp4=KJK&key4=&itfg4=F&tgid=010A&tkey=" + item.isbn10 + "&sgid=SPNO&kkey=&kmonth=00&skey=&smonth=99&srkb0=1&srkb1=1&srsl0=1&srsl1=1&srsl2=1&srsl3=0&lcbs=or",
resHandler: function(res){
var match = res.responseText.match(/\/cgi-bin\/Swwwsvis\.sh\?[^"]*/);
return match ? {
url : "http://www.lib.city.yokohama.jp/cgi-bin" + match[0],
status : RES_FOUND
} : RES_NOT_FOUND;
}
}
}
}
ここまで書いたら、「保存して閉じる」を押します。エラーがなければ「保存しました」とダイアログが出て、作成した図書館データが実行されます。横浜市図書館のところに「蔵書あり」と表示されたら成功です。
図書館データを作成されたら、Support Requestsの返信かPatchesに投稿していただければデータを取り込ませていただきます。是非ご協力ください。