京东价格监控软件开发技术探讨一:C#实现获取京东商品信息(价格、库存)

“杀京东”京东价格监控软件,做最走心的京东价格监控软件!

c#程序如何获取到京东商品信息?

这是“杀京东”项目组遇到的第一个技术问题,下面将解决方案详细描述。

项目组首先使用网页监控工具(如Fiddler)获取所有网页数据,找到商品价格返回的Json文件。

京东价格监控软件开发技术探讨一:C#实现获取京东商品信息(价格、库存)_第1张图片

如上图所示,商品价格的请求为:

“http://p.3.cn/prices/get?callback=cnp&type=1&area=22_1930_50947&pdtk=&pduid=759492263&pdpin=&pdbp=0&skuid=J_10048659787”

商品库存情况请求为:

http://c0.3.cn/stock?skuId=1700908129&venderId=32533&cat=6144,12041,12047&area=1_72_2799_0&buyNum=1&extraParam={%22originid%22:%221%22}&ch=1&callback=getStockCallback

那么现在就简单了,通过HttpWebRequest控件去请求对应页面,对返回值进行正则表达式的判断,取得需要的值。

获取价格代码:

            try
            {
                if (_myProduct == null)
                {
                    _myProduct = new ProductInfo();
                }
                double myPrice = 0;
                //商品价格 http://pm.3.cn/prices/pcpmgets?callback=jQuery3820568&skuids=202459&origin=2&source=1&area=1_2800_4134_0&_=1451370905656
                //jQuery5068505([{"id":"202459","pcp":"69.00","p":"59.00","m":"121.00"}]);

                string url_price = string.Format("http://pm.3.cn/prices/pcpmgets?callback=jQuery3820568&skuids={0}&origin=2&source=1&area=1_2800_4134_0&_=1451370905656", pid);
                string html_price = HttpHelper.GetResponse(url_price, "get", string.Empty);
                string str_price = html_price.Replace("jQuery3820568([", "").Replace("]);", "");

                JdWareMobilePrice price = JsonConvert.DeserializeObject(str_price);
                myPrice = double.Parse(price.p);
                //规则:如果价格小于0,该商品下柜
                if (myPrice < 0)
                {
                    myPrice = 0;
                        _myProduct.ProductIsSaled = -1;
                        _myProduct.ProductStock = "下柜";
                }
                if (!string.IsNullOrEmpty(price.pcp))
                {
                    _myProduct.ProductPriceType = "手机";
                }
                _myProduct.ProductPrice = myPrice;

                return myPrice;
            }
            catch (Exception ex)
            {
                Debug.WriteLine(ex.Message);
                return 0;
            }
获取商品的价格很简单,传入商品编号(skuid)即可,其它Key值都可以不用管,毕竟商品价格基本是整个京东统一的。

获取库存代码:

                string url_service = "http://c0.3.cn/stock?skuId=" + tID + "&venderId=" + venderId.Trim() + "&cat=" + cat + "&area=22_1930_49322_0&buyNum=1&extraParam={%22originid%22:%221%22}&ch=1&callback=getStockCallback";

                string html_service = HttpHelper.GetResponse(url_service, "get", string.Empty);
                string str_stock = html_service.Replace("getStockCallback(", "").TrimEnd(')');
                StockInfo jdStock = JsonConvert.DeserializeObject(str_stock);

                if (_myProduct == null)
                {
                    _myProduct = new ProductInfo();
                }
                _myProduct.ProductBrand = string.IsNullOrEmpty(jdStock.Stock.self_D.deliver) ? jdStock.Stock.D.deliver : jdStock.Stock.self_D.deliver;
                //-1 下柜 0 无货 1 有货 2 配货 3 预订
                _myProduct.ProductIsSaled = jdStock.Stock.StockState == 33 ? 1 : (jdStock.Stock.StockState == 40 ? 2 : (jdStock.Stock.StockState == 36 ? 3 : 0)); //33 有货(1), 40 可配货(2), 36 预订(3), 无货(0)
                _myProduct.ProductStock = jdStock.Stock.StockStateName;

获取商品库存信息除了商品编号外,还需要注意的是店铺编号和配送区域。配送区域的获取比较麻烦,这个另表。

获取店铺编号可以在Html主页面中找到,如下:


                    
                    

你可能感兴趣的:(OpenSource,爬虫实战:电商采数令)