京东价格监控软件开发技术探讨七:如何获取京东商品评价信息

在购买商品的时候,这个商品质量怎么样、价格贵不贵、商家服务态度好不好?这些问题往往是购买者急需知道的信息。

京东平台提供了商品评价功能,能够让购买者通过其他购买者的反馈来决定自己到底买不买这个商品。

项目组在对“杀京东”程序进行需求调研时,认为提供商品的评价尤其是差评信息,对购买者非常有指导意义,能加强用户的操作体验。此时,如何获取京东商品的评价信息成为项目组的首要任务。

首先还是先上神器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一起讨论

时间: 2024-10-10 13:44:11

京东价格监控软件开发技术探讨七:如何获取京东商品评价信息的相关文章

软件开发技术基础复习要点

软件开发技术基础复习要点 1.生存周期: 指一个软件从提出开发要求开始,经过需求分析.设计.制造.调试.使用.维护,直到软件产品被淘汰为止的整个过程. 2.简述软件工程的基本原理: 用分阶段的生命周期计划严格管理: 坚持进行阶段评审: 实行严格的产品控制: 采纳现代程序设计技术: 结果应该能清楚地审查: 开发小组应小而精: 承认不断改进软件工程实践的必要性. 3.简述产生软件危机的原因和解决办法: 原因:开发软件所需的高成本与软件产品的低质量之间存在尖锐的矛盾,致使软件开发陷入循环之中,即研制软

2018年四川理工学院软件工程考试大纲(面向对象的软件开发技术概述)

2018年四川理工学院软件工程考试大纲(面向对象的软件开发技术概述)   1.面向对象软件开发,需要建立哪三种模型 ①.对象模型(用于描述系统的数据结构,定义了系统"对谁做") ②.动态模型(定义了系统"何时做") ③.功能模型(定义了系统"做什么") 2.面向对象软件开发 对象是指生活中的具体事物,面向对象软件开发是指根据生活中具体的事物为基本单位所进行的软件开发 3.面向对象软件开发的过程 面向对象分析(OOA).面向对象设计(OOD).面向

学习软件开发技术需要注意什么?

现在网络时代已经脱不开计算机,在智能化的时代掌握软件开发技术是必不可少的,因为这个行业是比较有发展前途,选择岗位空间大,缺失很多这样的人才. 随着互联网的急速发展趋势,传统的行业结构开始不断推进,选择的行业将有许多缺失的软件开发岗位,学习更多的更深层次的软件开发技术是随着时代不断推进的选择. 那么在学习软件开发技术上有什么注意的呢?中安云城为大家分析一下: 1.掌握软件开发技术的知识,以及各方面的实用性,掌握了最基础的知识外,将软件开发的门槛不断提升,这样对自己的成长帮助才会比较有效果,一个软件

让你提前认识软件开发(28):数据库存储过程中的重要表信息的保存及相关建议

第2部分 数据库SQL语言 数据库存储过程中的重要表信息的保存及相关建议 1. 存储过程中的重要表信息的保存 在很多存储过程中,会涉及到对表数据的更新.插入或删除等,为了防止修改之后的表数据出现问题,同时方便追踪问题,一般会为一些重要的表建立一个对应的debug表.这个debug表中的字段要包括原表的所有字段,同时要增加操作时间.操作码和操作描述等字段信息. 例如,在某项目中,包括了如下一个重要的表tb_XXX: create table tb_XXX (      AAA           

微信公众号开发之网页授权认证获取用户的详细信息,实现自动登陆

原创声明:本文转来源本人另一博客[http://blog.csdn.net/liaohaojian/article/details/70175835]绝非他人处转载 从接触公众号到现在,开发维护了2个公众号,开发过程中遇到很多问题,现在把部分模块功能在这备案一下,做个总结也希望能给其他人帮助 工欲善其事,必先利其器,先看看开发公众号需要准备或了解什么 web开发工具:官方提供的开发工具,使用自己的微信号来调试微信网页授权.调试.检验页面的 JS-SDK 相关功能与权限,模拟大部分 SDK 的输入

微软软件开发技术二十年回顾-COM、OLE、ActiveX及COM+篇

本文摘自:http://www.job168.com/info/read_100394.html 微软的许多技术,如OLE.ActiveX.以及DirectX等都是基于COM技术而建立起来的.微软本身也大量地使用COM组件来定制他们的应用程序及操作系统.那么,什么是COM呢? 所谓COM即“组件对象模型”,是一种说明如何建立可动态互变组件的规范,此规范提供了为保证能够互操作,客户和组件应遵循的一些二进制和网络标准.通过这种标准将可以在任意两个组件之间进行通信而不用考虑其所处的操作环境是否相同.使

Android开发学习03:定位获取当前地点的信息

界面布局: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" andro

软件开发流程(转载)

软件开发流程 迭代化软件开发技术 1. 传统开发流程的问题 传统的 软件开发流程是一个文档驱动的流程,它将整个软件开发过程划分为顺序相接的几个阶段,每一个阶段都必需完毕所有规定的任务(文档)后才可以进入下一个阶段. 如必须完毕所有的系统需求规格说明书之后才可以进入概要设计阶段,编码必需在系统设计完毕之后才可以进行.这就意味着仅仅有当所有的系统模块所有开发完毕之 后,我们才进行系统集成,对于一个由上百个模块组的复杂系统来说,这是一个很艰巨而漫长的工作. 随着我们所开发的软件项目越来越复杂,传统的瀑

一个软件开发工程师的7年工作经验总结

这是在网上看到的一篇文章,写的是一个从事软件工程开发的大牛对从业七年的一些经验总结.感觉挺不错,转来与大家分享了,下面是正文. 1.分享第一条经验:"学历代表过去,能力代表现在,学习力代表未来." 其实这是一个来自国外教育领域的一个研究结果.相信工作过几年.十几年的朋友对这个道理有些体会吧.但我相信这一点也很重要:"重要的道理明白太晚将抱憾终生!"所以放在每一条,让刚刚毕业的朋友们早点看到哈! 2.一定要确定自己的发展方向,并为此目的制定可行的计划. 不要说什么,&