HON39(本索)

  • /*
     * @title       HON39(本索)
     * @description 本を買って借りて読みまくるブックマークレット!
     * @description 実行したサイトからISBN/ASINコードが取得できれば色々なサイトへのリンクを表示
     */
    
    (function () {
      
      function isAsin(asin) {
        /* http://ja.wikipedia.org/wiki/ISBN#.E3.83.81.E3.82.A7.E3.83.83.E3.82.AF.E3.83.87.E3.82.B8.E3.83.83.E3.83.88 */
        /* http://www.amazon.co.jp/gp/help/customer/display.html?nodeId=747416 */
        var i, j, sum;
        if (asin.charAt(0) == "B") {return true;}                       /* ASIN */
        for (i=0, j=10, sum=0; j>1; i++, j--) {
          sum += j * asin.charAt(i);
        }
        return (asin.charAt(i).replace("X", 10) == (11-(sum%11))%11);   /* ISBN */
      }
      
      function getAsin(str) {
        var ret = "";
        if ( (!!str) &&
             (str.search(/([^0-9A-Z]|^)([B0-9][0-9A-Z]{9})([^0-9A-Z]|$)/) != -1) &&
             (isAsin(RegExp.$2)) ) {
          ret = RegExp.$2;
        }
        return ret;
      }
      
      function UrlCombiner(n, t, g, q, c, f) {
        /* Based on Bookmarklet Combiner             */
        /* http://w-shadow.com/bookmarklet-combiner/ */
        var s = document,
          l = s.onclick,
          h = "ws_cmbm-" + f,
          b = s.getElementById(h),
          d = "ws_cmbms-" + f,
          p = s.getElementById(d),
          e = null,
          o,
          a = {
            tl: {left:  10, top:    10},
            tr: {right: 10, top:    10},
            bl: {left:  10, bottom: 10},
            br: {right: 10, bottom: 10}
          },
          k,
          m = [ ".ws_cmbmc{",
                "position:fixed!important;",
                "position:absolute;",
                "z-index:1001;",
                "width:350px;",
                "display:block;",
                "visibility:hidden;",
                "border:1px solid #b0b0b0;",
                "background:#0d5da8;",
                "padding:3px 0 3px 3px;",
                "text-align:left;",
                "border-radius:7px;",
                "-moz-border-radius:7px;",
                "-webkit-border-radius:7px;",
                "box-shadow:4px 4px 6px #777;",
                "-moz-box-shadow:4px 4px 6px #777;",
                "-webkit-box-shadow:4px 4px 6px #777;",
                "}",
                ".ws_cmbmc a{",
                "display:block;",
                "float:left;",
                "margin:0;",
                "width:341px;",
                "border:none;",
                "padding:5px 0 5px 6px;",
                "background:#0d5da8;",
                "color:white;",
                "text-decoration:none;",
                "font:normal normal normal 12px Verdana,sans-serif;",
                "letter-spacing:normal;",
                "word-spacing:normal;",
                "}",
                ".ws_cmbmc a:hover{",
                "background:#fff;",
                "color:#0d5da8;",
                "border:none;",
                "text-decoration:none;",
                "font:normal normal normal 12px Verdana,sans-serif;",
                "letter-spacing:normal;",
                "word-spacing:normal;",
                "border-radius:3px;",
                "-moz-border-radius:3px;",
                "-webkit-border-radius:3px;",
                "}"
              ].join("");
        
        function r() { b.style.visibility = "hidden";}
        function j() { b.style.visibility = "visible";}
        if (b) {
          if (b.style.visibility == "visible") {
            r();
          } else {
            j();
          }
          return;
        }
        if (!p) {
          m = m.replace(/.ws_cmbmc/g, "#" + h);
          p = s.createElement("style");
          p.type = "text/css";
          p.id = d;
          if (p.styleSheet) {
            p.styleSheet.cssText = m; /* for IE */
          } else {
            p.appendChild(s.createTextNode(m));
          }
          s.getElementsByTagName("head")[0].appendChild(p);
        }
        b = s.createElement("div");
        b.setAttribute("id", h);
        b.className = "ws_cmbmc";
        for (o = 0; o < n.length; o++) {
          e = s.createElement("a");
          e.appendChild(s.createTextNode(n[o].title));
          e.setAttribute("href", n[o].url.split("%s").join(t)); /* replace(/%s/g, t)); */
          e.onclick = (function (i) {
            if (q) {
              r();
            }
          });
          b.appendChild(e);
        }
        s.getElementsByTagName("body")[0].appendChild(b);
        if (a.hasOwnProperty(g)) {
          for (k in a[g]) {
            b.style[k] = a[g][k] + "px";
          }
        } else {
          if (g == "c") {
            b.style.left = Math.round(((window.innerWidth  ? window.innerWidth  : s.body.clientWidth ) - b.offsetWidth ) / 2) + "px";
            b.style.top  = Math.round(((window.innerHeight ? window.innerHeight : s.body.clientHeight) - b.offsetHeight) / 2) + "px";
          }
        }
        if (c) {
          s.onclick = (function () {
            r();
            if (typeof l == "function") {
              l();
            }
          });
          b.onclick = (function (i) {
            if (i){
              i.stopPropagation();
            }
          });
        }
        j();
      }
      
      function getSelString() {
        var i, str = "";
        try {
          str = (!!window.getSelection) ? window.getSelection().toString() : document.selection.createRange().text;
          if (!str) {
            if (frames.length) {
            for (i=0; i<frames.length; i++) {
              if ( ((!!frames[i].getSelection) || (!!frames[i].document)) &&
                   (str = (!!frames[i].getSelection) ? frames[i].getSelection().toString() : frames[i].document.selection.createRange().text)
                 ) {break;}
              }
            }
          }
        } catch (e) {}
        return str;
      }
      
      var MENU_POS = "tr";    /* tl,tr,bl,br,c */
      var CLOSE_AFTER_CLICK = false;
      var CLOSE_ELSEWHERE = true;
      var BOOKMARKLET_ID = "asin_bookmarklet";
      var URLS = [{
          title: "はてなブックマーク",
          url: "http://b.hatena.ne.jp/entry/www.amazon.co.jp/gp/product/%s"
        },{
          title: "はてなダイアリー",
          url: "http://d.hatena.ne.jp/asin/%s"
        },{
          title: "byflow",
          url: "http://www.byflow.com/item/asin/%s"
        },{
          title: "InBook.jp (セリフ引用)",
          url: "http://inbook.jp/inbook/ASIN=%s"
        },{
          title: "読書メーター",
          url: "http://book.akahoshitakuya.com/b/%s"
        },{
          title: "読んだ4!",
          url: "http://yonda4.com/asin/%s"
        },{
          title: "Stack Stock Books",
          url: "http://stack.nayutaya.jp/book/%s"
        },{
          title: "Webcat Plus",
          url: "http://webcatplus.nii.ac.jp/webcatplus/details/book/isbn/%s.html"
        },{
          title: "ブクログ (5段階評価)",
          url: "http://booklog.jp/asin/%s"
        },{
          title: "crossreview (10段階評価、本以外も対応)",
          url: "http://crossreview.jp/product/%s"
        },{
          title: "メディアマーカー (5段階評価、本以外も対応)",
          url: "http://mediamarker.net/media/0/?asin=%s"
        },{
          title: "Amazon.co.jp (5段階評価、本以外も対応)",
          url: "http://www.amazon.co.jp/product-reviews/%s?tag=kooniesb-22"
        },{
          title: "Amazon.co.jp (ショッピングカートに入れる)",
          url: "javascript:document.write('<form name=cart_form method=%22post%22 action=%22http://www.amazon.co.jp/gp/aws/cart/add.html%22> <input type=%22hidden%22 name=%22ASIN.1%22 value=%22%s%22> <input type=%22hidden%22 name=%22Quantity.1%22 value=%221%22> <input type=%22hidden%22 name=%22AssociateTag%22 value=%22kooniesb-22%22> <input type=%22hidden%22 name=%22SubscriptionId%22 value=%22your_subscription_id%22> <input type=%22image%22 name=%22submit.add-to-cart%22 src=%22http://rcm-images.amazon.com/images/G/09/extranet/associates/buttons/remote-buy-jp1.gif%22 alt=%22amazon.co.jp で買う%22> </form>');document.cart_form.submit();"
        },{
          title: "楽天ブックス",
          url: "http://search.books.rakuten.co.jp/bksearch/nm?sitem=%s"
        },{
          title: "ビーケーワン",
          url: "http://www.bk1.jp/isbn/%s"
        },{
          title: "TSUTAYA",
          url: "http://shop.tsutaya.co.jp/search_result.html?searchType=2&ecCategory=05&isbnJan=%s"
        },{
          title: "Yahoo!ブックス",
          url: "http://books.yahoo.co.jp/search?mcd=&s=-5&b=1&ty=0&so=1&k=0&ismc=1&x=0&y=0&isbn=%s"
        },{
          title: "丸善とジュンク堂書店 (在庫ありの店舗チェック)",
          url: "http://www.junkudo.co.jp/find2.jsp?isbn=%s"
        },{
          title: "紀伊国屋 (たまに新聞書評)",
          url: "http://bookweb.kinokuniya.co.jp/htm/%s.html"
        },{
          title: "Bookget (本・中古本の一括検索)",
          url: "http://bookget.net/pack?asin=%s"
        },{
          title: "カーリル (図書館検索)",
          url: "http://calil.jp/book/%s"
        },{
          title: "Google ブックス (プレビュー)",
          url: "http://www.google.co.jp/search?tbm=bks&tbo=1&q=isbn:%s"
        }
      ];
      var SEARCH_URL = "http://www.amazon.co.jp/exec/obidos/external-search/?keyword=%s&mode=books-jp&tag=kooniesb-22";
      var asin = getAsin(location.href);
      if (!asin) {
        var word = getSelString() ||
                   prompt("表示中のサイトからはASINコードは取得できませんでした。以下のどちらかを入力してください。\n" +
                          "→ 検索キーワード(例.1Q84)\n" +
                          "→ ASIN10桁コード(例.4103534222)", "4103534222");
        asin = getAsin(word);
      }
      if (asin) {
        UrlCombiner(URLS, asin, MENU_POS, CLOSE_AFTER_CLICK, CLOSE_ELSEWHERE, BOOKMARKLET_ID);
      } else if (word) {
        location.href = SEARCH_URL.replace("%s", encodeURIComponent(word));
      }
    
    })();
    
  • Permalink
    このページへの個別リンクです。
    RAW
    書かれたコードへの直接のリンクです。
    Packed
    文字列が圧縮された書かれたコードへのリンクです。
    Userscript
    Greasemonkey 等で利用する場合の .user.js へのリンクです。
    Loader
    @require やソースコードが長い場合に多段ロードする Loader コミのコードへのリンクです。
    Metadata
    コード中にコメントで @xxx と書かれたメタデータの JSON です。

History

  1. 2011/04/21 22:56:25 - 2011-04-21
  2. 2011/02/23 12:45:11 - 2011-02-23
  3. 2011/02/22 00:30:22 - 2011-02-22