using System; using System.Collections.Generic; using System.IO; using System.Text; using System.Threading; using System.Windows.Forms; using System.Linq; using AllBase; using Newtonsoft.Json.Linq; using Work.Api; using Work.ManageClass; using NaiBa.Util.Extension; namespace Work.CollectClass { public class CollectKeywordByTaobao { public string Name; public static int PageTop = 0; public static int MaxCount = 0; public static int ThisCount = 0; public static int MinPrice = 0; public static int MaxPrice = 0; public static int MinSale = 0; public static int MaxSale = 0; public static int MainImageCut = 0; public static int MaxTitleLen = 30; public static int FessionCount = 1; public static int MainCatId = 0; public static int coupon = 0; public static int tkRate = 0; public static int sales = 0; public static int MaxSingleKeywordProduct = 10000; public static List Product = new List(); public static List ProductTemp = new List(); public static List ProductTaoKeTemp = new List(); public static Dictionary> KeywordFiles = new Dictionary>(); public static List MallId = new List(); public string Keywords, OutKeyword; public static string AddKeyword = ""; public static bool Running = false; public static bool AutoAddToUpList = false, TaobaoCollect = false, TaoKeCollect = false, PinduoduoCollect = false, PinduoduoShopCollect = false, MeiLiZheCollect = false, OnlyFree = false, AllCatAdd = false, Alibaba = false, DataCenter = false, AutoAdd = false, Waiting = false, SaveCollect = false, BaoYou = false, TaoJiJi = false; public static string outKeywordrich; public static string addKeywordrich; public CollectKeywordByTaobao(string keywords, string outKeyword, string addKeyword, string name) { Keywords = keywords; OutKeyword = outKeyword; AddKeyword = addKeyword; Name = name; } public static string strContent = ""; public void Get() { if (string.IsNullOrEmpty(strContent)) { string path = AppDomain.CurrentDomain.BaseDirectory + "anti_content.js"; strContent = File.ReadAllText(path); } Running = true; Product.Clear(); ProductTemp.Clear(); //ProductTaoKeTemp.Clear(); string[] l = Keywords.Split('\n'); string[] noKeyword = OutKeyword.Split('\n'); MaxCount = PageTop * l.Length; List ts = new List(); for (int i = 0; i < l.Length; i++) { string keyword = l[i].Trim(); if (string.IsNullOrEmpty(keyword)) continue; int pidCount = 0; //if (PinduoduoCollect) //{ // string url= "http://pcat.qixiaoke.com/taobao/pinduoduo_search.php?keyword=" + GetHtml.UrlEncodeUtf8(keyword); // string data = UserLogin.GetSignaturex()+ "&pi=" + MinPrice + "&pa=" + MaxPrice+ "&pi=" + MinPrice + "&pa=" + MaxPrice; // string html = GetHtml.PostUtf8(url, data); // var m = BaseRegex.GetMatchRegex(ref html, @"""attrs"":\{([^\}]+)\}"); // for (int j = 0; m!=null && j < m.Count; j++) // { // } //} if (TaoKeCollect) PageTop = 1000; for (int k = 0; TaoKeCollect && k <= PageTop; k++) { if (pidCount >= MaxSingleKeywordProduct) break; string url = "http://www.dataoke.com/qlist/?px=zh&sales=" + sales + "&tk_rate=" + tkRate + "&coupon_money=" + coupon + "&page=" + (k + 1); if (keyword != "无") url += "&keywords=" + GetHtml.UrlEncodeUtf8(keyword); string refere = "www.dataoke.com"; string html = GetPostTaobaoHtml.UploadTaobao(url, refere, true); var m = BaseRegex.GetMatchRegex(ref html, @"]+?)""\s*target=""_blank""\s*title=""([^>]+?)"""); if (m != null && m.Count == 0) { break; } for (int q = 0; m != null && q < m.Count; q++) { if (pidCount >= MaxSingleKeywordProduct) break; string urlx = "http://www.dataoke.com/" + m[q].Groups[1].Value; string title = m[q].Groups[2].Value; html = GetPostTaobaoHtml.UploadTaobao(urlx, refere, true); string pattern = @"]+?)"""; var mc = BaseRegex.GetMatchRegex(ref html, pattern); if (mc != null && mc.Count == 0) continue; string taobaoUrl = mc[0].Groups[1].Value; string id = BaseRegex.GetMatchRegexString(taobaoUrl, @"id=([\d]+)"); if (string.IsNullOrEmpty(id)) continue; //pattern = @"券后价¥([\w\W]+?)"; pattern = @"券后价[\s\S]+?¥([\w\W]+?)"; mc = BaseRegex.GetMatchRegex(ref html, pattern); if (mc != null && mc.Count == 0) continue; string quanHou = mc[0].Groups[1].Value; pattern = @"原价¥([\w\W]+?)"; mc = BaseRegex.GetMatchRegex(ref html, pattern); if (mc != null && mc.Count == 0) continue; string yuanPrice = mc[0].Groups[1].Value; pattern = @"销量([\w\W]+?)"; mc = BaseRegex.GetMatchRegex(ref html, pattern); if (mc != null && mc.Count == 0) continue; string xiaoLiang = mc[0].Groups[1].Value; pattern = @"佣金([\w\W]+?)%"; mc = BaseRegex.GetMatchRegex(ref html, pattern); if (mc != null && mc.Count == 0) continue; string yongJin = mc[0].Groups[1].Value; pattern = @"优惠券¥([\w\W]+?)"; mc = BaseRegex.GetMatchRegex(ref html, pattern); if (mc != null && mc.Count == 0) continue; string youHuei = mc[0].Groups[1].Value; string keId = BaseRegex.GetMatchRegexString(m[q].Groups[1].Value, @"id=([\d]+)"); if (string.IsNullOrEmpty(id)) continue; ProductTaoKeBase t = new ProductTaoKeBase(); t.Title = title; t.TaoKeId = long.Parse(keId); t.TaoKeUrl = urlx; t.toId = long.Parse(id); t.taoBaoUrl = taobaoUrl; t.quanHou = quanHou; t.yuanPrice = yuanPrice; t.xiaoLiang = xiaoLiang; t.yongJin = yongJin; t.youHuei = youHuei; pidCount++; //ProductTaoKeTemp.Add(t); int sals = 0; if (t.xiaoLiang.Contains("万")) { decimal d = Decimal.Parse(BaseRegex.GetMatchRegexString(t.xiaoLiang, @"([\d\.]+)")); sals = (int)(d * 10000); } else { sals = int.Parse(t.xiaoLiang); } Threadx.ThreadListWait(ref ts, new Thread(new GetPinduoduoTitleCat(title, keyword, Name, sals, decimal.Parse(yuanPrice), q, t.toId, t).Get), 5); if (!Running) goto EndAll; } } //// 采集美丽折 //if (MeiLiZheCollect) //{ //} for (int j = 1; PinduoduoCollect && j <= PageTop; j++) { if (keyword == "无") break; if (pidCount >= MaxSingleKeywordProduct) break; if (!CollectKeywordByTaobao.Running) return; string strTime = BaseClass.GetTime(DateTime.Now).ToString() + "000"; string str = ""; for (int k = 0; k < 16; k++) { str += new Random(Guid.NewGuid().GetHashCode()).Next(9); } string strToken = str + "-" + strTime; string strNumber = ""; string fun2 = string.Format(@"getEncode('{0}','{1}','{2}')", strTime, strToken, strNumber); string codex = UploadPinduoduoSet.ExecuteScript(fun2, strContent); string url = "http://apiv3.yangkeduo.com/search?page=" + j + "&q=" + GetHtml.UrlEncodeUtf8(keyword) + "&size=50&requery=0&sort=_sales&list_id=search_UHpDve&filter=price," + MinPrice + "," + MaxPrice; string userAgent = "android Mozilla/5.0 (Linux; Android 4.4.2; HUAWEI MLA-AL10 Build/HUAWEIMLA-AL10) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/30.0.0.0 Mobile Safari/537.36 phh_android_version/3.63.0 phh_android_build/228842 phh_android_channel/yyb"; //userAgent = BaseClass.ChromeUserAgent; string html = GetHtmlUrl(url); if (string.IsNullOrEmpty(html) || !html.Contains("\"icon\"")) { Thread.Sleep(20 * 1000); html = GetHtml.GetUtf8(url, userAgent); } if (string.IsNullOrEmpty(html) || !html.Contains("\"icon\"")) { Thread.Sleep(40 * 1000); html = GetHtml.GetUtf8(url, userAgent); } var m = BaseRegex.GetMatchRegex(ref html, @"\{""thumb_url"":[\w\W]+?""short_name"":([^\}]+?)\}"); if (m != null && m.Count == 0) { break; } for (int k = 0; m != null && k < m.Count; k++) { while (Running && Waiting) Thread.Sleep(100); if (!CollectKeywordByTaobao.Running) return; string list = m[k].Groups[0].Value; TaobaoProductBase t = new TaobaoProductBase(); t.FromId = BaseRegex.GetLongJson(ref list, "goods_id"); if (t.FromId == 0) { continue; } bool had = false; for (int n = 0; n < Product.Count; n++) { if (Product[n].FromId == t.FromId) { had = true; break; } } if (had) { continue; } t.FromType = "拼多多"; t.Keyword = keyword; t.Price = BaseRegex.GetIntJson(ref list, "price") / 100m; t.SaleCount = BaseRegex.GetIntJson(ref list, "sales"); t.Titlte = BaseRegex.GetStringJson(ref list, "goods_name"); if (string.IsNullOrEmpty(t.Titlte)) continue; t.Titlte = AddTitleKeyword(t.Titlte); t.MainImage = MainImageCut; string country = BaseRegex.GetStringJson(ref list, "country"); if (string.IsNullOrEmpty(t.Titlte) || !string.IsNullOrEmpty(country)) { continue; } bool hadNoKeyword = false; foreach (string s in noKeyword) { if (string.IsNullOrEmpty(s)) continue; if (t.Titlte.Contains(s.Trim())) { hadNoKeyword = true; break; } } if (hadNoKeyword) continue; if (t.Price < MinPrice || t.Price > MaxPrice || t.SaleCount < MinSale || t.SaleCount > MaxSale) continue; if (pidCount >= MaxSingleKeywordProduct) break; pidCount++; string cats = BaseRegex.GetMatchRegexString(ref list, @"""cate_list"":\[([\d,]+)\]"); if (!string.IsNullOrEmpty(cats)) { string[] li = cats.Split(','); if (li.Length == 4) { t.Cat1 = int.Parse(li[0]); t.Cat2 = int.Parse(li[1]); t.Cat3 = int.Parse(li[2]); t.Cat4 = int.Parse(li[3]); } } else { MobileDetail md = new MobileDetail(Name, t.FromId); ProductCollectBase pp = md.Get(); t.Cat1 = pp.cat1; t.Cat2 = pp.cat2; t.Cat3 = pp.cat3; t.Cat4 = pp.cat4; t.CatId = pp.cat_id; } t.CatId = t.Cat4 > 0 ? t.Cat4 : t.Cat3; var ft = new FromTitleToCat(); t.MainCatId = ft.GetMainCatId(t.Cat1); t.MainCatName = ft.MainCatName; t.MainImage = MainImageCut; if (t.MainCatId == 0 || MainCatId > 0 && MainCatId != t.MainCatId) { continue; } if (KeywordFiles.ContainsKey(keyword)) { for (int n = 0; n < CollectKeywordByTaobao.FessionCount; n++) { var tt = t.Clone(); tt.Titlte = GetTitleFission(MaxTitleLen, keyword, KeywordFiles[keyword]); Product.Add(tt); ProductTemp.Add(tt); if (AutoAdd) { UploadPinduoduoMain.ProductStock.Add(t); UploadPinduoduoMain.AddToDataBase(t); } } continue; } Product.Add(t); ProductTemp.Add(t); if (AutoAdd) { UploadPinduoduoMain.ProductStock.Add(t); UploadPinduoduoMain.AddToDataBase(t); } if (!Running) goto EndAll; //Thread.Sleep(1000); } Thread.Sleep(1000); ThisCount = i * PageTop + j; } for (int j = 1; TaobaoCollect && j <= PageTop; j++) { if (keyword == "无") break; if (pidCount >= MaxSingleKeywordProduct) break; string url = "https://s.taobao.com/search?sourceId=tb.item&search_type=item&ssid=s5-e&s_from=newHeader&q=" + GetHtml.UrlEncodeUtf8(keyword) + "&suggest=0_1&_input_charset=utf-8&wq=s&suggest_query=s&source=suggest&bcoffset=0&ntoffset=0&p4ppushleft=%2C44&sort=sale-desc&s=" + (44 * (j - 1)); if (BaoYou) url += "&fs=1&baoyou=1"; string refere = "https://s.taobao.com/"; string html = GetPostTaobaoHtml.UploadTaobao(url, refere, true); if (html.Contains("https://login.taobao.com/")) { MessageBox.Show("请登录淘宝用户"); return; } string htmlxt = ""; if (html.Contains("滑动")) { long time; string data = "{\"isSec\":0}"; string sign = GetSign("", data, out time); url = "https://api.m.taobao.com/h5/mtop.user.getusersimple/1.0/?appKey=12574478&t=" + time + "&sign=" + sign + "&api=mtop.user.getUserSimple&v=1.0&H5Request=true&type=jsonp&dataType=jsonp&callback=mtopjsonp1&data=" + GetHtml.UrlEncodeUtf8(data); //获取用户的所有地址编号 htmlxt = GetPostTaobaoHtml.UploadTaobaoTokenx(url, url, true); if (string.IsNullOrEmpty(htmlxt) || !htmlxt.Contains("_m_h5_tk"))//没有登录获取token获取失败 { return; } string h5Tkt = BaseRegex.GetMatchRegexString(ref htmlxt, "_m_h5_tk=([^_]+?)_"); string addCookies = BaseRegex.GetMatchRegexString(ref htmlxt, "(_m_h5_tk=[^;]+?;)") + " " + BaseRegex.GetMatchRegexString(ref htmlxt, "(_m_h5_tk_enc=[^;]+?;)"); string cookies = GetPostTaobaoHtml.GetCookies(url, ""); cookies = BaseRegex.Relpace(cookies, "(_m_h5_tk=[^;]+?;)", ""); cookies = BaseRegex.Relpace(cookies, "(_m_h5_tk_enc=[^;]+?;)", ""); cookies += addCookies; data = "{\"q\":\"" + keyword + "\",\"search\":\"提交\",\"tab\":\"all\",\"sst\":\"1\",\"n\":20,\"buying\":\"buyitnow\",\"m\":\"api4h5\",\"token4h5\":\"\",\"abtest\":\"55\",\"wlsort\":\"55\",\"page\":" + j + "}"; sign = GetSign(h5Tkt, data, out time); url = " https://acs.m.taobao.com/h5/mtop.taobao.wsearch.h5search/1.0/?jsv=2.3.16&appKey=12574478&t=" + time + "&sign=" + sign + "&api=mtop.taobao.wsearch.h5search&v=1.0&H5Request=true&ecode=1&AntiCreep=true&AntiFlool=true&type=jsonp&dataType=jsonp&callback=mtopjsonp1&data=" + GetHtml.UrlEncodeUtf8(data); refere = ""; htmlxt = GetPostTaobaoHtml.UploadTaobao(url, refere, true, cookies); } if (string.IsNullOrEmpty(html) || !html.Contains("view_price") && string.IsNullOrEmpty(htmlxt)) { Thread.Sleep(10 * 1000); html = GetPostTaobaoHtml.UploadTaobao(url, refere, true); } if (string.IsNullOrEmpty(html) || !html.Contains("view_price") && string.IsNullOrEmpty(htmlxt)) { Thread.Sleep(30 * 1000); html = GetPostTaobaoHtml.UploadTaobao(url, refere, true); } var m = BaseRegex.GetMatchRegex(ref html, @"""nid"":""([\d]+)"".*?""raw_title"":""([^""]+?)"".*?""view_price"":""([^""]+?)"".*?""view_sales"":""([\d\.万]+)"); //string url = BaseClass.LoginApiUrl + "?obj=product/taobao_search_bak&act=search"; //string data = UserLogin.GetSignaturex() + "&keyword=" + GetHtml.UrlEncodeUtf8(keyword) + "&page=" + j + "&startPrice=" + MinPrice + "&endPrice=" + MaxPrice; //string html = GetHtml.PostUtf8(url, data); //html = GetHtml.Decode(html).Replace("\\/","/"); //m = BaseRegex.GetMatchRegex(ref html, @"\{([^\}]+)\}"); for (int k = 0; k < m.Count; k++) { while (Running && Waiting) Thread.Sleep(100); if (!Running) return; string list = m[k].Groups[0].Value; decimal free = BaseRegex.GetDecimalJson(ref list, "view_fee"); if (free > 0 && OnlyFree) continue; long pid = long.Parse(m[k].Groups[1].Value); string title = m[k].Groups[2].Value; int sals = 0; if (m[k].Groups[4].Value.Contains("万")) { decimal d = Decimal.Parse(BaseRegex.GetMatchRegexString(m[k].Groups[4].Value, @"([\d\.]+)")); sals = (int)(d * 10000); } else { sals = int.Parse(m[k].Groups[4].Value); } decimal price = decimal.Parse(m[k].Groups[3].Value); if (price < MinPrice || price > MaxPrice || sals > MaxSale) continue; //long pid = BaseRegex.GetLongJson(ref list, "num_iid"); //string title = BaseRegex.GetStringJson(ref list, "title"); //int sals = BaseRegex.GetIntJson(ref list, "volume"); //decimal price = BaseRegex.GetDecimalJson(ref list, "zk_final_price"); if (string.IsNullOrEmpty(title) || title.Contains("天猫超市")) { LogSave.Add(Name, "过滤天猫超市"); continue; } if (sals > MaxSale) continue; if (sals < MinSale) { LogSave.Add(Name, "销量过低退出"); goto End; } bool hadNoKeyword = false; foreach (string s in noKeyword) { if (string.IsNullOrEmpty(s)) continue; if (title.Contains(s.Trim())) { title = title.Replace(s.Trim(), ""); //break; } } if (hadNoKeyword) continue; title = AddTitleKeyword(title); if (KeywordFiles.ContainsKey(keyword)) { title = GetTitleFission(MaxTitleLen, keyword, KeywordFiles[keyword]); } bool had = false; for (int n = 0; n < Product.Count; n++) { if (Product[n].Titlte == title || Product[n].FromId == pid) { had = true; break; } } if (had) { LogSave.Add(Name, "标题已经存在:" + title); continue; } if (pidCount >= MaxSingleKeywordProduct) break; pidCount++; for (int n = 1; KeywordFiles.ContainsKey(keyword) && n < FessionCount; n++) { title = GetTitleFission(MaxTitleLen, keyword, KeywordFiles[keyword]); Threadx.ThreadListWait(ref ts, new Thread(new GetPinduoduoTitleCat(title, keyword, Name, sals, price, j, pid).Get), 20); if (n == 1) Thread.Sleep(5 * 1000); else Thread.Sleep(1 * 1000); } if (KeywordFiles.ContainsKey(keyword)) { title = GetTitleFission(MaxTitleLen, keyword, KeywordFiles[keyword]); } Threadx.ThreadListWait(ref ts, new Thread(new GetPinduoduoTitleCat(title, keyword, Name, sals, price, j, pid).Get), 20); if (!Running) goto EndAll; } m = BaseRegex.GetMatchRegex(ref htmlxt, @"{[^>]+?}"); for (int k = 0; k < m.Count; k++) { while (Running && Waiting) Thread.Sleep(100); if (!Running) return; string list = m[k].Groups[0].Value; //decimal free = BaseRegex.GetDecimalJson(ref list, "view_fee"); //if (free > 0 && OnlyFree) // continue; long pid = BaseRegex.GetLongJson(ref list, "item_id"); string title = BaseRegex.GetStringJson(ref list, "title"); int sals = BaseRegex.GetIntJson(ref list, "sold"); decimal price = BaseRegex.GetDecimalJson(ref list, "price"); if (price < MinPrice || price > MaxPrice || sals > MaxSale) continue; //long pid = BaseRegex.GetLongJson(ref list, "num_iid"); //string title = BaseRegex.GetStringJson(ref list, "title"); //int sals = BaseRegex.GetIntJson(ref list, "volume"); //decimal price = BaseRegex.GetDecimalJson(ref list, "zk_final_price"); if (string.IsNullOrEmpty(title) || title.Contains("天猫超市")) { LogSave.Add(Name, "过滤天猫超市"); continue; } if (sals > MaxSale) continue; if (sals < MinSale) { LogSave.Add(Name, "销量过低退出"); goto End; } bool hadNoKeyword = false; foreach (string s in noKeyword) { if (string.IsNullOrEmpty(s)) continue; if (title.Contains(s.Trim())) { title = title.Replace(s.Trim(), ""); //break; } } if (hadNoKeyword) continue; title = AddTitleKeyword(title); if (KeywordFiles.ContainsKey(keyword)) { title = GetTitleFission(MaxTitleLen, keyword, KeywordFiles[keyword]); } bool had = false; for (int n = 0; n < Product.Count; n++) { if (Product[n].Titlte == title || Product[n].FromId == pid) { had = true; continue; } } if (had) { LogSave.Add(Name, "标题已经存在:" + title); continue; } if (pidCount >= MaxSingleKeywordProduct) break; pidCount++; for (int n = 1; KeywordFiles.ContainsKey(keyword) && n < FessionCount; n++) { title = GetTitleFission(MaxTitleLen, keyword, KeywordFiles[keyword]); Threadx.ThreadListWait(ref ts, new Thread(new GetPinduoduoTitleCat(title, keyword, Name, sals, price, j, pid).Get), 20); if (n == 1) Thread.Sleep(5 * 1000); else Thread.Sleep(1 * 1000); } if (KeywordFiles.ContainsKey(keyword)) { title = GetTitleFission(MaxTitleLen, keyword, KeywordFiles[keyword]); } Threadx.ThreadListWait(ref ts, new Thread(new GetPinduoduoTitleCat(title, keyword, Name, sals, price, j, pid).Get), 20); if (!Running) goto EndAll; } LogSave.Add(Name, "关键词:" + keyword + " 分页:" + j); if (AllCatAdd) { LogSave.Add(Name, "关键词:" + keyword + "数据已经加入到群控上货"); } Thread.Sleep(1000); ThisCount = i * PageTop + j; } for (int j = 1; TaoJiJi && j <= PageTop; j++) { if (keyword == "无") break; if (pidCount >= MaxSingleKeywordProduct) break; if (!CollectKeywordByTaobao.Running) return; string url = "https://api.tjjapp.com/Api2_24_0/goods/goodslist?nowpage=" + j + "&keyword=" + GetHtml.UrlEncodeUtf8(keyword) + "&minimum_price=" + MinPrice + "&highest_price=" + MaxPrice + "×tamp=" + DateTime.Now.Ticks; string html = GetHtmlUrl(url); JObject json = JObject.Parse(html); if (json["result"].ToString() == "1") { var goods = json["goods"]; if (goods != null) { foreach (var good in goods) { while (Running && Waiting) Thread.Sleep(100); if (!CollectKeywordByTaobao.Running) return; TaobaoProductBase t = new TaobaoProductBase(); t.FromId = good["goodsId"].ParseToLong(); if (t.FromId == 0) { continue; } if (Product.Where(p => p.FromId == t.FromId).Any()) { continue; } t.FromType = "淘集集"; t.Keyword = keyword; t.Price = good["crazyPrice"].ParseToDecimal(); t.SaleCount = good["saleNum"].ParseToString().Replace(",", string.Empty).Replace("人抢购", string.Empty).ParseToInt(); t.Titlte = good["goodsName"].ParseToString(); if (string.IsNullOrEmpty(t.Titlte)) { continue; } t.Titlte = AddTitleKeyword(t.Titlte); t.MainImage = MainImageCut; if (noKeyword.Where(p => t.Title.Contains(p.ParseToString().Trim())).Any()) { continue; } if (t.Price < MinPrice || t.Price > MaxPrice || t.SaleCount < MinSale || t.SaleCount > MaxSale) { continue; } if (pidCount >= MaxSingleKeywordProduct) { break; } pidCount++; Threadx.ThreadListWait(ref ts, new Thread(new GetPinduoduoTitleCat(t.Titlte, keyword, Name, t.SaleCount, t.Price, j, t.FromId, t.FromType).Get), 20); if (!Running) goto EndAll; } } if (string.IsNullOrEmpty(json["nextPage"].ParseToString())) { break; } } Thread.Sleep(1000); ThisCount = i * PageTop + j; } if (Alibaba) { SearchKeywordByAlibaba sa = new SearchKeywordByAlibaba(Name); int webCursor = 0; sa.GetKeyword(keyword, ref webCursor); } End: int ii = 0; } Threadx.ThreadListWait(ref ts); EndAll: ThisCount = MaxCount; Running = false; } public string GetSign(string h5Tk, string data, out long time) { string appkey = "12574478"; System.DateTime starttime = TimeZone.CurrentTimeZone.ToLocalTime(new System.DateTime(1970, 1, 1)); // 当地时区 DateTime datetime = DateTime.Now; time = (long)(datetime - starttime).TotalMilliseconds; // 相差毫秒数 string code = h5Tk + "&" + time + "&" + appkey + "&" + data; return Md5Base.GetMd5(code).ToLower(); } public string GetHtmlUrl(string url) { try { string userAgen = "android Mozilla/5.0 (Linux; Android 4.4.2; HUAWEI MLA-AL10 Build/HUAWEIMLA-AL10) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/30.0.0.0 Mobile Safari/537.36 phh_android_version/3.23.0 phh_android_build/228842 phh_android_channel/qihu360"; WebClientx web = new WebClientx(); web.Headers.Add("Accept", "*/*"); web.Headers.Add("Accept-Language", "zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3"); web.Headers.Add("User-Agent", userAgen); web.Headers.Add("Referer", url); string h = web.Headers.ToString(); web.Proxy = null; byte[] b = web.DownloadData(url); return Encoding.UTF8.GetString(b); } catch (Exception e) { return ""; } } /// /// 获取标题 /// /// /// /// /// public static string GetTitleFission(int maxLen, string mainKeyword, List keys) { Thread.Sleep(1); string temp = ""; for (int j = 0; j < 200 && BaseClass.GetCharLength(temp) < maxLen * 2; j++) { if (!temp.Contains(mainKeyword)) { if (BaseClass.GetCharLength(temp) > maxLen * 2 - 12) temp += mainKeyword; else { if (new Random(Guid.NewGuid().GetHashCode()).Next(10) == 1) temp += mainKeyword; } } string k = keys[new Random(Guid.NewGuid().GetHashCode()).Next(keys.Count)]; if (k.Contains("\t")) k = k.Substring(0, k.IndexOf("\t")); if (temp.Contains(k)) continue; temp += k; } //if (temp.Length > maxLen * 2) temp = BaseClass.SubCharLength(temp, maxLen * 2); return temp; } /// /// 随机增加关键词到标题中 /// /// /// public string AddTitleKeyword(string title) { if (string.IsNullOrEmpty(AddKeyword) || string.IsNullOrEmpty(title)) return title; string[] l = AddKeyword.Split('\n'); for (int i = 0; i < 100 && title.Length < 55; i++) { string s = l[new Random(Guid.NewGuid().GetHashCode()).Next(l.Length)]; if (string.IsNullOrEmpty(s) || title.Contains(AddKeyword)) continue; if (new Random(Guid.NewGuid().GetHashCode()).Next(0, 10) < 5) { title = s.Trim() + title; } else { title += s.Trim(); } } return title; } public static void GetKeywordsDir(string dir, string noKeyword) { KeywordFiles.Clear(); Dictionary noKey = new Dictionary(); noKey.Add("元", false); noKey.Add("限购", false); noKey.Add("限量", false); noKey.Add("淘宝", false); noKey.Add("天猫", false); noKey.Add("官方", false); noKey.Add("旗舰店", false); noKey.Add("企业店", false); noKey.Add("最", false); noKey.Add("厂家", false); string[] kk = noKeyword.Split('\n'); for (int i = 0; i < kk.Length; i++) { string ke = kk[i].Trim(); if (string.IsNullOrEmpty(ke) || noKey.ContainsKey(ke)) continue; noKey.Add(ke, false); } string[] l = Directory.GetFiles(dir); string canNotKeywords = ""; for (int i = 0; i < l.Length; i++) { string name = Path.GetFileNameWithoutExtension(l[i]); List keywords = new List(); string[] ll = FileBase.ReadAllLines(l[i]); if (ll == null || ll.Length < 50) { canNotKeywords += "、" + name; continue; } for (int j = 0; j < ll.Length; j++) { if (string.IsNullOrEmpty(ll[j])) continue; string key = ll[j].Trim().Replace("\t", " "); if (key.Contains(" ")) key = key.Substring(0, key.IndexOf(" ")); bool had = false; foreach (var k in noKey) { if (key.Contains(k.Key)) { had = true; break; } } if (had || keywords.Contains(key)) continue; keywords.Add(key); } if (KeywordFiles.ContainsKey(name) || keywords.Count < 20) continue; KeywordFiles.Add(name, keywords); } if (!string.IsNullOrEmpty(canNotKeywords)) { MessageBox.Show("文件描述词过少,跳过\r\n每个文件请至少添加50个描述词一行一个\r\n不符合条件关键词:\r\n" + canNotKeywords.Substring(1), "描述词过少"); } } } public class GetPinduoduoTitleCat { public string title, keyword, Name; public string fromType; public int sals, j; public decimal price; public long pid; public ProductTaoKeBase ke; public ProductMeiLiZhe meiLiZheProduct; public GetPinduoduoTitleCat(string t, string k, string n, int s, decimal p, int jj, long pi) { title = t; keyword = k; Name = n; sals = s; price = p; j = jj; pid = pi; } public GetPinduoduoTitleCat(string t, string k, string n, int s, decimal p, int jj, long pi, string fromType) { title = t; keyword = k; Name = n; sals = s; price = p; j = jj; pid = pi; this.fromType = fromType; } public GetPinduoduoTitleCat(string t, string k, string n, int s, decimal p, int jj, long pi, ProductTaoKeBase taoke) { title = t; keyword = k; Name = n; sals = s; price = p; j = jj; pid = pi; ke = taoke; } public GetPinduoduoTitleCat(string t, string k, string n, int s, decimal p, int jj, long pi, ProductMeiLiZhe meilizhe) { title = t; keyword = k; Name = n; sals = s; price = p; j = jj; pid = pi; meiLiZheProduct = meilizhe; } public void Get() { FromTitleToCat f = new FromTitleToCat(); f.MainServer = true; bool had = f.Get(title, pid, 1); if (!had) { LogSave.Add(Name, "未找到分类:" + title); return; } TaobaoProductBase p = new TaobaoProductBase(); int cat4; int.TryParse(f.Cat4, out cat4); p.FromId = pid; p.SaleCount = sals; p.Price = price; p.Cat1 = int.Parse(f.Cat1); p.Cat2 = int.Parse(f.Cat2); p.Cat3 = int.Parse(f.Cat3); p.Cat4 = cat4; p.MainCatId = f.GetMainCatId(p.Cat1); p.MainCatName = f.MainCatName; p.MainImage = CollectKeywordByTaobao.MainImageCut; p.Keyword = keyword; p.Titlte = title; if (string.IsNullOrEmpty(fromType)) { p.FromType = "淘宝"; } else { p.FromType = fromType; } if (ke != null) { p.Title = ""; p.TaoKeId = ke.TaoKeId; p.TaoKeUrl = ke.TaoKeUrl; p.toId = ke.toId; p.taoBaoUrl = ke.taoBaoUrl; p.quanHou = ke.quanHou; p.yuanPrice = ke.yuanPrice; p.xiaoLiang = ke.xiaoLiang; p.yongJin = ke.yongJin; p.youHuei = ke.youHuei; } if (meiLiZheProduct != null) { p.Title = meiLiZheProduct.ProductName; p.MeiLiZheId = meiLiZheProduct.ProductId; p.MeiLiZheUrl = meiLiZheProduct.Url; p.yuanPrice = meiLiZheProduct.PriceStr; p.quanHou = meiLiZheProduct.PriceWidthTicketStr; p.youHuei = meiLiZheProduct.TicketPriceStr; p.FromId = meiLiZheProduct.TaobaoId; p.taoBaoUrl = meiLiZheProduct.SourceUrl; p.xiaoLiang = meiLiZheProduct.SaleCount.ToString(); } int id = cat4 > 0 ? p.Cat4 : p.Cat3; int cid = PinduoduoCatList.GetNewCat3(id); if (cid != id && PinduoduoCatList.CatIds.ContainsKey(cid)) { var ci = PinduoduoCatList.CatIds[cid]; p.CatId = ci.id; p.Cat1 = ci.cat1; p.Cat2 = ci.cat2; if (ci.cat3 == 0) { foreach (KeyValuePair c3 in PinduoduoCatList.CatIds) { if (c3.Value.cat2 == ci.cat2 && c3.Value.cat3 > 0) { ci.cat3 = c3.Value.cat3; break; } } } p.Cat3 = ci.cat3; if (ci.cat4 == 0 && ci.cat3 > 0) { foreach (KeyValuePair c4 in PinduoduoCatList.CatIds) { if (c4.Value.cat3 == ci.cat3 && c4.Value.cat4 > 0) { ci.cat4 = c4.Value.cat4; break; } } } p.Cat4 = ci.cat4; p.MainCatId = ci.main_cat_id; } p.MainCatId = f.GetMainCatId(p.Cat1); p.MainCatName = f.MainCatName; if (p.MainCatId == 0 || CollectKeywordByTaobao.MainCatId > 0 && CollectKeywordByTaobao.MainCatId != p.MainCatId) { return; } CollectKeywordByTaobao.Product.Add(p); CollectKeywordByTaobao.ProductTemp.Add(p); if (CollectKeywordByTaobao.AutoAdd) { UploadPinduoduoMain.ProductStock.Add(p); UploadPinduoduoMain.AddToDataBase(p); } LogSave.Add(Name, "关键词:" + keyword + " 分页:" + j + " " + title); } } public class ProductResurBase { public long FromId = 0; public string FormShopName = ""; public long GoodId = 0; public string ShopName = ""; public string Title = ""; public string Status = ""; } public class PromPlan { public long planName = 0; public string goodName = ""; public long goodId = 0; public string shopName = ""; public string title = ""; public string status = ""; } public class TaobaoProductBase { public ProductCollectBase pcb = null; public string Keyword = ""; public long FromId = 0; public long FromIdBak = 0; public decimal Price = 0; public int SaleCount = 0; public int Pv = 0; public string Titlte = ""; public int Cat1 = 0; public int Cat2 = 0; public int Cat3 = 0; public int Cat4 = 0; public int CatId = 0; public int AddPrice = 0; public int MainImage = 0; public int MainCatId = 0; public int UserTimes = 0; public string UseShopName = ""; public string MainCatName = ""; public string reason = ""; public string country = ""; public string logisticsTime = ""; /// /// 是否使用 /// public bool Uped = false; public bool Error = false; /// /// 是否生成 /// public bool Build = false; public bool OffLine = false; /// /// 按照分类匹配过了 /// public bool CatSame = false; public long PinId; public long GoodsId; public long GoodsSn; public long MailId; public string FromType = ""; public string Message = ""; public string Delete = ""; public string Arrange = ""; public bool Active = false; public string ShopName = ""; public string AddTime = ""; public string UpTime = ""; public string guid = Guid.NewGuid().ToString(); public int favcnt = 0; public int FindTimes = 0; //大淘客 public string Title = ""; public long TaoKeId = 0; public string TaoKeUrl = ""; public long toId = 0; public string taoBaoUrl = ""; public string quanHou = ""; public string yuanPrice = ""; public string xiaoLiang = ""; public string yongJin = ""; public string youHuei = ""; // 美丽折 public string MeiLiZheId = ""; public string MeiLiZheUrl = ""; //多多进宝 public long jinbaoCount = 0; public long jinbaoAmount = 0; //虚假相关Id /// /// 4 京东 5苏宁 6微店 /// public string ViGoodsName = ""; public long ViGoodsId = -1; public string ViPrice = ""; public string ViPriceMaxMin = ""; public int ViPriceMin = 0; public int ViPriceMax = 0; public int ViExpressPrice = 0; /// /// 容错颠倒的上家ID,首字母为0:比如2661959050 ,formId=661959052 /// public string TolerantFormId = ""; public string repeatTitltId = ""; public int FromSiteId { get { if (FromType == "拼多多" || FromType == "内部数据") return 2; if (FromType == "淘宝") return 1; if (FromType == "阿里巴巴") return 3; if (FromType == "淘集集") return 4; return 2; } } public TaobaoProductBase Clone() { string html = JsonHelper.SerializeObject(this); TaobaoProductBase tp = JsonHelper.DeserializeJsonToObject(html); return tp; } } }