/// <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); }
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); }