| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928 |
- using dodohold.core;
- using Microsoft.AspNetCore.Mvc;
- using System.Diagnostics;
- using System.Text.RegularExpressions;
- namespace molilian.core
- {
- public partial class UnionParseCore
- {
- public static async Task<ActionResult> UnionParseAsync(string content, string channel, int commerceType, string ip, string oaid, string riskStrategy, int accountid = 0, string clickId = "")
- {
- content = content.Trim();
- return channel switch
- {
- "wemeet" => await WemeetParseAsync(content, ip, oaid),
- "bdpan" => PanParse(content, ip, oaid),
- "jd" => await JdParseAsync(content, commerceType, ip, oaid, accountid, clickId),
- "ks" => await KsParseAsync(content, commerceType, ip, oaid, accountid),
- "dy" => await DyParseAsync(content, commerceType, ip, oaid),
- "pdd" => await PddParseAsync(content, commerceType, ip, oaid, accountid),
- "tb" => await TaobaoParseAsync(content, commerceType, ip, oaid, riskStrategy, accountid),
- _ => await DeeplinkParseCore.ParseAsync(content, channel, ip, oaid),
- };
- }
- //return await DeeplinkParseCore.ParseAsync(content, channel, ip, oaid);
- public static async Task<APIResult> WemeetParseAsync(string content, string ip, string oaid)
- {
- var result = ToolParsePlus.GetFormattedObject(TkChannelEnum.wemeet, content, ip, oaid);
- content = content.UrlDecode();
- result.rawContent = content;
- try
- {
- result = await ToolParsePlus.WemeetParseAsync(content, result);
- }
- catch (Exception ex)
- {
- _ = new LoggerLibrary("unionParse", "wemeet_error")
- .Info(ip, oaid)
- .Info(content)
- .Info(ex.Message, ex.StackTrace)
- .SaveAsync();
- NotifyCore.Notify(new NifyMessage
- {
- message = $"【转链异常Wemeet】\n{content}\n\n{ex.Message}\n{ex.StackTrace}",
- priority = NifyMessagePriority.high,
- tags = ["red_circle"]
- });
- result.success = false;
- result.message = "内部错误";
- result.reason = "转链接口异常";
- }
- _ = TkLogCore.ParseLogAsync(result);
- return new APIResult(new
- {
- result.success,
- result.message,
- channel = result?.channel.ToString(),
- result.shortLinkurl,
- result.deeplink_url,
- result.itemName,
- }, result.success ? APIResultCodeEnum.OK : APIResultCodeEnum.NotAcceptable);
- }
- public static APIResult PanParse(string content, string ip, string oaid)
- {
- var result = ToolParsePlus.GetFormattedObject(TkChannelEnum.bdpan, content, ip, oaid);
- content = content.UrlDecode();
- result.rawContent = content;
- try
- {
- ToolParsePlus.PanParse(content, ref result);
- }
- catch (Exception ex)
- {
- _ = new LoggerLibrary("unionParse", "pan_error")
- .Info(ip, oaid)
- .Info(content)
- .Info(ex.Message, ex.StackTrace)
- .SaveAsync();
- NotifyCore.Notify(new NifyMessage
- {
- message = $"【转链异常Pan】\n{content}\n\n{ex.Message}\n{ex.StackTrace}",
- priority = NifyMessagePriority.high,
- tags = ["red_circle"]
- });
- result.success = false;
- result.message = "内部错误";
- result.reason = "转链接口异常";
- }
- _ = TkLogCore.ParseLogAsync(result);
- return new APIResult(new
- {
- result.success,
- result.message,
- channel = result?.channel.ToString(),
- result.shortLinkurl,
- result.deeplink_url,
- result.itemName,
- }, !string.IsNullOrEmpty(result.deeplink_url) ? APIResultCodeEnum.OK : APIResultCodeEnum.NotAcceptable);
- }
- private static APIResult TaobaoParseOutput(TkDataDTO result, Dictionary<string, long> swData, object info, APIResultCodeEnum code = APIResultCodeEnum.OK)
- {
- if (result.elapsedTime > 2000)
- {
- LoggerLibrary log = new("debug", "stopwatch");
- foreach ((var key, var value) in swData)
- {
- log.Info($"{key}\t{value}");
- }
- log.SaveAsync();
- }
- return new APIResult(info, code);
- }
- public static async Task<APIResult> TaobaoParseAsync(string content, int commerceType,
- string ip = "", string oaid = "", string riskStrategy = "",
- int accountid = 0)
- {
- bool other_aff = false;
- AlimamaPlus alimama = null;
- //content = content.UrlDecode();
- content = content[..Math.Min(1000, content.Length)];
- var result = AlimamaPlus.GetFormattedObject(content, ip, oaid);
- result.riskStrategy = riskStrategy;
- Dictionary<string, long> swData = new();
- swData.Add("StartNew", 0);
- Stopwatch stopwatch = Stopwatch.StartNew();
- result.rawContent = content;
- try
- {
- string reason = string.Empty;
- var config = TkConfigCore.Get();
- var arr = config.tk_whitelist_regular.Split('\n')
- .Where(line => !string.IsNullOrWhiteSpace(line))
- .ToList();
- var arr2 = config.tk_blacklist_regular.Split('\n')
- .Where(line => !string.IsNullOrWhiteSpace(line))
- .ToList();
- var arr3 = config.multi_token_regular.Split('\n')
- .Where(line => !string.IsNullOrWhiteSpace(line))
- .ToList();
- bool is_tao_url = !string.IsNullOrEmpty(result.shortLinkurl);
- bool is_tao_token = AlimamaPlus.MatchRegexes(content, arr);
- bool is_other = AlimamaPlus.MatchOtherInfo(content, arr2);
- //============================== 放弃转链-初步筛选1 ==============================
- if (!is_tao_url && !is_tao_token || is_other)
- {
- //没有链接都放弃
- result.success = false;
- result.message = "放弃转链";
- result.reason = "初步筛选1";
- result.subCode = TkSubCodeEnum.Prelim1;
- result.itemName = "";
- result.deeplink_url = "";
- _ = TkLogCore.ParseLogAsync(result);
- return TaobaoParseOutput(result, swData, new
- {
- result.success,
- result.commercial,
- result.message,
- result.content,
- result.itemName,
- other_aff,
- result.deeplink_url,
- });
- }
- bool is_multi_token = AlimamaPlus.MatchMultiToken(content, arr3);
- //============================== 放弃转链-初步筛选1.5 ==============================
- if (is_multi_token)
- {
- //没有链接都放弃
- result.success = false;
- result.message = "放弃转链";
- result.reason = "初步筛选1.5";
- result.subCode = TkSubCodeEnum.Prelim1_5;
- result.itemName = "";
- result.deeplink_url = "";
- _ = TkLogCore.ParseLogAsync(result);
- return TaobaoParseOutput(result, swData, new
- {
- result.success,
- result.commercial,
- result.message,
- result.content,
- result.itemName,
- other_aff,
- result.deeplink_url,
- });
- }
- //============================== 放弃转链-初步筛选2 ==============================
- bool is_aff_link = false;
- if (!string.IsNullOrEmpty(result.shortLinkurl)) is_aff_link = AlimamaPlus.IsAffLink(result.shortLinkurl);
- if (!is_tao_url && is_tao_token)
- {
- //淘宝口令
- result.success = false;
- result.message = "放弃转链";
- result.reason = "初步筛选2";
- result.subCode = TkSubCodeEnum.Prelim2;
- result.itemName = "点击打开淘宝APP";
- _ = TkLogCore.ParseLogAsync(result);
- //20241229 特例
- //if ("bj".Equals(EndPointCore.CurrentEndPoint))
- //{
- // string ruleKey = $"tmp_rules2:tb:{DateTime.Now:yyyyMMdd}";
- // var count = RedisHelper.Get<int>(ruleKey);
- // var now = DateTime.Now;
- // if (now > new DateTime(2024, 12, 19) && now <= new DateTime(2024, 12, 22) && now.Hour >= 7 && count < 1000)
- // {
- // result.deeplink_url = "tbopen://m.taobao.com/tbopen/index.html?source=auto&action=ali.open.nav&module=h5&bootImage=0&afc_route=1&bc_fl_src=growth_dhh_2200803434968_100-1930985-1595034112&dpa_Inid=159503411212096&dpa_material_id=530637422585&dpa_material_type=1&dpa_source_code=12096&force_no_smb=true&h5Url=https%3A%2F%2Fs.m.taobao.com%2Fh5%3Ffrom%3Dcustoms%26g_channelSrp%3Ddhhdpa_1232552832%26dpa_material_type%3D1%26ut_sk%3Dsearch%26spm%3Da2141.mb819t211c7%26sLaunch%3D0%26sKeep%3D1%26sModuleName%3Dsearch%26spm_back_up%3Da2141.mb819t211c7%26bc_fl_src%3Dgrowth_dhh_2200803434968_100-1930985-1595034112%26dpa_Inid%3D159503411212096%26dpa_material_id%3D530637422585%26dpa_material_type%3D1%26dpa_source_code%3D12096%26force_no_smb%3Dtrue%26itemIds%3D530637422585%26slk_actid%3D100000000207%26spm%3D2014.ugdhh.2200803434968.100-1930985-1595034112%26wh_biz%3Dtm&itemIds=530637422585&slk_actid=100000000207&spm=2014.ugdhh.2200803434968.100-1930985-1595034112&wh_biz=tm";
- // RedisHelper.IncrBy(ruleKey);
- // RedisHelper.Expire(ruleKey, 86400 * 1);
- // }
- //}
- other_aff = true;
- return TaobaoParseOutput(result, swData, new
- {
- result.success,
- result.commercial,
- result.message,
- result.content,
- result.itemName,
- other_aff,
- result.deeplink_url,
- });
- }
- if ((!is_tao_url && is_tao_token) || is_aff_link)
- {
- //没有短链接都放弃
- result.success = false;
- result.message = "放弃转链";
- result.reason = "初步筛选2";
- result.subCode = TkSubCodeEnum.Prelim2;
- result.itemName = "点击打开淘宝APP";
- _ = TkLogCore.ParseLogAsync(result);
- //20241229 特例
- //if ("bj".Equals(EndPointCore.CurrentEndPoint))
- //{
- // string ruleKey = $"tmp_rules2:tb:{DateTime.Now:yyyyMMdd}";
- // var count = RedisHelper.Get<int>(ruleKey);
- // var now = DateTime.Now;
- // if (now > new DateTime(2024, 12, 19) && now <= new DateTime(2024, 12, 22) && now.Hour >= 7 && count < 1000)
- // {
- // result.deeplink_url = "tbopen://m.taobao.com/tbopen/index.html?source=auto&action=ali.open.nav&module=h5&bootImage=0&afc_route=1&bc_fl_src=growth_dhh_2200803434968_100-1930985-1595034112&dpa_Inid=159503411212096&dpa_material_id=530637422585&dpa_material_type=1&dpa_source_code=12096&force_no_smb=true&h5Url=https%3A%2F%2Fs.m.taobao.com%2Fh5%3Ffrom%3Dcustoms%26g_channelSrp%3Ddhhdpa_1232552832%26dpa_material_type%3D1%26ut_sk%3Dsearch%26spm%3Da2141.mb819t211c7%26sLaunch%3D0%26sKeep%3D1%26sModuleName%3Dsearch%26spm_back_up%3Da2141.mb819t211c7%26bc_fl_src%3Dgrowth_dhh_2200803434968_100-1930985-1595034112%26dpa_Inid%3D159503411212096%26dpa_material_id%3D530637422585%26dpa_material_type%3D1%26dpa_source_code%3D12096%26force_no_smb%3Dtrue%26itemIds%3D530637422585%26slk_actid%3D100000000207%26spm%3D2014.ugdhh.2200803434968.100-1930985-1595034112%26wh_biz%3Dtm&itemIds=530637422585&slk_actid=100000000207&spm=2014.ugdhh.2200803434968.100-1930985-1595034112&wh_biz=tm";
- // RedisHelper.IncrBy(ruleKey);
- // RedisHelper.Expire(ruleKey, 86400 * 1);
- // }
- //}
- other_aff = true;
- return TaobaoParseOutput(result, swData, new
- {
- result.success,
- result.commercial,
- result.message,
- result.content,
- result.itemName,
- other_aff,
- result.deeplink_url,
- });
- }
- //那就初步筛选3 有tb.cn 并且有 or 手淘发现
- string pattern = @"^(?!【淘宝】).*https?:\/\/m\.tb\.cn.*(?:手淘发现|手淘搜索)";
- bool isMatch = Regex.IsMatch(content, pattern);
- if (isMatch)
- {
- result.success = false;
- result.message = "放弃转链";
- result.reason = "初步筛选3";
- result.subCode = TkSubCodeEnum.Prelim3;
- result.itemName = "点击打开淘宝APP";
- _ = TkLogCore.ParseLogAsync(result);
- return TaobaoParseOutput(result, swData, new
- {
- result.success,
- result.commercial,
- result.message,
- result.content,
- result.itemName,
- other_aff,
- result.deeplink_url,
- });
- }
- //============================== 放弃转链-地区过滤 ==============================
- bool is_ignore2 = AlimamaPlus.ShouldIgnoreRequest(ip, oaid, riskStrategy, out reason);
- if (is_ignore2)
- {
- result.success = false;
- result.message = "放弃转链";
- result.itemName = "点击打开淘宝APP";
- result.reason = reason;
- result.subCode = TkSubCodeEnum.TrafficCtrl;
- _ = TkLogCore.ParseLogAsync(result);
- return TaobaoParseOutput(result, swData, new
- {
- result.success,
- result.commercial,
- result.message,
- result.content,
- result.itemName,
- other_aff,
- result.deeplink_url,
- });
- }
- (bool isTaobaoUrl, string url) = AlimamaPlus.IsTaobaoUrl(content);
- //============================== 放弃转链-没有匹配账号 ==============================
- TkPoolDTO? account = accountid > 0 ?
- await TkPoolCore.GetOneAsync(accountid) :
- await TkPoolCore.GetOneAsync(TkPoolCore.TkAction.parse, isTaobaoUrl, riskStrategy);
- if (account == null)
- {
- result.success = false;
- result.message = "放弃转链";
- result.reason = "没有匹配账号";
- result.subCode = TkSubCodeEnum.Other;
- result.itemName = "点击打开淘宝APP";
- _ = TkLogCore.ParseLogAsync(result);
- return TaobaoParseOutput(result, swData, new
- {
- result.success,
- result.commercial,
- result.message,
- result.content,
- result.couponAmount,
- result.taoToken,
- result.shortLinkurl,
- other_aff,
- result.deeplink_url,
- });
- }
- result.accountId = account.id;
- result.accountName = account.company;
- alimama = new AlimamaPlus(account);
- int timeout = alimama._config.rt_max;
- #if DEBUG
- timeout = 10000;
- #endif
- using var cts = new CancellationTokenSource();
- cts.CancelAfter(timeout);
- var requestTask = Task.Run(() => alimama.UnionParseAsync(ip, oaid, content, commerceType, result, isTaobaoUrl, riskStrategy, cts.Token, swData), cts.Token);
- var delayTask = Task.Delay(timeout, cts.Token);
- var completedTask = await Task.WhenAny(requestTask, delayTask);
- if (completedTask == requestTask)
- {
- result = await requestTask;
- }
- else
- {
- //============================== 放弃转链-请求超时 ==============================
- cts.Cancel();
- result.success = false;
- result.message = "放弃转链";
- result.reason = "请求超时";
- result.subCode = TkSubCodeEnum.Other;
- result.itemName = "点击打开淘宝APP";
- }
- result.accountName = account.company;
- //result = await alimama.UnionParse2Async(content, result);
- }
- catch (Exception ex)
- {
- //============================== 放弃转链-请求超时 ==============================
- if (ex.Message.Contains("was canceled"))
- {
- result.success = false;
- result.message = "放弃转链";
- result.reason = "请求超时";
- result.subCode = TkSubCodeEnum.Other;
- result.itemName = "点击打开淘宝APP";
- }
- else
- {
- //============================== 转链接口异常 ==============================
- _ = new LoggerLibrary("unionParse", "tb_error")
- .Info(ip, oaid)
- .Info(content)
- .Info(ex.Message, ex.StackTrace)
- .SaveAsync();
- NotifyCore.Notify(new NifyMessage
- {
- message = $"【转链异常TB】\n{content}\n\n{ex.Message}\n{ex.StackTrace}",
- priority = NifyMessagePriority.high,
- tags = ["red_circle"]
- });
- result.success = false;
- result.subCode = TkSubCodeEnum.Other;
- result.message = "转链接口异常";
- result.itemName = "点击打开淘宝APP";
- }
- }
- _ = TkLogCore.ParseLogAsync(result, alimama);
- switch (result.reason)
- {
- case "其他推广链接":
- //case "排除淘口令":
- case "纯口令 没链接":
- other_aff = true;
- break;
- }
- return TaobaoParseOutput(result, swData, new
- {
- result.success,
- result.commercial,
- result.message,
- link_type = result.link_type.ToString(),
- channel = result?.channel.ToString(),
- result.channel_type,
- result.itemId,
- result.itemName,
- result.pic,
- result.promotionPrice,
- result.couponAmount,
- result.couponEffectiveStartTime,
- result?.couponEffectiveEndTime,
- result.shortLinkurl,
- result.deeplink_url,
- result.riskStrategy,
- result.content,
- result.taoToken,
- other_aff,
- });
- }
- private static APIResult JdParseOutput(JdDataDTO result, APIResultCodeEnum code = APIResultCodeEnum.OK)
- {
- return new APIResult(new
- {
- result.success,
- result.message,
- link_type = result.link_type.ToString(),
- channel = result?.channel.ToString(),
- result.channel_type,
- result.itemId,
- result.itemName,
- result.shortLinkurl,
- result.deeplink_url,
- }, code);
- }
- public static async Task<APIResult> JdParseAsync(string content, int commerceType, string ip, string oaid,
- int accountid = 0, string clickId = "", CancellationToken cancellationToken = default)
- {
- var config = TkConfigCore.Get();
- var result = JdUnionPlus.GetFormattedObject(content, ip, oaid, clickId);
- content = content.UrlDecode();
- result.rawContent = content;
- bool IfExceptional = false;
- try
- {
- if (!string.IsNullOrEmpty(config.jd_blacklist_regular))
- {
- var blacklist = config.jd_blacklist_regular.Split('\n')
- .Where(line => !string.IsNullOrWhiteSpace(line))
- .ToList();
- bool anyMatch = false;
- foreach (string pattern in blacklist)
- {
- if (Regex.IsMatch(content, pattern, RegexOptions.IgnoreCase)) anyMatch = true;
- }
- if (anyMatch)
- {
- result.success = false;
- result.deeplink_url = string.Empty;
- result.message = "放弃转链";
- result.reason = "规则排除";
- _ = TkLogCore.ParseLogAsync(result);
- return JdParseOutput(result);
- }
- }
- //============================== 放弃转链-地区过滤 ==============================
- if (!result.ip.StartsWith("127.0.0") && accountid == 0 && JdUnionPlus.ShouldIgnoreRequest(config, ip, oaid, out string reason))
- {
- result.link_type = JdUnionPlus.GetLinkType(result.shortLinkurl, out string out_url, out string itemId);
- result.deeplink_url = result.link_type switch
- {
- LinkTypeEnum.other_aff or
- LinkTypeEnum.live or
- LinkTypeEnum.video or
- LinkTypeEnum.profile or
- LinkTypeEnum.goods => JdUnionPlus.GetDefaultStyleDeeplink(result.shortLinkurl),
- _ => JdUnionPlus.GetDefaultStyleDeeplink(result.shortLinkurl),
- };
- //if (result.link_type == LinkTypeEnum.other_aff)
- //{
- // //20241204 特例
- // if ("bj".Equals(EndPointCore.CurrentEndPoint))
- // {
- // string ruleKey = $"tmp_rules1:jd:{DateTime.Now:yyyyMMdd}";
- // var count = RedisHelper.Get<int>(ruleKey);
- // if (DateTime.Now < DateTime.Parse("2024-12-07") && count < 500)
- // {
- // result.deeplink_url = "openapp.jdmobile://virtual?params=%7B%22des%22%3A%22union%22%2C%22category%22%3A%22jump%22%2C%22url%22%3A%22https%3A%2F%2Fu.jd.com%2FugInesd%3Fe%3DCPS-11417-__ZLDEVICE__-CPS-wkfG72%22%7D&backurl=__back_url__";
- // RedisHelper.IncrBy(ruleKey);
- // RedisHelper.Expire(ruleKey, 86400 * 1);
- // }
- // }
- //}
- result.success = false;
- result.message = "放弃转链";
- result.reason = reason;
- _ = TkLogCore.ParseLogAsync(result);
- return JdParseOutput(result);
- }
- // bool is_ignore2 = JdUnionPlus.FlowControlIgnoreRequest(config, out reason);
- //#if DEBUG
- // is_ignore2 = false;
- //#endif
- // if (accountid == 0 && is_ignore2)
- // {
- // result.success = false;
- // result.message = "放弃转链";
- // result.reason = reason;
- // _ = TkLogCore.ParseLogAsync(result);
- // return JdParseOutput(result);
- // }
- var account = accountid > 0 ? await JdPoolCore.GetOneAsync(accountid, JdPoolCore.JdAction.parse) : await JdPoolCore.GetOneAsync(JdPoolCore.JdAction.parse);
- if (account == null)
- {
- result.success = false;
- result.message = "放弃转链";
- result.reason = "没有匹配账号";
- result.deeplink_url = result.link_type switch
- {
- LinkTypeEnum.other_aff or LinkTypeEnum.goods => JdUnionPlus.GetDefaultStyleDeeplink(result.shortLinkurl),
- _ => JdUnionPlus.GetDefaultStyleDeeplink(result.shortLinkurl),
- };
- _ = TkLogCore.ParseLogAsync(result);
- return JdParseOutput(result);
- }
- result.accountId = account.id;
- result.accountName = account.name;
- var plus = new JdUnionPlus(account);
- result = await plus.JdParseAsync(content, commerceType, clickId, result, cancellationToken);
- }
- catch (Exception ex)
- {
- if (ex.Message.Contains("was canceled"))
- {
- result.success = false;
- result.message = "放弃转链";
- result.reason = "请求超时";
- }
- else
- {
- IfExceptional = true;
- _ = new LoggerLibrary("unionParse", "jd_error")
- .Info(ip, oaid)
- .Info(content)
- .Info(ex.Message, ex.StackTrace)
- .SaveAsync();
- NotifyCore.Notify(new NifyMessage
- {
- message = $"【转链异常JD】\n{content}\n\n{ex.Message}\n{ex.StackTrace}",
- priority = NifyMessagePriority.high,
- tags = ["red_circle"]
- });
- result.success = false;
- result.message = "内部错误";
- result.reason = "转链接口异常";
- }
- result.deeplink_url = result.link_type switch
- {
- LinkTypeEnum.other_aff or LinkTypeEnum.goods => JdUnionPlus.GetDefaultStyleDeeplink(result.shortLinkurl),
- _ => JdUnionPlus.GetDefaultStyleDeeplink(result.shortLinkurl),
- };
- }
- _ = TkLogCore.ParseLogAsync(result);
- return JdParseOutput(result, IfExceptional ? APIResultCodeEnum.NotAcceptable : APIResultCodeEnum.OK);
- }
- public static async Task<APIResult> DyParseAsync(string content, int commerceType, string ip, string oaid, CancellationToken cancellationToken = default)
- {
- var result = DyUnionPlus.GetFormattedObject(content, ip, oaid);
- content = content.UrlDecode();
- result.rawContent = content;
- bool IfExceptional = false;
- try
- {
- #if DEBUG
- #else
- // 2024-06-19 联盟业务下线
- result.success = false;
- result.message = "放弃转链";
- result.reason = "联盟下线";
- _ = TkLogCore.ParseLogAsync(result);
- return new APIResult(result);
- #endif
- if (DyUnionPlus.ShouldIgnoreRequest(ip, oaid, out string reason))
- {
- result.success = false;
- result.message = "放弃转链";
- result.reason = reason;
- _ = TkLogCore.ParseLogAsync(result);
- return new APIResult(result);
- }
- var account = PangolinPoolCore.GetOne();
- if (account == null)
- {
- result.success = false;
- result.message = "放弃转链";
- result.reason = "没有匹配账号";
- _ = TkLogCore.ParseLogAsync(result);
- return new APIResult(result);
- }
- result = await DyUnionPlus.DyParseAsync(account, content, commerceType, result, cancellationToken);
- }
- catch (Exception ex)
- {
- if (ex.Message.Contains("was canceled"))
- {
- result.success = false;
- result.message = "放弃转链";
- result.reason = "请求超时";
- }
- else
- {
- IfExceptional = true;
- _ = new LoggerLibrary("unionParse", "dy_error")
- .Info(ip, oaid)
- .Info(content)
- .Info(ex.Message, ex.StackTrace)
- .SaveAsync();
- NotifyCore.Notify(new NifyMessage
- {
- message = $"【转链异常DY】\n{content}\n\n{ex.Message}\n{ex.StackTrace}",
- priority = NifyMessagePriority.high,
- tags = ["red_circle"]
- });
- result.success = false;
- result.message = "内部错误";
- result.reason = "转链接口异常";
- }
- }
- _ = TkLogCore.ParseLogAsync(result);
- return new APIResult(new
- {
- result.success,
- result.message,
- link_type = result.link_type.ToString(),
- channel = result?.channel.ToString(),
- content = result?.rawContent.ToString(),
- taoToken = result?.taoToken.ToString(),
- result.channel_type,
- result.itemName,
- result.shortLinkurl,
- result.deeplink_url,
- }, IfExceptional ? APIResultCodeEnum.NotAcceptable : APIResultCodeEnum.OK);
- }
- public static async Task<APIResult> PddParseAsync(string content, int commerceType, string ip, string oaid,
- int accountid = 0, CancellationToken cancellationToken = default)
- {
- var result = PddUnionPlus.GetFormattedObject(content, ip, oaid);
- content = content.UrlDecode();
- result.rawContent = content;
- bool IfExceptional = false;
- try
- {
- var config = TkConfigCore.Get();
- if (!string.IsNullOrEmpty(config.pdd_blacklist_regular))
- {
- var blacklist = config.pdd_blacklist_regular.Split('\n')
- .Where(line => !string.IsNullOrWhiteSpace(line))
- .ToList();
- bool anyMatch = false;
- foreach (string pattern in blacklist)
- {
- if (Regex.IsMatch(content, pattern, RegexOptions.IgnoreCase)) anyMatch = true;
- }
- if (anyMatch)
- {
- result.success = false;
- result.deeplink_url = string.Empty;
- result.message = "放弃转链";
- result.reason = "规则排除";
- _ = TkLogCore.ParseLogAsync(result);
- return PddParseOutput(result);
- }
- }
- //============================== 放弃转链-地区过滤 ==============================
- if (accountid == 0 && PddUnionPlus.ShouldIgnoreRequest(config, ip, oaid, out string reason))
- {
- result.success = false;
- result.message = "放弃转链";
- result.reason = reason;
- result.deeplink_url = PddUnionPlus.GetDeeplink(result.rawContent);
- _ = TkLogCore.ParseLogAsync(result);
- return PddParseOutput(result);
- }
- var account = PddPoolCore.GetOne(PddUnionWorkMode.All, accountid);
- if (account == null)
- {
- result.success = false;
- result.message = "放弃转链";
- result.reason = "没有匹配账号";
- result.deeplink_url = PddUnionPlus.GetDeeplink(result.rawContent);
- _ = TkLogCore.ParseLogAsync(result);
- return PddParseOutput(result);
- }
- result.accountId = account.id;
- result.accountName = account.name;
- var plus = new PddUnionPlus(account);
- result = await plus.PddParseAsync(content, commerceType, result, cancellationToken);
- }
- catch (Exception ex)
- {
- if (ex.Message.Contains("was canceled"))
- {
- result.success = false;
- result.message = "放弃转链";
- result.reason = "请求超时";
- }
- else
- {
- IfExceptional = true;
- _ = new LoggerLibrary("unionParse", "pdd_error")
- .Info(ip, oaid)
- .Info(content)
- .Info(ex.Message, ex.StackTrace)
- .SaveAsync();
- NotifyCore.Notify(new NifyMessage
- {
- message = $"【转链异常PDD】\n{content}\n\n{ex.Message}\n{ex.StackTrace}",
- priority = NifyMessagePriority.high,
- tags = ["red_circle"]
- });
- result.success = false;
- result.message = "内部错误";
- result.reason = "转链接口异常";
- }
- }
- _ = TkLogCore.ParseLogAsync(result);
- return PddParseOutput(result, IfExceptional ? APIResultCodeEnum.NotAcceptable : APIResultCodeEnum.OK);
- }
- private static APIResult PddParseOutput(PddDataDTO result, APIResultCodeEnum code = APIResultCodeEnum.OK)
- {
- return new APIResult(new
- {
- result.success,
- result.message,
- link_type = result.link_type.ToString(),
- channel = result?.channel.ToString(),
- result.itemId,
- result.itemName,
- result.shortLinkurl,
- result.deeplink_url,
- }, code);
- }
- public static async Task<APIResult> KsParseAsync(string content, int commerceType, string ip, string oaid,
- int accountid = 0, CancellationToken cancellationToken = default)
- {
- var result = KsUnionPlus.GetFormattedObject(content, ip, oaid);
- content = content.UrlDecode();
- result.rawContent = content;
- bool IfExceptional = false;
- try
- {
- var config = TkConfigCore.Get();
- if (!string.IsNullOrEmpty(config.ks_blacklist_regular))
- {
- var blacklist = config.ks_blacklist_regular.Split('\n')
- .Where(line => !string.IsNullOrWhiteSpace(line))
- .ToList();
- bool anyMatch = false;
- foreach (string pattern in blacklist)
- {
- if (Regex.IsMatch(content, pattern, RegexOptions.IgnoreCase)) anyMatch = true;
- }
- if (anyMatch)
- {
- result.success = false;
- result.deeplink_url = string.Empty;
- result.message = "放弃转链";
- result.reason = "规则排除";
- _ = TkLogCore.ParseLogAsync(result);
- return KsParseOutput(result);
- }
- }
- //============================== 放弃转链-地区过滤 ==============================
- if (accountid == 0 && KsUnionPlus.ShouldIgnoreRequest(config, ip, oaid, out string reason))
- {
- result.success = false;
- result.message = "放弃转链";
- result.reason = reason;
- result.deeplink_url = KsUnionPlus.GetDeeplink(string.Empty, LinkTypeEnum.baseDomain);
- _ = TkLogCore.ParseLogAsync(result);
- return KsParseOutput(result);
- }
- var account = accountid > 0 ? KsPoolCore.GetOne(accountid, KsPoolCore.KsAction.parse) : KsPoolCore.GetOne(KsPoolCore.KsAction.parse);
- if (account == null)
- {
- result.success = false;
- result.message = "放弃转链";
- result.reason = "没有匹配账号";
- result.deeplink_url = KsUnionPlus.GetDeeplink(string.Empty, LinkTypeEnum.baseDomain);
- _ = TkLogCore.ParseLogAsync(result);
- return KsParseOutput(result);
- }
- result.accountId = account.id;
- result.accountName = account.name;
- var plus = new KsUnionPlus(account);
- result = await plus.KsParseAsync(content, commerceType, result, cancellationToken);
- }
- catch (Exception ex)
- {
- if (ex.Message.Contains("was canceled"))
- {
- result.success = false;
- result.message = "放弃转链";
- result.reason = "请求超时";
- }
- else
- {
- IfExceptional = true;
- _ = new LoggerLibrary("unionParse", "jd_error")
- .Info(ip, oaid)
- .Info(content)
- .Info(ex.Message, ex.StackTrace)
- .SaveAsync();
- NotifyCore.Notify(new NifyMessage
- {
- message = $"【转链异常JD】\n{content}\n\n{ex.Message}\n{ex.StackTrace}",
- priority = NifyMessagePriority.high,
- tags = ["red_circle"]
- });
- result.success = false;
- result.message = "内部错误";
- result.reason = "转链接口异常";
- }
- result.deeplink_url = KsUnionPlus.GetDeeplink(string.Empty, LinkTypeEnum.baseDomain);
- }
- _ = TkLogCore.ParseLogAsync(result);
- return KsParseOutput(result, IfExceptional ? APIResultCodeEnum.NotAcceptable : APIResultCodeEnum.OK);
- }
- private static APIResult KsParseOutput(KsDataDTO result, APIResultCodeEnum code = APIResultCodeEnum.OK)
- {
- return new APIResult(new
- {
- result.success,
- result.message,
- link_type = result.link_type.ToString(),
- channel = result?.channel.ToString(),
- result.itemId,
- result.itemName,
- result.shortLinkurl,
- result.deeplink_url,
- }, code);
- }
- }
- }
|