using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; using AllBase; using Work.Api; using Work.CollectClass; namespace Work.ManageClass { public class UpPinduoduoProduct { public static string ExpressId = ""; public static int NoReplaceDay = 0; public static int LimitBuy, GroupCount, LimitBuyTimes, AddPercent, AddPrice, SingleBuyAddPrice, BaseBuy, BaseBuyAdd, ThreadCount; public static bool RandAddPrice = false, CatSame = false, NoReplaceDays = false; public static Dictionary EditDayTemp = new Dictionary(); public static Dictionary> PinduoduoProp = new Dictionary>(); public static string Name; public static List ProductTemp = new List(); public UpPinduoduoProduct(ShopChatBase shop,string name) { Shop = shop; Name = name; } public UpPinduoduoProduct() { } public ShopChatBase Shop = null; /// /// 初始化属性名称 /// public void IniProp(int mainCatId, string cookies) { if (PinduoduoProp.ContainsKey(mainCatId) && PinduoduoProp[mainCatId].Count > 0) return; Dictionary props = new Dictionary(); PinduoduoApiPropId p = new PinduoduoApiPropId(Shop); string html = p.Get(mainCatId); var mm = BaseRegex.GetMatchRegex(ref html, @"\{""parent_spec_id"":([\d]+),""cat_id"":[\d]+,""parent_spec_name"":""([^""]+?)"""); for (int j = 0; mm != null && j < mm.Count; j++) { PinduoduoPropBase pp = new PinduoduoPropBase(); pp.Name = mm[j].Groups[2].Value; pp.Id = mm[j].Groups[1].Value; try { props.Add(pp.Name, pp); } catch { } } try { if (props.Count > 0) PinduoduoProp.Add(mainCatId, props); } catch(Exception ex) { } if (props.Count > 0) return; string url = "https://mms.pinduoduo.com/glide/v2/mms/query/spec/name/list"; string refere = "https://mms.pinduoduo.com/Pdd.html"; string data = "{}"; html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data, cookies); if (!string.IsNullOrEmpty(html) && html.Contains("过于频繁")) { Thread.Sleep(30 * 1000); html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data, cookies); } if (!string.IsNullOrEmpty(html) && html.Contains("过于频繁")) { Thread.Sleep(30 * 1000); html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data, cookies); } if (!string.IsNullOrEmpty(html) && html.Contains("过于频繁")) { //MessageBox.Show("请不要单个店铺同时开多个软件上传\r\n请调整", "提示"); Thread.Sleep(60 * 1000); html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data, cookies); } if (!string.IsNullOrEmpty(html) && html.Contains("过于频繁")) { Thread.Sleep(60 * 1000); html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data, cookies); } var m = BaseRegex.GetMatchRegex(ref html, @"""value"":""(.*?)"""); for (int j = 0; m != null && j < m.Count; j++) { PinduoduoPropBase pp = new PinduoduoPropBase(); pp.Name = m[j].Groups[1].Value; try { if (!props.ContainsKey(pp.Name)) props.Add(pp.Name, pp); } catch { } } try { PinduoduoProp.Add(mainCatId, props); } catch { } } /// /// 自动给无图片的SKU识别对应的图片 /// /// public void BuildSkuMapProps(ref ProductCollectBase p) { if (p.Props.Count == 0) { return; } string cookies = Shop.Cookies; int mainCatId = Shop.MainCatId; int maxImageCut = 0, maxImageCount = 0; for (int i = 0; i < p.Props.Count; i++) { //if (p.Props[i].Values.Count <= 1 && p.from == "淘宝"&&p.cat_id != 3109)//只有一个属性的删除 //{ // p.Props.RemoveAt(i); // i--; // continue; //} for (int j = 0; j < p.Props[i].Values.Count; j++) { if ( p.Props[i].Values[j].name.Contains("代理")) p.Props[i].Values.RemoveAt(j); continue; } int imageCount = 0; for (int j = 0; j < p.Props[i].Values.Count; j++) { if (!string.IsNullOrEmpty(p.Props[i].Values[j].image)) imageCount++; } if (imageCount > maxImageCount) { maxImageCount = imageCount; maxImageCut = i; } } if (p.Props.Count == 0) { return; } string[] l = @"客服 QQ 定制品 定制 定金 差价 限量 联系 VX 抽奖 留言 明式 四季 特价 专拍 补差 尺寸 价格 客服 运费到付 发货 直接拍 运费险 团购 ".Split('\n'); for (int i = 0; i < p.SkuMaps.Count; i++) { if (!string.IsNullOrEmpty(p.SkuMaps[i].prop_image)) { foreach (string s in l) { if (string.IsNullOrEmpty(s)) continue; string m = s.Trim(); BaseRegex.Relpace(ref p.SkuMaps[i].name, m, ""); } continue; } for (int j = 0; j < p.Props[maxImageCut].Values.Count; j++) { if (p.SkuMaps[i].name.Contains(p.Props[maxImageCut].Values[j].name)) { p.SkuMaps[i].prop_image = p.Props[maxImageCut].Values[j].image; break; } } foreach (string s in l) { if (string.IsNullOrEmpty(s)) continue; string m = s.Trim(); BaseRegex.Relpace(ref p.SkuMaps[i].name, m, ""); } } int cut = 0; for (int i = 0; i < p.SkuMaps.Count; i++) { if (!string.IsNullOrEmpty(p.SkuMaps[i].prop_image)) continue; p.SkuMaps[i].prop_image = p.Images[cut]; cut++; if (cut >= p.Images.Count) cut = 0; } if (p.Props.Count > 2 && p.from == "淘宝")//两个属性以上,去掉一个 { int minCount = 100, minCut = -1; for (int i = 0; i < p.Props.Count; i++) { if (p.Props[i].Values.Count < minCount && string.IsNullOrEmpty(p.Props[i].Values[0].image)) { minCount = p.Props[i].Values.Count; minCut = i; } } if (minCut > -1) { p.Props.RemoveAt(minCut); } } int cutId = 0; PinduoduoPropBase first = new PinduoduoPropBase(); PinduoduoPropBase second = new PinduoduoPropBase(); if (!PinduoduoProp.ContainsKey(mainCatId)) { LogSave.Add(Name, "分类初始化异常,请重新打开软件"); return; } for (int j = 0; j < p.Props.Count; j++) { foreach (KeyValuePair pb in PinduoduoProp[mainCatId]) { if (cutId == 0) first = pb.Value; if (cutId == 1) second = pb.Value; if (pb.Key == p.Props[j].name) { p.Props[j].pinduoduo_name = pb.Key; if (p.cat_id != 3109 || (p.cat_id == 3109 && p.Props[j].pinduoduo_name != "容量")) p.Props[j].pinduoduo_id = pb.Value.Id; break; } cutId++; } } for (int j = 0; j < p.Props.Count; j++) { foreach (KeyValuePair pb in PinduoduoProp[mainCatId]) { if (string.IsNullOrEmpty(p.Props[j].pinduoduo_name) && p.Props[j].name.Contains(pb.Key)) { p.Props[j].pinduoduo_name = pb.Key; if (p.cat_id != 3109||(p.cat_id == 3109 && p.Props[j].pinduoduo_name!="容量")) p.Props[j].pinduoduo_id = pb.Value.Id; break; } } } if (p.Props.Count == 1 && string.IsNullOrEmpty(p.Props[0].pinduoduo_name)) { p.Props[0].pinduoduo_name = first.Name; p.Props[0].pinduoduo_id = first.Id; } else if (p.Props.Count == 2) { if (string.IsNullOrEmpty(p.Props[0].pinduoduo_name) && string.IsNullOrEmpty(p.Props[1].pinduoduo_name)) { p.Props[0].pinduoduo_name = first.Name; p.Props[0].pinduoduo_id = first.Id; p.Props[1].pinduoduo_name = second.Name; p.Props[1].pinduoduo_id = second.Id; } else if (string.IsNullOrEmpty(p.Props[0].pinduoduo_name)) { if (p.Props[1].pinduoduo_name == first.Name) { p.Props[0].pinduoduo_name = second.Name; p.Props[0].pinduoduo_id = second.Id; } else { p.Props[0].pinduoduo_name = first.Name; p.Props[0].pinduoduo_id = first.Id; } } else if (string.IsNullOrEmpty(p.Props[1].pinduoduo_name)) { if (p.Props[0].pinduoduo_name == first.Name) { p.Props[1].pinduoduo_name = second.Name; p.Props[1].pinduoduo_id = second.Id; } else { p.Props[1].pinduoduo_name = first.Name; p.Props[1].pinduoduo_id = first.Id; } } } for (int i = 0; i < p.Props.Count; i++) { if (p.cat3 == 3109 && p.Props[i].name.Contains("容量")) continue; string refere = "https://mms.pinduoduo.com/Pdd.html"; if (string.IsNullOrEmpty(p.Props[i].pinduoduo_id) || p.Props[i].pinduoduo_id == "0") { string url = "https://mms.pinduoduo.com/glide/v2/mms/query/spec/by/name"; string data = "{\"parent_id\":0,\"name\":\"" + p.Props[i].pinduoduo_name + "\"}"; string html = GetPostTaobaoHtml.GetJsonPost(url, refere, true, data, cookies); string id = BaseRegex.GetLongJson(ref html, "result").ToString(); if (id == "0") { Thread.Sleep(1000); html = GetPostTaobaoHtml.GetJsonPost(url, refere, true, data, cookies); id = BaseRegex.GetLongJson(ref html, "spec_id").ToString(); } if (id == "0") { LogSave.Add(Name, "获取类别ID异常:" + p.Props[i].pinduoduo_name); continue; } if (PinduoduoProp[mainCatId].ContainsKey(p.Props[i].pinduoduo_name)) PinduoduoProp[mainCatId][p.Props[i].pinduoduo_name].Id = id; p.Props[i].pinduoduo_id = id; } for (int j = 0; j < p.Props[i].Values.Count; j++) { //if (p.from_site_id == 1 && j > 12 && p.Props[i].Values.Count > 12)//属性元素超过15个的就丢弃 //{ // p.Props[i].Values.RemoveAt(j); // j--; // continue; //} foreach (string s in l) { if (string.IsNullOrEmpty(s)) continue; string m = s.Trim(); BaseRegex.Relpace(ref p.Props[i].Values[j].name, m, ""); } if (PinduoduoProp[mainCatId].ContainsKey(p.Props[i].pinduoduo_name) && PinduoduoProp[mainCatId][p.Props[i].pinduoduo_name].Values.ContainsKey(p.Props[i].Values[j].name)) { p.Props[i].Values[j].id = PinduoduoProp[mainCatId][p.Props[i].pinduoduo_name].Values[p.Props[i].Values[j].name].ToString(); continue; } string html, propvid=""; if (BaseClass.UseApiFirst) { PinduoduoApiPropId api = new PinduoduoApiPropId(Shop); html = api.GetPropId(p.Props[i].pinduoduo_id, p.Props[i].Values[j].name); propvid = BaseRegex.GetStringJson(ref html, "spec_id"); if (string.IsNullOrEmpty(propvid)) { string url = "https://mms.pinduoduo.com/glide/v2/mms/query/spec/by/name"; string data = "{\"parent_id\":" + p.Props[i].pinduoduo_id + ",\"name\":\"" + p.Props[i].Values[j].name + "\"}"; html = GetPostTaobaoHtml.GetJsonPost(url, refere, true, data, cookies); propvid = BaseRegex.GetStringJson(ref html, "result"); if (string.IsNullOrEmpty(propvid)) { Thread.Sleep(1000); html = GetPostTaobaoHtml.GetJsonPost(url, refere, true, data, cookies); propvid = BaseRegex.GetStringJson(ref html, "result"); } } } else { string url = "https://mms.pinduoduo.com/glide/v2/mms/query/spec/by/name"; string data = "{\"parent_id\":" + p.Props[i].pinduoduo_id + ",\"name\":\"" + p.Props[i].Values[j].name + "\"}"; html = GetPostTaobaoHtml.GetJsonPost(url, refere, true, data, cookies); if(html.Contains("规格名称字数过长")) { string title = p.Props[i].Values[j].name; if (BaseClass.GetCharLength(title) > 30) title = BaseClass.SubCharLength(title, 30); data = "{\"parent_id\":" + p.Props[i].pinduoduo_id + ",\"name\":\"" + title + "\"}"; html = GetPostTaobaoHtml.GetJsonPost(url, refere, true, data, cookies); } propvid = BaseRegex.GetStringJson(ref html, "result"); if (string.IsNullOrEmpty(propvid)) { Thread.Sleep(1000); html = GetPostTaobaoHtml.GetJsonPost(url, refere, true, data, cookies); propvid = BaseRegex.GetStringJson(ref html, "result"); } if (string.IsNullOrEmpty(propvid)) { PinduoduoApiPropId api = new PinduoduoApiPropId(Shop); html = api.GetPropId(p.Props[i].pinduoduo_id, p.Props[i].Values[j].name); propvid = BaseRegex.GetStringJson(ref html, "spec_id"); } } if (string.IsNullOrEmpty(propvid)) { p.Props[i].Values.RemoveAt(j); j--; continue; } p.Props[i].Values[j].id = propvid; try { PinduoduoProp[mainCatId][p.Props[i].pinduoduo_name].Values.Add(p.Props[i].Values[j].name, long.Parse(p.Props[i].Values[j].id)); } catch { } } } } public void BuildSkuMapProps(ref ProductCollectBase prod, string cookies, int mainCatId) { if (prod.Props.Count == 0) { return; } int maxImageCut = 0, maxImageCount = 0; for (int i = 0; i < prod.Props.Count; i++) { if (prod.Props[i].Values.Count <= 1 && prod.from == "淘宝")//只有一个属性的删除 { prod.Props.RemoveAt(i); i--; continue; } int imageCount = 0; for (int j = 0; j < prod.Props[i].Values.Count; j++) { if (!string.IsNullOrEmpty(prod.Props[i].Values[j].image)) imageCount++; } if (imageCount > maxImageCount) { maxImageCount = imageCount; maxImageCut = i; } } if (prod.Props.Count == 0) { return; } for (int i = 0; i < prod.SkuMaps.Count; i++) { if (!string.IsNullOrEmpty(prod.SkuMaps[i].prop_image)) continue; for (int j = 0; j < prod.Props[maxImageCut].Values.Count; j++) { if (prod.SkuMaps[i].name.Contains(prod.Props[maxImageCut].Values[j].name)) { prod.SkuMaps[i].prop_image = prod.Props[maxImageCut].Values[j].image; break; } } } int cut = 0; for (int i = 0; i < prod.SkuMaps.Count; i++) { if (!string.IsNullOrEmpty(prod.SkuMaps[i].prop_image)) continue; prod.SkuMaps[i].prop_image = prod.Images[cut]; cut++; if (cut >= prod.Images.Count) cut = 0; } if (prod.Props.Count > 2 && prod.from == "淘宝")//两个属性以上,去掉一个 { int minCount = 100, minCut = -1; for (int i = 0; i < prod.Props.Count; i++) { if (prod.Props[i].Values.Count < minCount && string.IsNullOrEmpty(prod.Props[i].Values[0].image)) { minCount = prod.Props[i].Values.Count; minCut = i; } } if (minCut > -1) { prod.Props.RemoveAt(minCut); } } int cutId = 0; PinduoduoPropBase first = new PinduoduoPropBase(); PinduoduoPropBase second = new PinduoduoPropBase(); if (!PinduoduoProp.ContainsKey(mainCatId)) { LogSave.Add(Name, "分类初始化异常,请重新打开软件"); return; } for (int j = 0; j < prod.Props.Count; j++) { foreach (KeyValuePair pb in PinduoduoProp[mainCatId]) { if (cutId == 0) first = pb.Value; if (cutId == 1) second = pb.Value; if (pb.Key == prod.Props[j].name) { prod.Props[j].pinduoduo_name = pb.Key; prod.Props[j].pinduoduo_id = pb.Value.Id; break; } cutId++; } } for (int j = 0; j < prod.Props.Count; j++) { foreach (KeyValuePair pb in PinduoduoProp[mainCatId]) { if (string.IsNullOrEmpty(prod.Props[j].pinduoduo_name) && prod.Props[j].name.Contains(pb.Key)) { prod.Props[j].pinduoduo_name = pb.Key; prod.Props[j].pinduoduo_id = pb.Value.Id; break; } } } if (prod.Props.Count == 1 && string.IsNullOrEmpty(prod.Props[0].pinduoduo_name)) { prod.Props[0].pinduoduo_name = first.Name; prod.Props[0].pinduoduo_id = first.Id; } else if (prod.Props.Count == 2) { if (string.IsNullOrEmpty(prod.Props[0].pinduoduo_name) && string.IsNullOrEmpty(prod.Props[1].pinduoduo_name)) { prod.Props[0].pinduoduo_name = first.Name; prod.Props[0].pinduoduo_id = first.Id; prod.Props[1].pinduoduo_name = second.Name; prod.Props[1].pinduoduo_id = second.Id; } else if (string.IsNullOrEmpty(prod.Props[0].pinduoduo_name)) { if (prod.Props[1].pinduoduo_name == first.Name) { prod.Props[0].pinduoduo_name = second.Name; prod.Props[0].pinduoduo_id = second.Id; } else { prod.Props[0].pinduoduo_name = first.Name; prod.Props[0].pinduoduo_id = first.Id; } } else if (string.IsNullOrEmpty(prod.Props[1].pinduoduo_name)) { if (prod.Props[0].pinduoduo_name == first.Name) { prod.Props[1].pinduoduo_name = second.Name; prod.Props[1].pinduoduo_id = second.Id; } else { prod.Props[1].pinduoduo_name = first.Name; prod.Props[1].pinduoduo_id = first.Id; } } } for (int i = 0; i < prod.Props.Count; i++) { string refere = "https://mms.pinduoduo.com/Pdd.html"; if (string.IsNullOrEmpty(prod.Props[i].pinduoduo_id) || prod.Props[i].pinduoduo_id == "0") { string url = "https://mms.pinduoduo.com/glide/v2/mms/query/spec/by/name"; string data = "{\"parent_id\":0,\"name\":\"" + prod.Props[i].pinduoduo_name + "\"}"; string html = GetPostTaobaoHtml.GetJsonPost(url, refere, true, data, cookies); string id = BaseRegex.GetLongJson(ref html, "result").ToString(); if (id == "0") { Thread.Sleep(3000); html = GetPostTaobaoHtml.GetJsonPost(url, refere, true, data, cookies); id = BaseRegex.GetLongJson(ref html, "spec_id").ToString(); } if (id == "0") { LogSave.Add(Name, "获取类别ID异常:" + prod.Props[i].pinduoduo_name); continue; } if (PinduoduoProp[mainCatId].ContainsKey(prod.Props[i].pinduoduo_name)) PinduoduoProp[mainCatId][prod.Props[i].pinduoduo_name].Id = id; prod.Props[i].pinduoduo_id = id; } for (int j = 0; j < prod.Props[i].Values.Count; j++) { //if (prod.from_site_id == 1 && j >= 30 && prod.Props[i].Values.Count >= 30) // 属性元素超过30个的就丢弃 //{ // prod.Props[i].Values.RemoveAt(j); // j--; // continue; //} if (PinduoduoProp[mainCatId].ContainsKey(prod.Props[i].pinduoduo_name) && PinduoduoProp[mainCatId][prod.Props[i].pinduoduo_name].Values.ContainsKey(prod.Props[i].Values[j].name)) { prod.Props[i].Values[j].id = PinduoduoProp[mainCatId][prod.Props[i].pinduoduo_name].Values[prod.Props[i].Values[j].name].ToString(); continue; } PinduoduoApiPropId api = new PinduoduoApiPropId(Shop); string html = api.GetPropId(prod.Props[i].pinduoduo_id, prod.Props[i].Values[j].name); string propvid = BaseRegex.GetStringJson(ref html, "spec_id"); if (!string.IsNullOrEmpty(propvid)) { prod.Props[i].Values[j].id = propvid; try { PinduoduoProp[mainCatId][prod.Props[i].pinduoduo_name].Values.Add(prod.Props[i].Values[j].name, long.Parse(prod.Props[i].Values[j].id)); } catch { } continue; } string url = "https://mms.pinduoduo.com/glide/v2/mms/query/spec/by/name"; string data = "{\"parent_id\":" + prod.Props[i].pinduoduo_id + ",\"name\":\"" + prod.Props[i].Values[j].name + "\"}"; html = GetPostTaobaoHtml.GetJsonPost(url, refere, true, data, cookies); propvid = BaseRegex.GetStringJson(ref html, "result"); if (string.IsNullOrEmpty(propvid)) { Thread.Sleep(3000); html = GetPostTaobaoHtml.GetJsonPost(url, refere, true, data, cookies); propvid = BaseRegex.GetStringJson(ref html, "result"); } if (string.IsNullOrEmpty(propvid)) { prod.Props[i].Values.RemoveAt(j); j--; continue; } prod.Props[i].Values[j].id = propvid; try { PinduoduoProp[mainCatId][prod.Props[i].pinduoduo_name].Values.Add(prod.Props[i].Values[j].name, long.Parse(prod.Props[i].Values[j].id)); } catch { } } } } public static Dictionary PriceTemp = new Dictionary(); public static int GetNewPrice(decimal beforePrice, int addPercent, int addPrice, long pid, int addSinglePrice, decimal maxPrice) { //if (UserStepPrice) //{ // int p = (int)(beforePrice * 100) + PriceAllAdd*100; // if (beforePrice >= PriceBefor1 && beforePrice <= PriceEnd1) // return p + PriceAdd1 * 100; // if (beforePrice >= PriceBefor2 && beforePrice <= PriceEnd2) // return p + PriceAdd2 * 100; // if (beforePrice >= PriceBefor3 && beforePrice <= PriceEnd3) // return p + PriceAdd3 * 100; // if (beforePrice >= PriceBefor4 && beforePrice <= PriceEnd4) // return p + PriceAdd4 * 100; // if (beforePrice >= PriceBefor5 && beforePrice <= PriceEnd5) // return p + PriceAdd5 * 100; //} if (beforePrice < 1) beforePrice = maxPrice; if (beforePrice < 1) beforePrice = 10000; int before = (int)(beforePrice * 100); string key = pid + "," + before + "," + addPercent + "," + addPrice + "," + addSinglePrice; int price; if (PriceTemp.ContainsKey(key)) { price = PriceTemp[key]; return price; } //if (addSinglePrice == 0) // { price = before * (100 + addPercent) / 100 + addPrice * 100 + (RandAddPrice ? new Random(Guid.NewGuid().GetHashCode()).Next(10, 90) : 0); // } // else // price = (int)((beforePrice + addSinglePrice) * 100) + (RandAddPrice ? new Random(Guid.NewGuid().GetHashCode()).Next(10, 90) : 0); try { PriceTemp.Add(key, price); } catch { } return price; } public static string UploadImage(byte[] img) { return UploadImage(img, null); } /// /// 上传图片 /// /// /// public static string UploadImage(byte[] img, ShopChatBase Shop) { PinduoduoApiGetProduct p = new PinduoduoApiGetProduct(Shop); string html = p.UploadImage(img); string imgUrl = BaseRegex.GetStringJson(ref html, "image_url"); if (string.IsNullOrEmpty(imgUrl)) { string Cookies = Shop.Cookies; string url = "https://mms.pinduoduo.com/earth/api/upload/getSignature"; string refere = "https://mms.pinduoduo.com/goods/goods_add/index?id=5146155709&type=edit&from=category"; html = GetPostTaobaoHtml.GetJsonPost(url, refere, true, "{}", Cookies); string sign = BaseRegex.GetStringJson(ref html, "signature"); if (string.IsNullOrEmpty(sign)) { return ""; } string data = "{\"upload_sign\":\"" + sign + "\",\"image\":\"data:image/jpeg;base64," + Convert.ToBase64String(img) + "\"}"; url = "https://file.yangkeduo.com/v2/store_image"; html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data, Cookies); imgUrl = BaseRegex.GetStringJson(ref html, "url"); LogSave.Add(Name, "上传图片:" + imgUrl); return imgUrl; } return imgUrl; } public static Dictionary TypeName = new Dictionary(); public static Dictionary TypeValues = new Dictionary(); private static int firstKeyId = 0, firstValueId = 0; public static string AddType(ref ProductCollectBase p, int mainCatId, string cookies, int mallId) { if (mainCatId == 5) { if (TypeName.Count == 0) { string url = "https://mms.pinduoduo.com/malls/" + mallId + "/transport/glide/query/clothes_fabric/list"; string refere = "https://mms.pinduoduo.com/Pdd.html"; string html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, "{}", cookies); var m = BaseRegex.GetMatchRegex(ref html, @"""code"":([\d]+),""desc"":""(.*?)"""); for (int i = 0; m != null && i < m.Count; i++) { string name = m[i].Groups[2].Value; int value = int.Parse(m[i].Groups[1].Value); if (firstKeyId == 0) firstKeyId = value; if (!TypeName.ContainsKey(name)) TypeName.Add(name, value); } } if (TypeValues.Count == 0) { string url = "https://mms.pinduoduo.com/malls/" + mallId + "/transport/glide/query/clothes_fabric_content/list"; string refere = "https://mms.pinduoduo.com/Pdd.html"; string html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, "{}", cookies); var m = BaseRegex.GetMatchRegex(ref html, @"""code"":([\d]+),""desc"":""(.*?)"""); for (int i = 0; m != null && i < m.Count; i++) { string name = m[i].Groups[2].Value; int value = int.Parse(m[i].Groups[1].Value); if (firstValueId == 0) firstValueId = value; if (!TypeValues.ContainsKey(name)) TypeValues.Add(name, value); } } } if (mainCatId == 5) { string name = "材质成分"; string value = ""; for (int i = 0; i < p.Prop.Count; i++) { if (p.Prop[i].Key == name) { value = p.Prop[i].Value; break; } } int keyId = 0, valueId = 0; if (!string.IsNullOrEmpty(value) && value.Contains("%")) { string v = BaseRegex.GetMatchRegexString(ref value, @"([\d]+)%"); string namex = value.Substring(0, value.IndexOf(v + "%")); if (string.IsNullOrEmpty(v) || string.IsNullOrEmpty(namex)) { goto NoValue; } int pe = int.Parse(v); foreach (KeyValuePair k in TypeName) { if (k.Key.Contains(namex) || namex.Contains(k.Key)) { keyId = k.Value; foreach (KeyValuePair vv in TypeValues) { var mm = BaseRegex.GetMatchRegex(vv.Key, @"([\d]+)%"); if (mm.Count == 2) { int min = int.Parse(mm[0].Groups[1].Value); int max = int.Parse(mm[1].Groups[1].Value); if (pe >= min && pe <= max) { valueId = vv.Value; goto NoValue; } } } break; } } } NoValue: if (keyId == 0) keyId = firstKeyId; if (valueId == 0) valueId = firstValueId; string addContent = ",\"fabric\":" + keyId + ",\"fabric_content\":" + valueId; return addContent; } return ""; } /// /// 下架产品 /// /// /// public static bool SetOffLine(long id, ShopChatBase shop) { string cookies = shop == null ? "" : shop.Cookies; PinduoduoApiGetProduct api = new PinduoduoApiGetProduct(shop); api.Name = Name; string html = api.SetOnline(id, false); //string data = "{\"goods_id\":" + id + "}"; string urlx = "https://mms.pinduoduo.com/vodka/v2/mms/batchOffSale"; string refere = "https://mms.pinduoduo.com/Pdd.html"; //string html = GetPostTaobaoHtml.UploadTaobaoPost(urlx, refere, true, data, cookies); if (string.IsNullOrEmpty(html) || html.Contains("过于频繁")) { if (!string.IsNullOrEmpty(html) && html.Contains("过于频繁")) { LogSave.Add(Name, "速度太快,休眠2-5分钟"); Thread.Sleep(100 * 1000); } else { LogSave.Add(Name, "不能下架"); return false; } html = api.SetOnline(id, false); } if (string.IsNullOrEmpty(html) || html.Contains("过于频繁")) { Thread.Sleep(100 * 1000); html = api.SetOnline(id, false); } if (string.IsNullOrEmpty(html) || html.Contains("过于频繁")) { Thread.Sleep(100 * 1000); LogSave.Add(Name, "下架产品失败:" + id); return false; } if (html.Contains("使用MMS后台做此")) { if (string.IsNullOrEmpty(PinduoduoAuth.strContent)) { PinduoduoAuth.strContent = GetVisitProductNew.strJs;//FileBase.ReadAllText(path); } string NoCode = ""; string strTime = BaseClass.GetTime(DateTime.Now).ToString() + "000"; if (string.IsNullOrEmpty(NoCode)) { string htmlx = GetHtml.Gbk("http://nano.qixiaoke.com/nano.txt"); NoCode = BaseRegex.GetMatchRegexString(ref htmlx, @"([\w\W]+?)-----"); } string fun2 = string.Format(@"getEncode('{0}','{1}','{2}')", strTime, NoCode, ""); string codex = UploadPinduoduoSet.ExecuteScript(fun2, PinduoduoAuth.strContent); string data = "{\"goodsId\":" + id + ",\"crawlerInfo\":\"" + codex + "\"}"; html = GetPostTaobaoHtml.UploadTaobaoPost(urlx, refere, true, data, cookies); } LogSave.Add(Name, "下架产品成功:" + id); return true; } } public class PinduoduoPropBase { public string Name; public string Id; public Dictionary Values = new Dictionary(); } }