京东购物车图书豆瓣评分

京东购物车图书显示豆瓣评分

当前为 2019-12-19 提交的版本,查看 最新版本

// ==UserScript==
// @name         京东购物车图书豆瓣评分
// @namespace    http://tampermonkey.net/
// @version      0.1
// @description  京东购物车图书显示豆瓣评分
// @author       罗辣耳朵
// @match        http*://cart.jd.com/*
// @grant        GM_xmlhttpRequest
// ==/UserScript==

(function() {
    'use strict';

    var isbnReg = new RegExp('<li title="([-0-9]+)">ISBN:\\1</li>', "gi");
    var personsReg = new RegExp('([0-9]+)人评价', "gi");
    var $items = $(".item-form");
    var bookRatedURL = "http://111.229.55.106:5000/isbn/";
    var rankInfoCache = {};

    $(".jdcheckbox").bind("click", function(e) {
        var $items = $(".item-item");
        $.each($items, (i, e) => {
            var $item = $(e);
            var skuid = $item.attr("skuid");
            if (rankInfoCache[skuid]) {
                setInterval(() => {
                    addDoubanRankInfo($item.children(".item-form"), rankInfoCache[skuid]);
                },2000);
            }
        });
    });

    function addDoubanRankInfo(addedItem, data) {
        var $star = $("<div class='plus' style='color:#5FD9CD'></div>");

        try {
            var persons = parseInt(data.persons);
            var star = parseFloat(data.star);
            if (star >= 7.5 && persons > 999) {
                var $itemParent = addedItem.parent();
                var background = "#869B74";
                if (star >= 9.0){
                    background = "#EACF02";
                }
                else if (star >= 8.5) {
                    background = "#6C890B";
                }
                else if (star >= 8.0) {
                    background = "#ABC327";
                }

                $itemParent.css({"background":background});
            }

            if (data.star == "0.0") {
                $star.text("评价人数不足,暂无评分");
            }
            else {
                $star.text("评分:" + data.star + "(" + data.persons + "人评价)");
            }

            addedItem.after($star);
        }
        catch (e) {
            $star.text(data.star + data.persons);
            addedItem.after($star);
            console.log(e);
        }

        var $link = $("<a href='" + data.url + "' style='color:#FFB5A1; text-decoration:underline' target='_blank'>直达豆瓣</a>");
        $star.append($link);
    }

    $.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) => {
                if (data && data.status == 200) {
                    var content = data.responseText;
                    if (isbnReg.test(content)) {
                        var isbn = RegExp.$1;

                        GM_xmlhttpRequest({
                            method: 'GET',
                            url: bookRatedURL + isbn,
                            responseType: "json",
                            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) => {
                                if (data.status == 200) {
                                    var result = data.response;
                                    var persons = parseInt(result.persons);
                                    var rankInfo = {
                                        url: result.url,
                                        star: result.star,
                                        originalPersons: result.persons,
                                        persons: persons
                                    };

                                    var skuid = $item.parent().attr("skuid");
                                    rankInfoCache[skuid] = rankInfo;
                                    addDoubanRankInfo($item, rankInfo);
                                }

                                personsReg.lastIndex = 0;
                            },
                            onerror:function () {
                                console.log("get book rated error");
                            }
                        });

                        isbnReg.lastIndex = 0;
                    }
                    else {
                        console.log(href + " not found isbn");
                    }
                }
            },
            onerror:function () {
                console.log("get book detail html error");
            }
        });
    });
})();