京東價格監控軟件開發技術探討七:如何獲取京東商品評價信息

在購買商品的時候,這個商品質量怎麼樣、價格貴不貴、商家服務態度好不好?這些問題往往是購買者急需知道的信息。

京東平臺提供了商品評價功能,能夠讓購買者通過其他購買者的反饋來決定自己到底買不買這個商品。

項目組在對“殺京東”程序進行需求調研時,認爲提供商品的評價尤其是差評信息,對購買者非常有指導意義,能加強用戶的操作體驗。此時,如何獲取京東商品的評價信息成爲項目組的首要任務。

首先還是先上神器Fiddler,通過它來獲取到訪問地址。

	//差評
	http://club.jd.com/productpage/p-255742-s-1-t-3-p-0.html?callback=fetchJSON_comment98vv17736 
	//中評 
	http://club.jd.com/productpage/p-255742-s-2-t-3-p-0.html?callback=fetchJSON_comment98vv17736 
	//好評 
	http://club.jd.com/productpage/p-255742-s-3-t-3-p-0.html?callback=fetchJSON_comment98vv17736
獲取評價信息的網址解析如下:

最重要的數據是:p-255742-s-1-t-3-p-0.html,解析如下:p應該是Product的意思,255742是商品skuid,s是索引,1表示差評、2表示中評、3表示好評,最後的0表示第一頁,若使用1、2、3等代替,可分別打開不同頁的評價信息。

從網頁上可以看出,京東的評價信息以10個評價作爲分頁標準。

回饋的Json數據樣例如下,有點長哈。

