Пример #1
0
        /// <summary>
        /// 解析商品节点
        /// </summary>
        /// <param name="modelProduct"></param>
        /// <param name="productDom"></param>
        private TmallProduct ResolverProductDom(IElement productDom)
        {
            TmallProduct modelProduct = null;

            if (null == productDom)
            {
                return(modelProduct);
            }
            modelProduct = new TmallProduct();
            try
            {
                //id
                string itemId = productDom.GetAttribute("data-id");
                if (string.IsNullOrEmpty(itemId))
                {
                    return(modelProduct);//凡是没有id 的商品,要么是广告 要么是其他非正常的商品
                }
                long.TryParse(itemId, out long _ItemId);
                modelProduct.ItemId = _ItemId;

                //title
                var titleDom = productDom.QuerySelector(".productTitle>a");
                modelProduct.Title   = titleDom.TextContent.Replace("\n", "");
                modelProduct.ItemUrl = titleDom.GetAttribute("href").GetHttpsUrl();

                //price
                var priceDom = productDom.QuerySelector(".productPrice>em");
                if (null != priceDom)
                {
                    decimal.TryParse(priceDom.GetAttribute("title"), out decimal _price);
                    modelProduct.Price = _price;
                }
                //pic
                var picDom = productDom.QuerySelector("div.productImg-wrap>a>img");
                if (null != picDom)
                {
                    if (picDom.HasAttribute("src"))
                    {
                        modelProduct.PicUrl = picDom.GetAttribute("src").GetHttpsUrl();
                    }
                    else if (picDom.HasAttribute("data-ks-lazyload"))
                    {
                        modelProduct.PicUrl = picDom.GetAttribute("data-ks-lazyload").GetHttpsUrl();
                    }

                    //modelProduct.PicUrl = picDom.GetAttribute("src").GetHttpsUrl();
                }

                //shop
                var shopDom = productDom.QuerySelector("div.productShop>a");
                if (null != shopDom)
                {
                    string shopHref = shopDom.GetAttribute("href");
                    modelProduct.ShopUrl = shopHref.GetHttpsUrl();
                    if (shopHref.Contains("user_number_id"))
                    {
                        var    queryString = shopHref.Substring(shopHref.IndexOf('?'));
                        string shopId      = HttpUtility.ParseQueryString(queryString, Encoding.UTF8)["user_number_id"];
                        long.TryParse(shopId, out long _shopId);
                        //modelProduct.ShopId = _shopId;//天猫店铺id 在搜索列表未出现
                        modelProduct.SellerId = _shopId;
                    }


                    modelProduct.ShopName = shopDom.TextContent.Replace("\n", "");
                }

                //status
                var statusDom = productDom.QuerySelector("p.productStatus");
                //成交量
                if (null != statusDom)
                {
                    var biz30dayDomSpan = statusDom.Children[0];
                    if (null != biz30dayDomSpan)
                    {
                        string bizTotal = biz30dayDomSpan.Children[0].TextContent;
                        if (!string.IsNullOrEmpty(bizTotal))
                        {
                            modelProduct.Biz30Day = bizTotal.Trim();
                        }
                    }


                    //评论量
                    var remarkDomSpan = statusDom.Children[1];
                    if (null != remarkDomSpan && remarkDomSpan.OuterHtml.Contains("评价"))
                    {
                        string remarkTotal = remarkDomSpan.Children[0].TextContent;
                        if (!string.IsNullOrEmpty(remarkTotal))
                        {
                            modelProduct.TotalBizRemarkCount = remarkTotal.Trim();
                        }
                        modelProduct.RemarkUrl = remarkDomSpan.Children[0].GetAttribute("href")
                                                 .GetHttpsUrl();
                    }
                }
                //sku list
                var skuListDom = productDom.QuerySelector("div.proThumb-wrap");
                if (null != skuListDom)
                {
                    var skuDomArry = skuListDom.QuerySelectorAll("b.proThumb-img");
                    if (skuDomArry != null && skuDomArry.Length > 0)
                    {
                        foreach (var itemSkuDom in skuDomArry)
                        {
                            var skuItemObj = new SkuItem();
                            skuItemObj.SkuId = itemSkuDom.GetAttribute("data-sku");
                            //skuItemObj.SkuName = itemSkuDom.GetAttribute("title");//天猫没有小图的名称
                            skuItemObj.SkuUrl = string.Concat(modelProduct.ItemUrl, "&sku_properties=", skuItemObj.SkuId)
                                                .GetHttpsUrl();

                            var imgSkuDom = itemSkuDom.Children[0];
                            if (imgSkuDom.HasAttribute("data-ks-lazyload"))
                            {
                                skuItemObj.SkuImgUrl = imgSkuDom.GetAttribute("data-ks-lazyload").GetHttpsUrl();
                            }
                            else if (imgSkuDom.HasAttribute("data-ks-lazyload-custom"))
                            {
                                skuItemObj.SkuImgUrl = imgSkuDom.GetAttribute("data-ks-lazyload-custom").GetHttpsUrl();
                            }



                            modelProduct.SkuList.Add(skuItemObj);
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                PluginContext.Logger.Error(ex);
            }
            return(modelProduct);
        }
Пример #2
0
        private List <SkuItem> GetSkuItems(int productId)
        {
            string storageHost = System.Configuration.ConfigurationManager.AppSettings["STORAGE_HOST"].ToString();

            List <SkuItem> items = new List <SkuItem>();

            DataTable dt = ProductBrowser.GetUniqueSkus(productId);

            int attributeId = 0;

            SkuItem item = null;

            foreach (DataRow current in dt.Rows)
            {
                //SkuId, a.AttributeId, AttributeName, UseAttributeImage, av.ValueId, ValueStr, ImageUrl

                int currentAttributeId = 0;
                if (current["AttributeId"] != DBNull.Value)
                {
                    currentAttributeId = (int)current["AttributeId"];
                }

                if (currentAttributeId != attributeId)
                {
                    //if (attributeId != 0)
                    //{
                    //    items.Add(item);
                    //}

                    attributeId = currentAttributeId;

                    string attributeName = "";
                    if (current["AttributeName"] != DBNull.Value)
                    {
                        attributeName = (string)current["AttributeName"];
                    }

                    bool isUseImage = false;
                    if (current["UseAttributeImage"] != DBNull.Value)
                    {
                        isUseImage = (bool)current["UseAttributeImage"];
                    }

                    item = new SkuItem(attributeId, attributeName, isUseImage);
                    items.Add(item);
                }

                int valueId = 0;
                if (current["ValueId"] != DBNull.Value)
                {
                    valueId = (int)current["ValueId"];
                }

                string value = "";
                if (current["ValueStr"] != DBNull.Value)
                {
                    value = (string)current["ValueStr"];
                }

                string imageUrl = "";
                if (current["ImageUrl"] != DBNull.Value)
                {
                    imageUrl = (string)current["ImageUrl"];

                    if (!imageUrl.StartsWith("http://"))
                    {
                        imageUrl = storageHost + (imageUrl.StartsWith("/") ? "" : "/") + imageUrl;
                    }
                }

                item.Items.Add(new SkuItemOption(valueId, value, imageUrl));
            }

            return(items);
        }