続 CrossBookSearch

ひとつのグリモンでいろんなサイト上でいろんな図書館の蔵書チェックをするという試み。何も変わってないけど、スクリーンショットとコードの断片を貼ると興味を持ってくれる人がいるのでは。

青リンクは蔵書ありで貸し出し可能、灰リンクは蔵書ありで貸し出し不可、リンクなしは蔵書なし。選択すれば詳細ページが開かれるのですぐに予約できる。


検索対象を選択できる。ひどすぎるデザイン。もちろん後でなおす。誰かが…。


表示対象サイトは SITEINFO 風に定義する。ISBN さえ引っこ抜ければどこでも大丈夫。
今のところ

を定義している。



2008/01/25 追記
drry さんがいろいろ追加してくれてた!ナイス。

  var SITEINFO = [
    {
      url : '^http://www\.amazon\.co\.jp/',
      xpaths : {
        isbn10 : 'normalize-space(//li[b/text()="ISBN-10:"]/text())',
        isbn13 : 'translate(//li[b/text()="ISBN-13:"]/text(), "- ", "")'
      }
    },
    {
      url : 'http://www\.oreilly\.co\.jp/books/',
      xpaths : {
        isbn10 : 'translate(//meta[string-length(@content)=13 and @name="isbn"]/@content, "-", "")',
        isbn13 : 'translate(//meta[string-length(@content)=17 and @name="isbn"]/@content, "-", "")'
      }
    },

検索先のサイトも同様に。とりあえず 23 区内の一部とブクオフオンライン。

  var LIBINFO = {
    library : {
      tokyo_east : {
        name : '図書館−東京23区',
        targets : {
          //
          shibuya: {
            name: '渋谷',
            keys: {isbn10h: true},
            enc: 'shift-jis',
            url: 'http://www.lib.city.shibuya.tokyo.jp',
            context: 'Asp',
            func: general,
            args: {
              reqs: [
                {
                  method: 'post',
                  url: 'Book_Kensaku_w.asp?Page=1',
                  content: 'tos=1&tzn=1&zas=1&isbn=' + '$isbn',
                  regexps: {
                    detail: /<A\s*HREF=\s*(syousai_w\.asp\?TosCode=\d+)\s*>/,
                    next: /<A\s*HREF=\s*(syousai_w\.asp\?TosCode=\d+)\s*>/,
                    owned: /<A\s*HREF=\s*syousai_w\.asp\?TosCode=\d+\s*>/,
                  }
                },
                {
                  method: 'get',
                  regexps: {
                    enabled: /<TD>\u3000<\/TD>\s*<TD>.*<\/TD>\s*<\/TR>/
                  }
                }
              ],
              opts: {
                overrideMimeType: 'text/html; charset=shift-jis'
              }
            }
          },

          //
          setagaya: {
            name: '世田谷',
            keys: {isbn10: true, isbn10h: true, isbn13: true, isbn13h: true},
            enc: 'shift-jis',
            url: 'http://libweb.city.setagaya.tokyo.jp',
            context: 'clis',
            func: patternA
          },

CodeRepos で待っています。