{
	"productAttr" : null,
	"productCommentSummary" : {
		"beginRowNumber" : 0,
		"endRowNumber" : 0,
		"skuId" : 974811,
		"productId" : 974811,
		"score1Count" : 145,
		"score2Count" : 75,
		"score3Count" : 252,
		"score4Count" : 1183,
		"score5Count" : 17106,
		"showCount" : 2069,
		"commentCount" : 18761,
		"averageScore" : 5,
		"goodCount" : 18289,
		"goodRate" : 0.976,
		"goodRateShow" : 97,
		"goodRateStyle" : 146,
		"generalCount" : 327,
		"generalRate" : 0.017,
		"generalRateShow" : 2,
		"generalRateStyle" : 3,
		"poorCount" : 145,
		"poorRate" : 0.0070,
		"poorRateShow" : 1,
		"poorRateStyle" : 1
	},
	"hotCommentTagStatistics" : [{
			"id" : 119397,
			"name" : "做工精美",
			"status" : 0,
			"rid" : 16809,
			"productId" : 974811,
			"count" : 210,
			"created" : "2013-10-30 00:47:57",
			"modified" : "2016-03-27 09:55:22"
		}, {
			"id" : 119775,
			"name" : "大小適合",
			"status" : 0,
			"rid" : 16811,
			"productId" : 974811,
			"count" : 79,
			"created" : "2013-10-30 11:13:00",
			"modified" : "2016-03-24 08:01:25"
		}, {
			"id" : 122181,
			"name" : "物美價廉",
			"status" : 0,
			"rid" : 16813,
			"productId" : 974811,
			"count" : 66,
			"created" : "2013-11-01 16:38:55",
			"modified" : "2016-03-27 22:47:09"
		}
	],
	"jwotestProduct" : "98",
	"score" : 1,
	"soType" : 3,
	"imageListCount" : 500,
	"comments" : [{
			"id" : 1420471635,
			"guid" : "7b1a240b-eb7b-4e47-b803-40133e8b2165",
			"content" : "松木容易開裂,發貨前沒有檢查,邊條都裂了,目前不影響使用,客服說自己拿膠布纏一下,不知道是不是因爲特價購買纔有瑕疵的",
			"creationTime" : "2016-03-27 22:22:18",
			"isTop" : false,
			"referenceId" : "973878",
			"referenceImage" : "g15/M04/0B/1F/rBEhWVJBc_IIAAAAAAEbkVP9b9kAADeWwNLNWQAARup896.jpg",
			"referenceName" : "得力(deli)33055 可升降雙面磁性多功能木製兒童畫板/畫架/學生白板/粉筆綠板",
			"referenceTime" : "2016-03-03 08:21:43",
			"referenceType" : "Product",
			"referenceTypeId" : 0,
			"firstCategory" : 670,
			"secondCategory" : 729,
			"thirdCategory" : 1449,
			"replyCount" : 0,
			"score" : 1,
			"status" : 1,
			"title" : "",
			"usefulVoteCount" : 0,
			"uselessVoteCount" : 0,
			"userImage" : "storage.jd.com/i.imageUpload/79696368656e673230323631343537303832313038303733_sma.jpg",
			"userImageUrl" : "storage.jd.com/i.imageUpload/79696368656e673230323631343537303832313038303733_sma.jpg",
			"userLevelId" : "62",
			"userProvince" : "福建",
			"userRegisterTime" : "2009-12-16 14:33:04",
			"viewCount" : 0,
			"orderId" : 0,
			"isReplyGrade" : false,
			"nickname" : "y***6",
			"userClient" : 2,
			"productColor" : "",
			"productSize" : "升降範圍:77~132cm原木色",
			"integral" : -20,
			"anonymousFlag" : 1,
			"userLevelName" : "金牌會員",
			"recommend" : false,
			"userLevelColor" : "#088000",
			"userClientShow" : "<a href='http://app.jd.com/iphone.html' target='_blank'>來自京東iPhone客戶端</a>",
			"isMobile" : true,
			"days" : 24
		}, {
			"id" : 1409721181,
			"guid" : "29691394-5cdf-4309-860d-204e3dc24051",
			"content" : "超級差,四個支柱長短不一致,畫板立起來後不穩,搖晃的根本就不能用。買的時候就是考慮到品牌的東西,質量應該有保障,誰知道還不如雜牌子的便宜貨!垃圾東西!",
			"creationTime" : "2016-03-22 23:08:53",
			"isTop" : false,
			"referenceId" : "1546185",
			"referenceImage" : "g15/M04/0B/1F/rBEhWVJBc_IIAAAAAAEbkVP9b9kAADeWwNLNWQAARup896.jpg",
			"referenceName" : "得力(deli)33055 可升降雙面磁性多功能木製兒童畫板/畫架/學生白板/粉筆綠板",
			"referenceTime" : "2016-03-20 18:27:26",
			"referenceType" : "Product",
			"referenceTypeId" : 0,
			"firstCategory" : 670,
			"secondCategory" : 729,
			"thirdCategory" : 1449,
			"replyCount" : 0,
			"score" : 1,
			"status" : 1,
			"usefulVoteCount" : 0,
			"uselessVoteCount" : 0,
			"userImage" : "misc.360buyimg.com/lib/img/u/b62.gif",
			"userImageUrl" : "misc.360buyimg.com/lib/img/u/b62.gif",
			"userLevelId" : "62",
			"userProvince" : "",
			"userRegisterTime" : "2014-07-10 23:29:15",
			"viewCount" : 0,
			"orderId" : 0,
			"isReplyGrade" : false,
			"nickname" : "h***B",
			"userClient" : 21,
			"mergeOrderStatus" : -2,
			"discussionId" : 80351696,
			"productColor" : "",
			"productSize" : "可升降可旋轉 粉色",
			"integral" : -20,
			"anonymousFlag" : 1,
			"userLevelName" : "金牌會員",
			"recommend" : false,
			"userLevelColor" : "#088000",
			"userClientShow" : "<a href='javascript:;'>來自微信購物</a>",
			"isMobile" : false,
			"days" : 2
		}, {
			"id" : 1404857619,
			"guid" : "6c31d7f1-654f-47e7-9dff-f6b356d0f73e",
			"content" : "垃圾畫板,送來上面就有膠印,弄半天都擦不掉,什麼破玩意啊……後悔死啦,",
			"creationTime" : "2016-03-20 22:54:57",
			"isTop" : false,
			"referenceId" : "974811",
			"referenceImage" : "g15/M04/0B/1F/rBEhWVJBc_IIAAAAAAEbkVP9b9kAADeWwNLNWQAARup896.jpg",
			"referenceName" : "得力(deli)33055 可升降雙面磁性多功能木製兒童畫板/畫架/學生白板/粉筆綠板",
			"referenceTime" : "2016-03-08 12:41:08",
			"referenceType" : "Product",
			"referenceTypeId" : 0,
			"firstCategory" : 670,
			"secondCategory" : 729,
			"thirdCategory" : 1449,
			"replyCount" : 0,
			"score" : 1,
			"status" : 1,
			"usefulVoteCount" : 0,
			"uselessVoteCount" : 0,
			"userImage" : "storage.360buyimg.com/i.imageUpload/6a645f3431323935663939633835326431343439333938383136343831_sma.jpg",
			"userImageUrl" : "storage.360buyimg.com/i.imageUpload/6a645f3431323935663939633835326431343439333938383136343831_sma.jpg",
			"userLevelId" : "61",
			"userProvince" : "",
			"userRegisterTime" : "2015-12-06 15:19:32",
			"viewCount" : 0,
			"orderId" : 0,
			"isReplyGrade" : false,
			"nickname" : "j***d",
			"userClient" : 4,
			"images" : [{
					"id" : 131794347,
					"associateId" : 79914966,
					"productId" : 0,
					"imgUrl" : "//img30.360buyimg.com/shaidan/s128x96_jfs/t2317/290/2689843034/63000/3b7a38a4/56eeb9c0N39f520c4.jpg",
					"available" : 1,
					"pin" : "",
					"dealt" : 0,
					"imgTitle" : "",
					"isMain" : 0
				}, {
					"id" : 131794348,
					"associateId" : 79914966,
					"productId" : 0,
					"imgUrl" : "//img30.360buyimg.com/shaidan/s128x96_jfs/t2026/247/2815215176/40430/51aaae4e/56eeb9c1Nb2277503.jpg",
					"available" : 1,
					"pin" : "",
					"dealt" : 0,
					"imgTitle" : "",
					"isMain" : 0
				}
			],
			"showOrderComment" : {
				"id" : 79914966,
				"guid" : "ce5c627c-200f-4976-ba17-ccc805e7fcf3",
				"content" : "垃圾畫板,送來上面就有膠印,弄半天都擦不掉,什麼破玩意啊&hellip;&hellip;後悔死啦,<div class='uploadimgdiv'><img class='uploadimg' border='0'  src='http://img30.360buyimg.com/shaidan/jfs/t2317/290/2689843034/63000/3b7a38a4/56eeb9c0N39f520c4.jpg' /></div><div class='uploadimgdiv'><img class='uploadimg' border='0'  src='http://img30.360buyimg.com/shaidan/jfs/t2026/247/2815215176/40430/51aaae4e/56eeb9c1Nb2277503.jpg' /></div>",
				"creationTime" : "2016-03-20 22:54:57",
				"isTop" : false,
				"referenceId" : "974811",
				"referenceType" : "Order",
				"referenceTypeId" : 0,
				"firstCategory" : 0,
				"secondCategory" : 0,
				"thirdCategory" : 0,
				"replyCount" : 0,
				"score" : 0,
				"status" : 1,
				"usefulVoteCount" : 0,
				"uselessVoteCount" : 0,
				"userProvince" : "",
				"viewCount" : 0,
				"orderId" : 0,
				"isReplyGrade" : false,
				"userClient" : 4,
				"isDeal" : 1,
				"integral" : -10,
				"anonymousFlag" : 1,
				"recommend" : false,
				"userLevelColor" : "#999999",
				"userClientShow" : "<a href='http://app.jd.com/android.html' target='_blank'>來自京東Android客戶端</a>",
				"isMobile" : true
			},
			"mergeOrderStatus" : 2,
			"discussionId" : 79914966,
			"productColor" : "",
			"productSize" : "升降範圍:57~96.5cm原木色",
			"imageCount" : 2,
			"integral" : -10,
			"anonymousFlag" : 1,
			"userLevelName" : "銀牌會員",
			"recommend" : false,
			"userClientShow" : "<a href='http://app.jd.com/android.html' target='_blank'>來自京東Android客戶端</a>",
			"isMobile" : true,
			"days" : 12
		}
	],
	"topFiveCommentVos" : []
}

