Amazonのページで大田区立図書館の蔵書がわかるGreaseMonkey

はじめて日記開設したらものの15分ではじめてのTBをつけてもらえた。すごいですね、ネットのスピード感。

本は買う派?借りる派?

ずっと買う派だった私です。ですが、この4月より東京都大田区の図書館がネット予約できるようになったので利用してみたところ、便利便利!!

近くの図書館で受け取れるし、準備ができるとメールが届くし。すでにネット予約で図書館を利用できていた地域のみなさんはこんな利便性を教授していたのですか!くやしい気持ちが湧き上がってきますが、今は私たちの地域もその一員です。やったー!

でも、でも、いちいち検索するのはめんどくさい。。。

というわけで、Amazonの商品ページに図書館へのリンクをつけるGreaseMonkeyを書きました。しかも、蔵書があるかないかも商品ページ内のリンク表示でわかっちゃいます。

配布の方法がよくわからなかったのと、初めてのTBで後押ししていただいたので、下記に貼り付けて晒しちゃいますね。あまり長くは無いので、ご容赦を。

※追記2008-07-19:公開場所を以下に変更しました。それに伴い、以下の記述を修正しています。また、以下で晒しているスクリプトは、本エントリー時点のものです。追記時点では最新版と同じですが、今後は変更の可能性がありますのでご注意を。

 ※リンク切れがあったときは、(fuji70fuji70)から辿ってください。

※追記2008-05-14 : SkyDriveで公開してみました。不具合あれば教えてください。
※追記2008-06-30 : こちらで公開しなおしました。こちらでもうまくインストールできない場合は連絡いただけると幸いです。

うまくインストールできない場合は、下記のソースを、amazon2ohtalib.user.js とでも名前をつけて、GreaseMonkey導入済みのFirefoxにドラッグ&ドロップしてインストールしてください。

// ==UserScript==
// @name           Amazon2OhtaLibrary
// @version        0.3
// @namespace      http://d.hatena.ne.jp/fuji70/
// @description    Ohta Library Lookup from Amazon book listings.
// @include        http://www.amazon.co.jp/*
// ==/UserScript==

(function () {
  var isbn13 = getISBN13();
  var block = getBlock();
  if (!isbn13 || !block)
    return;
  
  // --->> local rules
  ltitle  = '\u5927\u7530\u533a\u7acb\u56f3\u66f8\u9928';
  llinkname = ltitle + '\u304b\u3089\u691c\u7d22'
  geturl  = 'http://www.lib.city.ota.tokyo.jp/clis/search?ISBN=' + isbn13;
  //          None,       Exist
  colors  = ["#000099", "#000099"];
  backs   = ["#ccccff", "#ffcccc"];
  coments = ['\u306a\u3057 ', '\u8535\u66f8\u3042\u308a '];
  function checkExist(resp) { // 0:None, 1:Exist
    var isExist = resp.responseText.match(/MSGBOLDL/) ? 0 : 1;
    return isExist;
  }
  // <<---

  GM_xmlhttpRequest({
    method : 'GET',
    url : geturl,
    onload : function(resp) {
      var isExist = checkExist(resp);
      var link = document.createElement('a');
      link.setAttribute('target', '_blank');
      link.setAttribute('href', geturl );
      link.setAttribute('title', ltitle);
      link.innerHTML =
        '<br />' +
        '<span style=\"font-size:14px; ' + 
        'color:' + colors[isExist] + 
        '; background-color:' + backs[isExist] + '\">' +
        '&raquo; [<b>' +
        coments[isExist] + 
        '</b>] ' +
        llinkname +
        '</span>';
      block.parentNode.insertBefore(link, block.nextSibling);
    }
  });

  function getISBN10() {
    if (!document.body.parentNode.innerHTML.match(/<li><b>ISBN\-10:<\/b>\s(\d{9}[\dX])<\/li>/))
      return false;
    var isbn10 = RegExp.$1
    return isbn10;
  }

  function getISBN13() {
    if (!document.body.parentNode.innerHTML.match(/<li><b>ISBN\-13:<\/b>\s(\d{3})\-(\d{9}[\dX])<\/li>/))
      return false;
    var isbn13 = RegExp.$1 + "-" + RegExp.$2;
    return isbn13;
  }

  function getBlock() {
    var block = document.evaluate(
      "//b[@class='sans']", document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;
    return block;
  }

})();

もし動作不具合がありましたら教えてくださいね。

動作画面をアップしたいのですが、まだはてなダイアリーに不慣れでできていません。

つくるのに参考にしたページ

2007-08-16
kmonの日記
こんなやり方でスクリプトを作っています - natu_nの日記

参考にさせていただき、ありがとうございました。