| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728 |
- 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 launchScene, int accountid = 0, string clickId = "", string type = "")
- {
- content = content.Trim();
- if ("dp".Equals(type))
- {
- return channel switch
- {
- "jd" => await DeeplinkJdParseAsync(content, commerceType, ip, oaid, riskStrategy, launchScene, accountid, clickId),
- "pdd" => await DeeplinkPddParseAsync(content, commerceType, ip, oaid, accountid),
- "tb" => await DeeplinkTaobaoParseAsync(content, commerceType, ip, oaid, riskStrategy, launchScene, accountid),
- };
- }
- return channel switch
- {
- "wemeet" => await WemeetParseAsync(content, ip, oaid),
- "bdpan" => PanParse(content, ip, oaid),
- "jd" => await JdParseAsync(content, commerceType, ip, oaid, riskStrategy, launchScene, 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, launchScene, 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);
- }
- private static string parseDeeplinkInput(string content)
- {
- //detail.tmall.com
- //item.taobao.com
- //没有 ali_trackid 参数就转链
- if (content.StartsWith("tbopen://") || content.StartsWith("tmall://"))
- {
- string url = content.GetContentPart("h5Url=", "&");
- if (string.IsNullOrEmpty(url))
- {
- url = content.GetContentPart("h5Url=", "");
- }
- if (string.IsNullOrEmpty(url)) return content;
- content = url.UrlDecode();
- }
- if (content.StartsWith("openapp.jdmobile://"))
- {
- try
- {
- string param = content.GetContentPart("params=", "");
- param = param.UrlDecode();
- var root = param.Convert2JsonElement();
- string category = root.Read("category", string.Empty);
- string sourceType = root.Read("sourceType", string.Empty);
- string skuId = root.Read("skuId", string.Empty);
- switch (sourceType)
- {
- case "Item":
- string url_content = $"https://item.jd.com/{skuId}.html";
- return url_content;
- }
- switch (category)
- {
- case "jump":
- string url = root.Read("url", string.Empty);
- string url_content = url;
- return url_content;
- }
- }
- catch (Exception ex)
- {
- }
- }
- //tmall://page.tm/appLink?h5Url=https%3A%2F%2Fdetail.tmall.com%2Fitem.htm%3Fid%3D629542722592%26share_channel%3Ddetail%26paidshareToken%3D842B5476D9A0B364D5CC650F238292E3CFB595CDC22393CD60DAD29D99CDB28859466A4E043DC620792D1206C14333CF4494C856B7CB8E4E%26sourceType%3Dother%26suid%3D8daeb0cc-87f9-44c9-b530-aa4566945452%26ut_sk%3D1.Z9jmzqkFuPsDANvbV379%252FPgp_23181017_1752503741948.Copy.tm_detailbenefitshare%26un%3Df6b7d60f206d27bb88bd3787856a60a9%26share_crt_v%3D1%26un_site%3D0%26spm%3Da2159r.13376460.0.0%26sp_tk%3DR25MWDQxc3FYTUE%253D%26cpp%3D1%26shareurl%3Dtrue%26short_name%3Dh.hRhri7E%26bxsign%3DscdGJqiqt-937BvSp8SKU1sftPqjbSV-mN9PO9uSUpCQixolsthqN0L8lXUUcfE3z7Px0CurYbiqaK7Zu4nTznXTD9SNYSFZAWkd-quYKZBNgwpfIA5kJabJs1rRFphfw19%26tk%3DGnLX41sqXMA%2520CZ321%26app%3Dchrome%26sharingreflow%3Dh5%26bc_fl_src%3Dtmapp_detail_new%26traceId%3D1101041752523106267mmWuHUrYERQCA&module=h5&action=ali.open.nav&bc_fl_src=tmapp_detail_new&splash=9455fa72420237eb&traceId=1101041752523106267mmWuHUrYERQCA
- //intent://m.taobao.com/tbopen/index.html?h5Url=https%3A%2F%2Fpages-fast.m.taobao.com%2Fwow%2Fz%2Fapp%2Fltao-fe%2Fxsms-ssr-yyds%2Fexternal%3Fx-ssr%3Dtrue%26x-preload%3Dtrue%26x-sec%3Dwua%26disableProgress%3Dtrue%26disableNav%3DYES%26skeleton%3Dtrue%26asac%3D2A241230082ZOWK433A270%26forceThemis%3Dtrue%26status_bar_transparent%3Dtrue%26feedsCeiling%3Dtrue%26spmb%3Dmssharereturntb_base%26itemIds%3D902307586145%26src%3Dmsdetail%26isCallApp%3D1%26slk_gid%3Dgid_er_sidebar_0&action=ali.open.nav&module=h5&bootImage=0&slk_sid=vk/8IEUpYEoCARudLiPeC+y9_1752523360882&slk_t=1752523366491&slk_gid=gid_er_sidebar_0&afcPromotionOpen=false&bc_fl_src=h5_huanduan&source=slk_intent
- // tbopen://m.taobao.com/tbopen/index.html?action=ali.open.nav&module=h5&h5Url=https%3A%2F%2Fdetail.m.tmall.com%2Fitem.htm%3Fid%3D838442214976%26ali_trackid%3D2%3Amm_7770555492_3286350431_116030600497%3A1752523820207_557769320_0%26union_lens%3DlensId%3AOPT%401752508785%402135dbda_1303_19809a9e462_5d67%4001%40eyJmbG9vcklkIjo3MzM2N30ie%3Brecoveryid%3A557769320_0%401752523820210%26e%3DdXNALs0LOL32LDtfC7ZWu9EHLliVjxj7pU0YSYyMuITov3hgGO6cv43ak0M1RdoZhIY4r_DZTS7AIWf4uHY1l_zk9mjzcRPpAiUi6ISdl6tIQmqgSGrWBp4zrUrX30wzt5CoaUxHdgDcvlGY0FFw4AsSCrC98Ev3WwYNKzSCQESWOsgjI-_XQgIvzXlgEI89__I9gNxCnRWuLFbjX-6pADavg52v_HkHibcVNsFgxnVy52oYpKpvhmw_NFRtQD3PDSi1wLFUrWN_6nC8CG3HZzcKOEjMTefgpXU0JQv0wvGdjkXaNLJcTxH-LDKBJRbbUD-4jMAahepVY0FqvKyrNwo5h4XpPi-KwY3mRR37mYRk2qVlYBujxeXrXDgNuUfueXX72mp250XDG_1N5hlzNg%26type%3D2%26tk_cps_param%3D7770555492%26tkFlag%3D0%26tk_cps_ut%3D2%26bxsign%3Dtbkcb7FZp7TFdkfoQXHOByuFz_a0nDGWCqDV8BNKko5E73a65lh_x913EERrie6TvaWs7hDm2suzCAC_Q7KTXaHf8L6aOHPYNkJAwvON3bQRhfCIZWwiW14-Ws9DtJvqpvgeE76f_3H9O_RCdTJRsGvBcsNfJnkHdRYGo2t4m-mMnEy0GiLAZo_ahkGsuwzoKVi
- //openapp.jdmobile://virtual?params=%7B%22category%22%3A%22jump%22%2C%22des%22%3A%22productDetail%22%2C%22skuId%22%3A%2210153596800839%22%2C%22sourceType%22%3A%22Item%22%2C%22sourceValue%22%3A%22view-ware%22%2C%22utm_term_m%22%3A%22654711b5a69048ed8e277944bd840205%22%2C%22M_sourceFrom%22%3A%22sxbanner%22%2C%22yinliuExt%22%3A%22exp-base___bXBhZ2VhY3RpdmVfNzY5NjJ8ZXhwLWJhc2U%22%2C%22msf_type%22%3A%22click%22%2C%22m_param%22%3A%7B%22m_source%22%3A%220%22%2C%22jda%22%3A%22181111935.17520759467211334439509.1752075947.1752523405.1752523435.4%22%2C%22usc%22%3A%22lianmeng__9__kong%22%2C%22ucp%22%3A%22t_2035161610_%22%2C%22umd%22%3A%22tuiguang%22%2C%22utr%22%3A%22654711b5a69048ed8e277944bd840205%22%2C%22jdv%22%3A%22181111935%7Clianmeng__9__kong%7Ct_2035161610_%7Ctuiguang%7C654711b5a69048ed8e277944bd840205%7C1752523436869%22%2C%22ref%22%3A%22https%3A%2F%2Fitem.m.jd.com%2Fproduct%2F10153596800839.html%3Fcu%3Dtrue%26utm_source%3Dlianmeng__9__kong%26utm_medium%3Dtuiguang%26utm_campaign%3Dt_2035161610_%26utm_term%3D654711b5a69048ed8e277944bd840205%22%2C%22psn%22%3A%2217520759467211334439509%7C4%22%2C%22psq%22%3A1%2C%22unpl%22%3A%22JF8EAK9nNSttX09RAxsCSBZATFVVW1RcHh5XbGEDXFhdGAEMHgMYExR7XlVdWRRKER9vYxRVWFNKVg4fCisSF3teVVxZCEwXBG9mNWRaWEIZRElPKxEQe1xkXlsMSBYFa28AU1tbS1QHGQceEBhPXFxuXDhMFwpfZwRUWVpPXAISAxobEkNtZF9tCXsWMy4JBVRUW05XDRhPGxQUSFxSWlUNTBEAb2cHVlhdSVwBGgorEyBI%22%2C%22pc_source%22%3A%22%22%2C%22mba_muid%22%3A%2217520759467211334439509%22%2C%22mba_sid%22%3A%2217525234051972092463856%22%2C%22std%22%3A%22MO-J2011-1%22%2C%22par%22%3A%22cu%3Dtrue%26utm_source%3Dlianmeng__9__kong%26utm_medium%3Dtuiguang%26utm_campaign%3Dt_2035161610_%26utm_term%3D654711b5a69048ed8e277944bd840205%22%2C%22event_id%22%3A%22MDownLoadFloat_ClickOpenApp%22%2C%22mt_xid%22%3A%22%22%2C%22mt_subsite%22%3A%22%22%2C%22YINLIUhuanqi%22%3A%22https%3A%2F%2Fitem.m.jd.com%2Fproduct%2F10153596800839.html%3Fcu%3Dtrue%26utm_source%3Dlianmeng__9__kong%26utm_medium%3Dtuiguang%26utm_campaign%3Dt_2035161610_%26utm_term%3D654711b5a69048ed8e277944bd840205%22%2C%22yls%22%3A%22sh_bt_%22%2C%22ylb%22%3A%22safari%22%2C%22yld%22%3A%22iphone%22%2C%22ylh%22%3A%22https%3A%2F%2Fitem.m.jd.com%2Fproduct%2F10153596800839.html%22%2C%22yle%22%3A%5B%5D%2C%22ylle%22%3A%22%22%2C%22ylo%22%3A%22ios%22%7D%2C%22SE%22%3A%7B%22mt_subsite%22%3A%22%22%2C%22__jdv%22%3A%22181111935%7Clianmeng__9__kong%7Ct_2035161610_%7Ctuiguang%7C654711b5a69048ed8e277944bd840205%7C1752523436869%22%2C%22unpl%22%3A%22JF8EAK9nNSttX09RAxsCSBZATFVVW1RcHh5XbGEDXFhdGAEMHgMYExR7XlVdWRRKER9vYxRVWFNKVg4fCisSF3teVVxZCEwXBG9mNWRaWEIZRElPKxEQe1xkXlsMSBYFa28AU1tbS1QHGQceEBhPXFxuXDhMFwpfZwRUWVpPXAISAxobEkNtZF9tCXsWMy4JBVRUW05XDRhPGxQUSFxSWlUNTBEAb2cHVlhdSVwBGgorEyBI%22%2C%22__jda%22%3A%22181111935.17520759467211334439509.1752075947.1752523405.1752523435.4%22%7D%7D
- return content;
- }
- public static async Task<APIResult> TaobaoParseAsync(string content, int commerceType,
- string ip = "", string oaid = "", string riskStrategy = "", int launchScene = 0,
- int accountid = 0)
- {
- bool other_aff = false;
- AlimamaPlus alimama = null;
- //content = content.UrlDecode();
- var result = AlimamaPlus.GetFormattedObject(content, ip, oaid);
- result.riskStrategy = riskStrategy;
- result.launchScene = launchScene;
- result.rawContent = content;
- Dictionary<string, long> swData = new();
- swData.Add("StartNew", 0);
- Stopwatch stopwatch = Stopwatch.StartNew();
- try
- {
- content = content[..Math.Min(1000, content.Length)];
- 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 = string.Empty;
- _ = 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 = string.Empty;
- _ = 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, launchScene, 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, launchScene);
- 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, launchScene, 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.launchScene,
- result.content,
- result.taoToken,
- other_aff,
- });
- }
- public static async Task<APIResult> DeeplinkTaobaoParseAsync(string content, int commerceType,
- string ip = "", string oaid = "", string riskStrategy = "", int launchScene = 0,
- int accountid = 0)
- {
- bool other_aff = false;
- AlimamaPlus alimama = null;
- var result = AlimamaPlus.GetFormattedObject(content, ip, oaid);
- result.riskStrategy = riskStrategy;
- result.launchScene = launchScene;
- result.rawContent = content;
- result.parse_type = "dp";
- Dictionary<string, long> swData = new();
- swData.Add("StartNew", 0);
- Stopwatch stopwatch = Stopwatch.StartNew();
- try
- {
- string url_content = parseDeeplinkInput(content);
- if (url_content.Contains("ali_trackid="))
- {
- //============================== 其他推广链接 ==============================
- result.channel = TkChannelEnum.tb;
- result.channel_type = ChannelTypeEnum.tb;
- result.link_type = LinkTypeEnum.other_aff;
- result.success = false;
- result.message = "放弃转链";
- result.reason = "其他推广链接";
- result.subCode = TkSubCodeEnum.OtherPromo;
- result.accountName = string.Empty;
- result.content = content;
- result.deeplink_url = string.Empty;
- _ = TkLogCore.ParseLogAsync(result);
- return TaobaoParseOutput(result, swData, new
- {
- result.success,
- result.commercial,
- result.message,
- result.content,
- result.itemName,
- other_aff = true,
- result.deeplink_url,
- });
- }
- (bool isTaobaUrl, string shortLinkurl) = AlimamaPlus.IsTaobaoUrl(url_content);
- if (!isTaobaUrl)
- {
- result.success = false;
- result.channel = TkChannelEnum.tb;
- result.link_type = LinkTypeEnum.unknown;
- result.success = false;
- result.message = "放弃转链";
- result.reason = "无效商品id";
- if (!result.success)
- {
- result.deeplink_url = string.Empty;
- }
- _ = TkLogCore.ParseLogAsync(result);
- return TaobaoParseOutput(result, swData, new
- {
- result.success,
- result.commercial,
- result.message,
- result.content,
- result.itemName,
- other_aff,
- result.deeplink_url,
- });
- }
- result.shortLinkurl = shortLinkurl;
- result.deeplink_url = content;
- result.content = shortLinkurl;
- content = shortLinkurl;
- 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 = string.Empty;
- _ = 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 = string.Empty;
- _ = 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";
- if (!result.success)
- {
- result.deeplink_url = string.Empty;
- }
- _ = 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";
- if (!result.success)
- {
- result.deeplink_url = string.Empty;
- }
- _ = 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";
- if (!result.success)
- {
- result.deeplink_url = string.Empty;
- }
- _ = 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, launchScene, out reason);
- if (is_ignore2)
- {
- result.success = false;
- result.message = "放弃转链";
- result.itemName = "点击打开淘宝APP";
- result.reason = reason;
- result.subCode = TkSubCodeEnum.TrafficCtrl;
- if (!result.success)
- {
- result.deeplink_url = string.Empty;
- }
- _ = 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, launchScene, "dp");
- if (account == null)
- {
- result.success = false;
- result.message = "放弃转链";
- result.reason = "没有匹配账号";
- result.subCode = TkSubCodeEnum.Other;
- result.itemName = "点击打开淘宝APP";
- if (!result.success)
- {
- result.deeplink_url = string.Empty;
- }
- _ = 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, launchScene, 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";
- }
- }
- if (!result.success)
- {
- result.deeplink_url = string.Empty;
- }
- _ = 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.launchScene,
- result.content,
- result.taoToken,
- other_aff,
- });
- }
- private static APIResult JdParseOutput(JdDataDTO result, APIResultCodeEnum code = APIResultCodeEnum.OK)
- {
- return new APIResult(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.shortLinkurl,
- result.deeplink_url,
- result.riskStrategy,
- result.launchScene,
- }, code);
- }
- public static async Task<APIResult> JdParseAsync(string content, int commerceType, string ip, string oaid,
- string riskStrategy = "", int launchScene = 0,
- int accountid = 0, string clickId = "", CancellationToken cancellationToken = default)
- {
- var config = TkConfigCore.Get();
- var result = JdUnionPlus.GetFormattedObject(content, ip, oaid, clickId);
- result.rawContent = content;
- result.riskStrategy = riskStrategy;
- result.launchScene = launchScene;
- bool IfExceptional = false;
- try
- {
- content = content.UrlDecode();
- 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);
- }
- }
- string out_url = null;
- string itemId = null;
- //============================== 放弃转链-地区过滤 ==============================
- if (!TestParseCore.InWhitelist(result.ip, result.oaid) && accountid == 0 && JdUnionPlus.ShouldIgnoreRequest(config, ip, oaid, riskStrategy, launchScene, out string reason))
- {
- result.link_type = JdUnionPlus.GetLinkType(result.shortLinkurl, out out_url, out 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);
- // }
- result.shortLinkurl = JdUnionPlus.GetLink(content);
- result.content = result.shortLinkurl;
- result.link_type = JdUnionPlus.GetLinkType(result.shortLinkurl, out out_url, out itemId);
- bool is_numeric = result.shortLinkurl.Contains(itemId);
- var account = accountid > 0 ? await JdPoolCore.GetOneAsync(accountid, JdPoolCore.JdAction.parse) : await JdPoolCore.GetOneAsync(JdPoolCore.JdAction.parse, riskStrategy, launchScene, is_numeric);
- 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> DeeplinkJdParseAsync(string content, int commerceType, string ip, string oaid,
- string riskStrategy = "", int launchScene = 0,
- int accountid = 0, string clickId = "", CancellationToken cancellationToken = default)
- {
- var config = TkConfigCore.Get();
- var result = JdUnionPlus.GetFormattedObject(content, ip, oaid, clickId);
- result.rawContent = content;
- result.parse_type = "dp";
- result.riskStrategy = riskStrategy;
- result.launchScene = launchScene;
- bool IfExceptional = false;
- try
- {
- string url_content = parseDeeplinkInput(content);
- string utm_campaign = url_content.GetContentPart("utm_campaign=", "&");
- string utm_term = url_content.GetContentPart("utm_term=", "&");
- if (!string.IsNullOrEmpty(utm_campaign) || !string.IsNullOrEmpty(utm_term))
- {
- //============================== 其他推广链接 ==============================
- result.channel = TkChannelEnum.jd;
- result.channel_type = ChannelTypeEnum.jd;
- result.link_type = LinkTypeEnum.other_aff;
- result.success = false;
- result.message = "放弃转链";
- result.reason = "其他推广链接";
- result.accountName = string.Empty;
- result.content = content;
- result.deeplink_url = string.Empty;
- _ = TkLogCore.ParseLogAsync(result);
- return JdParseOutput(result);
- }
- ///utm_campaign=t_2034983365_&utm_term=638b93ffc5174cc1a01a6471c56913d5 这俩带1个都不转。
- ///
- result.shortLinkurl = url_content;
- result.content = url_content;
- result.deeplink_url = content;
- content = url_content;
- 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);
- }
- }
- string out_url = null;
- string itemId = null;
- //============================== 放弃转链-地区过滤 ==============================
- if (!TestParseCore.InWhitelist(result.ip, result.oaid) && accountid == 0 && JdUnionPlus.ShouldIgnoreRequest(config, ip, oaid, riskStrategy, launchScene, out string reason))
- {
- result.link_type = JdUnionPlus.GetLinkType(result.shortLinkurl, out out_url, out 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),
- };
-
- result.success = false;
- result.message = "放弃转链";
- result.reason = reason;
- if (!result.success)
- {
- result.deeplink_url = string.Empty;
- }
- _ = TkLogCore.ParseLogAsync(result);
- return JdParseOutput(result);
- }
- result.shortLinkurl = JdUnionPlus.GetLink(content);
- result.content = result.shortLinkurl;
- result.link_type = JdUnionPlus.GetLinkType(result.shortLinkurl, out out_url, out itemId);
- bool is_numeric = result.shortLinkurl.Contains(itemId);
- var account = accountid > 0 ? await JdPoolCore.GetOneAsync(accountid, JdPoolCore.JdAction.parse) : await JdPoolCore.GetOneAsync(JdPoolCore.JdAction.parse, riskStrategy, launchScene, is_numeric,"dp");
- 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),
- };
- if (!result.success)
- {
- result.deeplink_url = string.Empty;
- }
- _ = 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),
- };
- }
- if (!result.success)
- {
- result.deeplink_url = string.Empty;
- }
- _ = 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);
- }
- public static async Task<APIResult> DeeplinkPddParseAsync(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;
- result.parse_type = "dp";
- 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, "dp");
- 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);
- }
- }
- }
|