foldrr's weblog

旧ブログ http://d.hatena.ne.jp/foldrr/

Amazon で気になった著者をハイライト表示する

環境

問題

翻訳が気に入らない本を買ってしまわないようにしたい。
気になった本を買う理由づけとして、好きな著者だったら教えて欲しい。

解決方法

下記のスクリプトを登録しておくと、指定した著者名をハイライト表示する。
ハイライトの仕方を変更したい場合は、style をいじる。

// ==UserScript==
// @name      Amazon Author Checker
// @namespace http://example.com/amazon_author_checker
// @include   http://www.amazon.co.jp/*
// ==/UserScript==

(function(){
    var xpath = "//div[@class='buying']/a";
    var markers = [
        {
            authors: [
                "好きな著者名1",
                "好きな著者名2",
                "好きな著者名3",
            ],
            style: {
                backgroundColor: "#C0FFC0",
                color: "#008000",
                fontSize: "18pt",
                paddingLeft: "5px",
                paddingRight: "5px",
            }
        },
        {
            authors: [
                "苦手な著者名1",
                "苦手な著者名2",
                "苦手な著者名3",
            ],
            style: {
                backgroundColor: "#D0D0D0",
                color: "#A0A0A0",
                fontSize: "9pt",
                paddingLeft: "5px",
                paddingRight: "5px",
            }
        },
    ];
    
    var nodes = $X(xpath);
    for(var n = 0, nl = nodes.length; n < nl; n++){
        for(var m = 0, ml = markers.length; m < ml; m++){
            for(var a = 0, al = markers[m].authors.length; a < al; a++){
                var name = encodeURI(markers[m].authors[a]);
                if(0 <= nodes[n].href.indexOf(name)){
                    for(var k in markers[m].style){
                        nodes[n].style[k] = markers[m].style[k];
                    }
                }
            }
        }
    }
    
    function $X(query) {
        var results = [];
        var nodes = document.evaluate(query, document, null,
            XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null);
        for(var i = 0, n = nodes.snapshotLength; i < n; i++){
            results.push(nodes.snapshotItem(i));
        }
        return results;
    }
})();