從上面的Json可以看出,其中productCommentSummary與comments中數據比較重要。在productCommentSummary中差評數量,根據差評數量,可以計算出差評有幾頁,然後就可以取到所有的差評數據了。

    /// <summary>
    /// 評價數據模型
    /// </summary>
    public class EvaluateMsg
    {
        /// <summary>
        /// 產品屬性
        /// </summary>
        public object productAttr { get; set; }
        /// <summary>
        /// 評價屬性
        /// </summary>
        public MsgSummary productCommentSummary { get; set; }
        /// <summary>
        /// 評價標籤
        /// </summary>
        public object hotCommentTagStatistics { get; set; }
        public string jwotestProduct { get; set; }
        public int score { get; set; }
        public int soType { get; set; }
        public int imageListCount { get; set; }

        private List<BadpostMsg> _msgs = new List<BadpostMsg>();
        /// <summary>
        /// 評價信息
        /// </summary>
        public List<BadpostMsg> comments
        {
            get { return _msgs; }
            set { _msgs = value; }
        }
        public object topFiveCommentVos { get; set; }

    }

完整的獲取評價信息代碼:

        /// <summary>
        /// 獲取評價詳細信息
        /// </summary>
        /// <param name="tID"></param>
        public void GetEvaluateMsg(string tID)
        {
            //差評
            //http://club.jd.com/productpage/p-255742-s-1-t-3-p-0.html?callback=fetchJSON_comment98vv17736
            //中評
            //http://club.jd.com/productpage/p-255742-s-2-t-3-p-0.html?callback=fetchJSON_comment98vv17736
            //好評
            //http://club.jd.com/productpage/p-255742-s-3-t-3-p-0.html?callback=fetchJSON_comment98vv17736
            try
            {
                string url = string.Format("http://club.jd.com/productpage/p-{0}-s-1-t-3-p-0.html", tID);
                string rtnMsg = HttpHelper.GetResponse(url, "get", string.Empty);

                List<EvaluateMsg> getMsgs = new List<EvaluateMsg>();
                EvaluateMsg badMsg = JsonConvert.DeserializeObject<EvaluateMsg>(rtnMsg);
                if (badMsg != null && badMsg.comments != null && badMsg.comments.Count > 0)
                {
                    getMsgs.Add(badMsg);
                    int iCount = badMsg.productCommentSummary.poorCount;
                    float iNum = (float)iCount / 10;
                    int pagenum = (int)(iCount / 10);
                    if (pagenum < iNum)
                    {
                        pagenum++;
                    }

                    if (pagenum > 1)
                    {
                        for (int i = 1; i <= pagenum; i++)
                        {
                            url = string.Format("http://club.jd.com/productpage/p-{0}-s-1-t-3-p-{1}.html", tID, i);
                            rtnMsg = HttpHelper.GetResponse(url, "get", string.Empty);
                            if (!string.IsNullOrEmpty(rtnMsg))
                            {
                                badMsg = JsonConvert.DeserializeObject<EvaluateMsg>(rtnMsg);
                                if (badMsg != null && badMsg.comments != null && badMsg.comments.Count > 0)
                                {
                                    getMsgs.Add(badMsg);
                                }
                            }
                        }
                    }
                }
                if (getMsgs.Count > 0)
                {
                    List<ProductMessage> msgs = new List<ProductMessage>();
                    foreach (var eMsg in getMsgs)
                    {
                        foreach (var item in eMsg.comments)
                        {
                            ProductMessage msg = new ProductMessage()
                            {
                                PID = tID,
                                MsgType = 1,
                                MsgContent = item.content,
                                MsgUser = item.nickname,
                                MsgUserLevel = item.userLevelName,
                                MsgProvince = item.userProvince,
                                MsgDate = item.creationTime
                            };
                            msgs.Add(msg);
                        }
                    }
                    DBHelper.GetInstance().WareMessagesAdd(msgs);
                }
            }
            catch (Exception ex)
            {
                OtCom.XLogErr(ex.Message);
            }
        }

把廣告打起:殺京東 做最走心的京東價格監控軟件 免費開源的價格監控軟件 歡迎加入QQ羣415014949一起討論

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章