using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; using System.Windows.Forms; using AllBase; using Work.Api; using Work.ManageClass; namespace Work.CollectClass { public class BigDataBuild { public static Dictionary Keywords = new Dictionary(); public List NoKeyword = new List(); public static List Product = new List(); public static List ProductTemp = new List(); public static bool Running = false, AutoAdd = false, OnlyFree = false,BuildAutoAdd=false; public static int BeginPrice = 0, EndPrice = 0, BeginSaleCount = 0, EndSaleCount = 0, GetCount = 0, MaxCount = 0, ThisCount = 0; public int SiteId = 1; public string Name; public static string SearchUrl = "", MainCatName = ""; public BigDataBuild(string name) { if (Keywords.Count == 0) IniKeyword(); Name = name; } public void Get(int siteId, string noKeyword) { NoKeyword.Clear(); string[] l = noKeyword.Split('\n'); foreach (var s in l) { string ss = s.Trim(); if (string.IsNullOrEmpty(s)) continue; NoKeyword.Add(ss); } SiteId = siteId; new Thread(Get).Start(); } public string GetRandTitle(string title) { var m = BaseRegex.GetMatchRegex(ref title, @"(【[\w\W]+?】)"); string before = ""; for (int i = 0; i < m.Count; i++) { before += m[i].Groups[1].Value; title = title.Replace(m[i].Groups[1].Value, ""); } if (string.IsNullOrEmpty(title)) return ""; List keyx = new Segment().Get(title); string newTitle = "",left = title+" "; foreach (string s in keyx) { newTitle += s; for (int i = 0; i < left.Length - s.Length; i++) { string key = left.Substring(i, s.Length); if (key == s) { if (i > 0) left = left.Substring(0, i) + " " + left.Substring(i + s.Length); else left = left.Substring(s.Length); break; } } } return before+newTitle + left.Replace(" ",""); } public void Get() { int mainCatId = BaseClass.MainCatId; foreach (KeyValuesBase key in FromTitleToCat.MainCat) { if (key.Value2 == MainCatName) mainCatId = int.Parse(key.Key); } string url = BaseClass.LoginApiUrl + "?obj=product/product&act=get"; StringBuilder s = new StringBuilder(); //s.Append("&act=get"); s.Append("&begin_price=" + BeginPrice); s.Append("&end_price=" + EndPrice); s.Append("&begin_sale_count=" + BeginSaleCount); s.Append("&end_sale_count=" + EndSaleCount); s.Append("&get_count=" + GetCount); s.Append("&site_id=" + SiteId); s.Append("&main_cat_id=" + mainCatId); string html = GetHtml.PostUtf8(url, UserLogin.GetSignaturex() + s); var m = BaseRegex.GetMatchRegex(ref html, @"]+?)>"); for (int i = 0; m != null && i < m.Count; i++) { string list = m[i].Groups[0].Value; int siteId = BaseRegex.GetIntJson(ref list, "site_id"); TaobaoProductBase t = new TaobaoProductBase(); t.FromId = BaseRegex.GetLongJson(ref list, "product_id"); t.Titlte = BaseRegex.GetStringJson(ref list, "name").Replace("2017","2018"); bool had = false; foreach (string k in NoKeyword) { if (t.Titlte.Contains(k)) { had = true; break; } } if (had) continue; t.FromType = siteId == 1 ? "淘宝" : "拼多多"; t.Cat1 = BaseRegex.GetIntJson(ref list, "cat1"); if (t.Cat1 == 194) continue; decimal free = BaseRegex.GetDecimalJson(ref list, "express_price"); if (OnlyFree && free > 0) continue; t.Cat2 = BaseRegex.GetIntJson(ref list, "cat2"); t.Cat3 = BaseRegex.GetIntJson(ref list, "cat3"); t.MainCatId = BaseRegex.GetIntJson(ref list, "main_cid"); t.Price = BaseRegex.GetDecimalJson(ref list, "price"); t.SaleCount = BaseRegex.GetIntJson(ref list, "sold_count"); had = Product.Exists(p => p != null && p.FromId == t.FromId); if (!had) { Product.Add(t); ProductTemp.Add(t); } } } public void BuildTitle() { Running = true; MaxCount = Product.Count; for (int i = 0; i < Product.Count && Running; i++) { ThisCount = i + 1; var p = Product[i]; if (p == null || p.Build) continue; string title = p.Titlte; string mainKey = GetMainKeywords(title); if (string.IsNullOrEmpty(mainKey)) { LogSave.Add(Name, "没有找到主关键词"); continue; } string newTitle = GetAllTitle(mainKey); if (string.IsNullOrEmpty(newTitle) && mainKey.Split(' ').Length==4) { newTitle = GetAllTitle(mainKey.Substring(0,mainKey.LastIndexOf(" "))); } if (string.IsNullOrEmpty(newTitle)) { LogSave.Add(Name, "生成标题失败:" + mainKey); continue; } p.Build = true; p.Titlte = newTitle; LogSave.Add(Name, "生成标题成功:" + p.Titlte); BigDataCenter.ProductTemp.Add(p); if (BuildAutoAdd) { if (p.FromType == "内部数据") p.FromType = "拼多多"; UploadPinduoduoMain.ProductStock.Add(p); UploadPinduoduoMain.AddToDataBase(p); } } ThisCount = MaxCount; Running = false; } /// /// 以关键词和指数获取标题 /// /// /// public string GetIndexKeywordTitle(string keyword) { return ""; } /// /// 以关键词获取标题 /// /// /// public string GetAllTitle(string keyword) { if (string.IsNullOrEmpty(keyword) || !keyword.Contains(" ")) return ""; Thread.Sleep(500); string url = "http://t.qimake.cn/api.php?keyword=" + GetHtml.UrlEncodeUtf8(keyword); string data = UserLogin.GetSignaturex() ; string html = GetHtml.PostUtf8(url, data); html = GetHtml.Decode(html).Replace("\\/", "/"); //var m = BaseRegex.GetMatchRegex(ref html, @"""title"":""([^""]+?)"""); string titles = ""; string[] tl = html.Split('\n'); foreach (var ti in tl) { string title = ti.Replace("2017", "2019").Replace("2018", "2019"); title = BaseRegex.Clear(title, "(【[^】]+】)"); title = BaseRegex.Clear(title, @"(买[\d]+发[\d]+)"); title = BaseRegex.Clear(title, @"(满[\d]+减[\d]+)"); if (titles.Contains(title) || title.Length < 4) continue; if (title.Length > 60) title = title.Substring(0, 60); titles += title.Substring(4); } //for (int j = 0; m != null && j < m.Count; j++) //{ // string title = m[j].Groups[1].Value; // if (titles.Contains(title) || title.Length < 4) // continue; // titles += title.Substring(4); //} BaseRegex.Relpace(ref titles, "([0-9a-zA-Z-_:&;/])", ""); List keyx = new Segment().Get(titles); List key = new List(); string noKey = ",正品,限量,代购,限时,厂家,天猫,微信,京东,淘宝,韩国,日本,美国,正版,真品,真皮,,,"; for (int i = 0; keyx != null && i < keyx.Count; i++) { if (key.Contains(keyx[i]) || noKey.Contains(keyx[i]) || keyx[i].Contains("正") || keyx[i].Contains("真") || AlibabaShop.TitleCantHad.Contains(keyx[i]) || AlibabaShop.NoBrandName.Contains(keyx[i]) || AlibabaShop.NoTitleWords.Contains(keyx[i])) continue; key.Add(keyx[i]); } if (key.Count < 30) return ""; string[] l = keyword.Split(' '); for (int i = 0; i < l.Length; i++) { if (AlibabaShop.NoTitleWords.Contains(l[i]) || AlibabaShop.NoBrandName.Contains(l[i]) || AlibabaShop.TitleCantHad.Contains(l[i])) l[i] = ""; } string newTitle = l[0]; int times = 0; while (newTitle.Length < 8 && times < 1000) { times++; int r = new Random(Guid.NewGuid().GetHashCode()).Next(key.Count); if (newTitle.Contains(key[r])) continue; newTitle += key[r]; } if (l.Length > 1) newTitle += l[1]; times = 0; while (newTitle.Length < 16 && times < 1000) { times++; int r = new Random(Guid.NewGuid().GetHashCode()).Next(key.Count); if (newTitle.Contains(key[r])) continue; newTitle += key[r]; } if (l.Length > 2) newTitle += l[2]; while (newTitle.Length < 22 && times < 1000) { times++; int r = new Random(Guid.NewGuid().GetHashCode()).Next(key.Count); if (newTitle.Contains(key[r])) continue; newTitle += key[r]; } if (l.Length > 3) newTitle += l[3]; times = 0; while (BaseClass.GetCharLength(newTitle) < CollectKeywordByTaobao.MaxTitleLen * 2 - 2 && times < 1000) { times++; int r = new Random(Guid.NewGuid().GetHashCode()).Next(key.Count); if (newTitle.Contains(key[r])) continue; newTitle += key[r]; } //超强过滤 for (int i = 0; i < AlibabaShop.NoBrandName.Count; i++) { if (newTitle.Contains(AlibabaShop.NoBrandName[i])) newTitle = newTitle.Replace(AlibabaShop.NoBrandName[i], ""); } while (BaseClass.GetCharLength(newTitle) < CollectKeywordByTaobao.MaxTitleLen * 2 - 2 && times < 1000) { times++; int r = new Random(Guid.NewGuid().GetHashCode()).Next(key.Count); if (newTitle.Contains(key[r])) continue; newTitle += key[r]; } return newTitle; } public string GetMainKeywords(string title) { if (string.IsNullOrEmpty(title)) return ""; BaseRegex.Relpace(ref title, "([0-9a-zA-Z-_:&;/])", ""); title = title.Replace(" ", "").Replace("新款", "").Replace("包邮", "").Replace("正品", "").Replace("韩版", "") .Replace("可爱", "").Replace("卡通", "").Replace("时尚", "").Replace("新品", "").Replace("特价", "").Replace("热销", "").Trim(); if (title.Length < 8) return ""; Dictionary keys = new Dictionary(); for (int i = 2; i < title.Length; i++) { for (int j = 0; j < title.Length - i; j++) { string key = title.Substring(j, i).Trim(); if (string.IsNullOrEmpty(key) || keys.ContainsKey(key)) continue; if (Keywords.ContainsKey(key)) keys.Add(key, Keywords[key] * 5 ^ (key.Length - 2)); } } string outKey = ""; if (keys.Count < 4) { List keyx = new Segment().Get(title); for (int i = 0; i < keyx.Count&& keys.Count<4; i++) { if(keys.ContainsKey(keyx[i])) continue; keys.Add(keyx[i],1); } } if (keys.Count < 5) { foreach (KeyValuePair key in keys) { outKey += " " + key.Key; } return outKey.Trim(); } string key1 = "", key2 = "", key3 = "", key4 = ""; int count1 = 0, count2 = 0, count3 = 0, count4 = 0; foreach (KeyValuePair key in keys) { if (count1 < key.Value) { count1 = key.Value; key1 = key.Key; } else if (count2 < key.Value) { count2 = key.Value; key2 = key.Key; } else if (count3 < key.Value) { count3 = key.Value; key3 = key.Key; } else if (count4 < key.Value) { count4 = key.Value; key4 = key.Key; } } outKey = key1 + " " + key2 + " " + key3 + " " + key4; return outKey.Trim(); } public void Ini() { //string fileName = "lbigdata.dll"; //if (!FileBase.Exists(fileName)) //{ // GetHtml.DownloadFile("http://dl.qixiaoke.com/lbigdata.html", fileName); //} //string[] l = FileBase.ReadAllLines(fileName, Encoding.UTF8); //if (l == null || l.Length < 300000) //{ // GetHtml.DownloadFile("http://dl.qixiaoke.com/lbigdata.html", fileName); // l = FileBase.ReadAllLines(fileName, Encoding.UTF8); //} //if (l == null || l.Length < 300000) //{ // MessageBox.Show("初始化大数据异常,请检查网络", "提示"); // return; //} } public void IniKeyword() { string[] l = "防狼,辣椒水,迷情,刀,枪,听话,催泪,瓦斯".Split(','); for (int i = 0; i < l.Length; i++) { if (string.IsNullOrEmpty(l[i])) continue; NoKeyword.Add(l[i].Trim()); } ////string fileName = "lbigdata.dll"; //string fileName = "Segment.dll"; //l = FileBase.ReadAllLines(fileName, Encoding.UTF8); //if (l == null || l.Length < 300000) //{ // MessageBox.Show("初始化大数据失败,请重新打开软件", "提示"); // return; //} //for (int i = 0; i < l.Length; i++) //{ // if (string.IsNullOrEmpty(l[i]) || !l[i].Contains("\t")) // continue; // string[] ll = l[i].Split('\t'); // string keyword = ll[0].Replace(" ", ""); // int rank = int.Parse(ll[1]); // if (!Keywords.ContainsKey(keyword)) // Keywords.Add(keyword, rank); //} } /// /// 删除下架产品 /// /// 产品ID /// 网站ID public static void Delete(long id, int site) { //string url = BaseClass.BigDataApiUrl + "?obj=product/product"; //string data = "&act=delete&site_id=" + site + "&id=" + id; //string html = GetHtml.PostUtf8(url, UserLogin.GetSignaturex() + data); } } }