Amazon の商品ページから東京都内の図書館の蔵書検索を行う Greasemonkey スクリプト

今日は雨で出かけるのが面倒になったので、前から作ろうと思っていた都内の図書館+αをまとめて蔵書検索する Greasemonkey スクリプトを書いた。やりたいことの半分くらいしかできなかったけど…。
http://hetappi.pm.googlepages.com/tbs.png

こんな感じで検索対象を定義する。予想外に複雑になってしまった。

    itabashi: {
      name: '\u677f\u6a4b',
      keys: {isbn10: true, isbn10h: true, isbn13: true, isbn13h: true},
      enc: 'shift-jis',
      url: 'http://www.lib.city.itabashi.tokyo.jp',
      context: 'ITWLIB/servlet',
      func: patternB,
      args: {
        regexps: {
          enabled: /\<TD\s*><STRONG>.*\u5728\u5eab.*<\/STRONG><\/TD><\/TR>/
        }
      }
    },
    shibuya: {
      name: '\u6e0b\u8c37',
      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'
        }
      }
    },

とりあえず置いてみますがαクオリティです。誰かがまだできていない定義を書いてくれるのではないかという淡い期待を抱いています。