Develop and Download Open Source Software

Recent Changes

2012-04-26
2010-03-01
2010-02-25
2008-05-25

Wiki Guide

Side Bar

ご自分で図書館データを作成することで、対応図書館を増やすことが可能です。 作成には、HTTPとJavaScriptの基礎的な知識が必要です。 慣れたら5分程度で作成できます(簡単なものの場合)。

自作スクリプトはGreasemonkey版のみの対応です。よって、このページに書いてあることはGreasemonkey版でしか使えません。

なお、既存のデータがこちらで参照できますので、こちらを参考にしながら作成されるのが最も良いかと思います。

チュートリアル

前提として、Live HTTP Headersアドオンが入っているものとします。HTTPのRequestとResponseを見ることが出来ればいいので、他のツールでもかまいませんが、今回の説明では同ツールを使います。

まず、対象となる図書館を選んでみます。今回は、(以前住んでいたことのある)横浜市立図書館を選びました。

図書館を選んだら、libconfig.jsファイルの中より図書館のIDを調べます。横浜市のIDはp14100であることがわかりました。

  • 公立図書館は p + 数字5桁のIDにしていく予定です。数字5桁は全国地方公共団体コードです。
  • ときどきlibconfig.jsが間違っていることがありますので、その場合はご報告ください。例えば、このチュートリアル作成中に「横浜市は区じゃなくて市の単位で図書館を運営している」ということがわかりましたので、急遽横浜市区部のエントリをlibconfig.jsから削除しました。

次に、テスト用の書籍を選んでみます。図書館を表示しているのとは別のウィンドウで作業した方が便利です。図書館が蔵書している必要があるので、ベストセラー系か定番系を当たるのが良いでしょう。今回はチーム・バチスタの栄光(単行本)を選んでみました。

書籍を選んだら、その書籍のISBN番号を調べます。10桁のものと13桁のものがありますので、桁数を数えてみてください。Amazonだと10桁、bk1だと13桁を使っているようです。Amazonだと↓このあたりに書かれてます。

usage5.png

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

ここで見るべきことは、

  • リクエスト送信先のURL( http://www.lib.city.yokohama.jp/cgi-bin/Swissken.sh?0+72+0 )
  • メソッド(GETかPOSTか) ( POST /cgi-bin/Swissken.sh?0+72+0 HTTP/1.1 )
  • (POSTの場合)データ (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」を選択します。

usage6.png

スクリプトを書き込む領域が出てきました。ここに典型的な図書館データ(これとか)をコピペし、プロパティを書き換えます。

  • id : 先ほど調べた図書館のID
  • name : 図書館名。libconfig.jsに記載があるものと同じ文字列にしてください。
  • url : 図書館の公式URL。

また、先ほど Live HTTP Headersを使って得た情報をもとに、queriesメソッドが返値として投げているオブジェクトの以下のプロパティを更新します。なお、queriesメソッドへの引数itemはプロパティisbn10とisbn13を持っており、それぞれ10桁ISBN, 13桁ISBNになります。

  • method : 先ほど調べたメソッド。GETの場合は省略できる。
  • url : リクエスト送信先のURL。GETの場合はISBNを埋め込む必要があるので、URLを加工する。
  • data : POSTの場合のみ必要。先ほど調べたデータをコピペするのだが、ISBNの部分はitem.isbn10かitem.isbn13に置き換える。

ここまでやると、図書館データが以下のようになります。

{
   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に投稿していただければデータを取り込ませていただきます。是非ご協力ください。

まだ書いていないこと

  • 複数回問い合わせないといけない場合
  • 図書予約ページがPOSTでないと表示できない場合(e.g. 品川区 p13109.js)
  • RES_XXXXの定数値
  • resHandlerの返値の作り方の説明
  • 編集ウィンドウの使い方

SourceForge.JP is a Japanese version of SourceForge.net. For developments that are not related to Japan, we recommend you to use SourceForge.net.