京东图书豆瓣评分

京东图书详情页及购物车图书类商品显示豆瓣评分

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Userscripts ,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name         京东图书豆瓣评分
// @namespace    http://tampermonkey.net/
// @version      0.4
// @description  京东图书详情页及购物车图书类商品显示豆瓣评分
// @author       罗辣耳朵
// @include      http*://cart.jd.com/*
// @include      http*://item.jd.com/*
// @grant        GM_xmlhttpRequest
// @require       http://code.jquery.com/jquery-3.4.1.min.js
// ==/UserScript==

(function() {
    'use strict';

    var isbnReg = new RegExp('<li title="([-0-9]+)">ISBN:\\1</li>', "gi");
    var bookRatedURL = "http://111.229.55.106/isbn/";
    var rankInfoCache = {};

    // 获取填充的背景颜色
    function getBackground(star) {
        var background = "#869B74";
        if (star >= 9.0){
            background = "#EACF02";
        }
        else if (star >= 8.5) {
            background = "#6C890B";
        }
        else if (star >= 8.0) {
            background = "#ABC327";
        }

        return background;
    }

    // 获取填充的文字
    function getStarText(star, persons) {
        return star == "0.0" ? "评价人数不足,暂无评分" : "评分:" + star + "(" + persons + "人评价)";
    }

    // 设置填充的背景颜色
    function setBackground($item, star, persons) {
        star = parseInt(star);
        persons = parseInt(persons);
        if (star >= 7.5 && persons > 999) {
            var background = getBackground(star);
            $item.css({"background":background});
        }
    }

    // ISBN服务的回调方法
    function isbnServiceCallback(data, params) {
        var $item = params["item"];
        var $backgroundItem = params["backgroundItem"];
        var isAppend = params["isAppend"] || false;
        var result = data.response;
        var persons = parseInt(result.persons);
        var rankInfo = {
            url: result.url,
            star: result.star,
            originalPersons: result.persons,
            persons: persons
        };

        addDoubanRankInfo($item, rankInfo, isAppend);
        setBackground($backgroundItem, rankInfo.star, rankInfo.persons);
    }

    // 添加豆瓣评分信息
    function addDoubanRankInfo($addedItem, data, isAppend) {
        var $star = $("<div class='plus' style='color:#5FD9CD'></div>");

        try {
            $star.text(getStarText(data.star, data.persons));
            isAppend ? $addedItem.append($star) : $addedItem.after($star);
        }
        catch (e) {
            $star.text(data.star + data.persons);
            isAppend ? $addedItem.append($star) : $addedItem.after($star);
            console.log(e);
        }

        // 添加直达豆瓣评价链接
        var $link = $("<a href='" + data.url + "' style='color:#00B51D; text-decoration:underline' target='_blank'>直达豆瓣</a>");
        $star.append($link);

        // 添加直达价格趋势链接
        var url = isAppend ? window.location.href : "http:" + $addedItem.parent().find(".item-form .goods-item .p-img a").attr("href");
        var $priceLink = $("<a href='http://p.zwjhl.com/price.aspx?url=" + encodeURI(url) + "' style='color:#f60; text-decoration:underline; margin-left:10px;' target='_blank'>价格趋势</a>");
        $star.append($priceLink);
    }

    // 调用图书评分服务
    function invokeISBNService(href, callback, params) {
        GM_xmlhttpRequest({
            method: 'GET',
            url: href,
            responseType: "json",
            synchronous: true,
            headers: {
                'Accept': 'text/html, application/xhtml+xml, */*',
            },
            onload: (data) => {
                if (data.status != 200) {
                    console.log("isbn service error!");
                    return;
                }

                callback(data, params);
            },
            onerror:function () {
                console.log("get book detail html error");
            }
        });
    }

    // 购物车处理逻辑
    function cart() {
        var $items = $(".item-form");
        $.each($items, (i, e) => {
            var $item = $(e);
            var $itemInfo = $item.find(".goods-item .p-name a");
            var href = "https:" + $itemInfo.attr("href");
            GM_xmlhttpRequest({
                method: 'GET',
                url: href,
                overrideMimeType: "text/xml",
                synchronous: true,
                headers: {
                    'User-agent': 'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)',
                    'Accept': 'text/html, application/xhtml+xml, */*',
                },
                onload: (data) => {
                    var content = data.responseText;
                    if (isbnReg.test(content)) {
                        var isbn = RegExp.$1;
                        console.log($item);
                        invokeISBNService(bookRatedURL + isbn, isbnServiceCallback, { "item": $item, "backgroundItem": $item.parent() });
                        isbnReg.lastIndex = 0;
                    }
                    else {
                        console.log(href + " not found isbn");
                    }
                },
                onerror: function () {
                    console.log("get book detail html error");
                }
            });
        });
    }

    // 详情页处理逻辑
    function detail() {
        var parameters = $(".p-parameter ul li");
        for (var i = 0; i < parameters.length; i++) {
            var $parameter = $(parameters[i]);
            if ($parameter.text().startsWith("ISBN")) {
                var isbn = $parameter.text();
                isbn = isbn.substring("ISBN:".length);
                var params = { "item": $(".sku-name"), "backgroundItem": $(".sku-name .plus"), "isAppend": true};
                invokeISBNService(bookRatedURL + isbn, isbnServiceCallback, params);
                break;
            }
        }
    }

    // 加载豆瓣评分
    function loadDoubanRank() {
        location.hostname.startsWith("cart") ? cart() : detail();
    }

    loadDoubanRank();

    $(".jdcheckbox").on("click", function(e) {
        // setTimeout(function () {loadDoubanRank();}, 2000);
    });
})();