using Api.Framework; using Api.Framework.Cps; using Api.Framework.Enums; using Api.Framework.Model; using Api.Framework.Tools; using CsharpHttpHelper; using CsharpHttpHelper.Enum; using Newtonsoft.Json.Linq; using System; using System.Collections; using System.Collections.Generic; using System.Linq; using System.Text; using System.Text.RegularExpressions; using System.Threading; using System.Threading.Tasks; using TBRebate.Entitys; namespace TBRebate { public static class Tools { public const string Reg_QRCode_Goods = @"\[图片=(?<二维码图片>.+?)\]"; public static List Regex_Items = new List() { @",\\""price\\"":{\\""priceText\\"":\\""(?.+?)\\"",", @",\\""price\\"":\\""(?.+?)\\""", @",\\""priceText\\"":\\""(?.+?)\\""," }; /// /// 获取中英文混排字符串的实际长度(字节数) /// /// 要获取长度的字符串 /// 字符串的实际长度值(字节数) public static int GetStringLength(string str) { if (str.Equals(string.Empty)) return 0; int strlen = 0; ASCIIEncoding strData = new ASCIIEncoding(); //将字符串转换为ASCII编码的字节数字 byte[] strBytes = strData.GetBytes(str); for (int i = 0; i <= strBytes.Length - 1; i++) { if (strBytes[i] == 63) //中文都将编码为ASCII编码63,即"?"号 strlen++; strlen++; } return strlen; } private static int chief_group_count = 0; private static int chief_group_index = -1; private static int deputy_group_count = 0; private static int deputy_group_index = -1; /// /// 累加推广位组调用次数 /// /// public static void GroupAdzoneCount(fl_member_info member, tbinfo_temp tbInfoTemp) { if (member.buy_point >= Class1.Config.Point && member.finish_order >= Class1.Config.OrderNum) { if (tbInfoTemp.is_chief_group) chief_group_count++; } else { if (tbInfoTemp.is_deputy_group) deputy_group_count++; } } /// /// 获取推广位 /// /// /// /// public static Tuiguangwei GetTuiguangwei(string robotName, fl_member_info member, tbinfo_temp tbInfoTemp) { try { #region var choose = (member.buy_point >= Class1.Config.Point && member.finish_order >= Class1.Config.OrderNum);//判断是主还是副 if (choose) { if (tbInfoTemp.is_chief_group) { string key_chief = "fl_tbrebate_key_chief_" + robotName; Tuiguangwei tgw = ApiClient.Cache.Get(key_chief); if (chief_group_count >= ApiClient.Setting.SystemConfig.TGWRandomCount || tgw == null) { chief_group_count = 0; chief_group_index++; var list = HttpHelper.JsonToObject>(tbInfoTemp.pid_chief) as List; if (list != null && list.Count != 0) { list = list.Where(o => CpsClient.Members.FirstOrDefault(f => f.cpstype == CpsType.阿里妈妈 && f.username == o.Member.username) != null).ToList(); if (list == null || list.Count == 0) return null; if (chief_group_index < list.Count) tgw = list[chief_group_index]; else { tgw = list[0]; chief_group_index = 0; } } ApiClient.Cache.Set(key_chief, tgw, 60); } return tgw; } else return new Tuiguangwei() { Pid = tbInfoTemp.pid_chief, Name = tbInfoTemp.pid_chief_name, Member = new fl_cps_member() { username = tbInfoTemp.pid_chief_cps_name } }; } else { if (tbInfoTemp.is_deputy_group) { string key_deputy = "fl_tbrebate_key_deputy_" + robotName; var tgw = ApiClient.Cache.Get(key_deputy); if (deputy_group_count >= ApiClient.Setting.SystemConfig.TGWRandomCount || tgw == null) { deputy_group_count = 0; deputy_group_index++; var list = HttpHelper.JsonToObject>(tbInfoTemp.pid_deputy) as List; if (list != null && list.Count != 0) { list = list.Where(o => CpsClient.Members.FirstOrDefault(f => f.cpstype == CpsType.阿里妈妈 && f.username == o.Member.username) != null).ToList(); if (list == null || list.Count == 0) return null; if (deputy_group_index < list.Count) tgw = list[deputy_group_index]; else { tgw = list[0]; deputy_group_index = 0; } } ApiClient.Cache.Set(key_deputy, tgw, 60); } return tgw; } else return new Tuiguangwei() { Pid = tbInfoTemp.pid_deputy, Name = tbInfoTemp.pid_deputy_name, Member = new fl_cps_member() { username = tbInfoTemp.pid_deputy_cps_name } }; } #endregion } catch (System.Exception ex) { EventClient.OnEvent(null, $"选择使用的推广位异常:{ex.Message} - {ex.StackTrace}"); } return null; } private static int activity_group_count = 0; private static int activity_group_index = -1; /// /// 强制推广位组 /// /// /// /// public static TuiguangweiActivity GetActivityTuiguangwei(string robotName, tbinfo_temp tbInfoTemp) { try { string key_activity = "fl_tbrebate_key_activity_" + robotName; var tgw = ApiClient.Cache.Get(key_activity); if (activity_group_count >= ApiClient.Setting.SystemConfig.TGWRandomCount || tgw == null) { activity_group_count = 0; activity_group_index++; var list = HttpHelper.JsonToObject>(tbInfoTemp.adzone_activity_pid) as List; if (list != null && list.Count != 0) { list = list.Where(o => CpsClient.Members.FirstOrDefault(f => f.cpstype == CpsType.阿里妈妈 && f.username == o.Member.username) != null).ToList(); if (list == null || list.Count == 0) return null; if (activity_group_index < list.Count) { tgw = list[activity_group_index]; } else { tgw = list[0]; activity_group_index = 0; } } ApiClient.Cache.Set(key_activity, tgw, 60); } activity_group_count++; return tgw; } catch (Exception ex) { EventClient.OnEvent(null, $"选择使用的强返推广位异常:{ex.Message} - {ex.StackTrace}"); } return null; } /// /// 清除强制推广位组缓存 /// public static void ClearActivityTuiguangwei(string robotName) { string key_activity = "fl_tbrebate_key_activity_" + robotName; ApiClient.Cache.Remove(key_activity); } /// /// 获取商品标题缓存 /// public static Dictionary GoodTitleCacheDic = new Dictionary(); /// /// 获取商品的标题,这个会频繁 /// /// /// public static Task GetGoodTitle(string mess) { return Task.Run(() => { var md5 = Util.GetMD5(mess); if (GoodTitleCacheDic.ContainsKey(md5)) return GoodTitleCacheDic[md5]; for (int i = 0; i < 2; i++) { try { //{"tkl":"6.0 hi:/哈LpUPXfo8wU0嘻 【移动用户立减1000元/咨询客服享惊喜好礼!】Apple/苹果 iPhone 12 5G官网旗舰iphone12苹果12官方正品手机"} var postData = $"{{\"tkl\":\"{mess}\"}}"; HttpHelper http = new HttpHelper(); HttpItem item = new HttpItem() { URL = "http://api.chaozhi.hk/tb/tklParse", Method = "POST", Timeout = 5000, ReadWriteTimeout = 2000, IsToLower = false, Cookie = "", UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:18.0) Gecko/20100101 Firefox/18.0", Accept = "text/html, application/xhtml+xml, */*", ContentType = "application/json", Referer = "http://tool.chaozhi.hk/", Allowautoredirect = false, AutoRedirectCookie = false, Postdata = postData, ResultType = ResultType.String }; HttpResult result = http.GetHtml(item); string html = result.Html; var jOjb = JObject.Parse(html); var error_code = jOjb["error_code"].ToString(); if (error_code == "0") { var keyword = jOjb["data"]["content"].ToString(); if (!string.IsNullOrWhiteSpace(keyword)) { if (!GoodTitleCacheDic.ContainsKey(md5)) GoodTitleCacheDic.Add(md5, keyword); return keyword; } } else if (error_code == "113")//{"error_code":113,"msg":"频率太快了","data":{}} { Thread.Sleep(1000); continue; } } catch (Exception ex) { return string.Empty; } } return string.Empty; }); } } }