UnionParseCore.cs 34 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863
  1. using Microsoft.AspNetCore.Http;
  2. using Microsoft.AspNetCore.Mvc.Controllers;
  3. using Microsoft.AspNetCore.Mvc.Filters;
  4. using System;
  5. using System.Collections.Generic;
  6. using System.Linq;
  7. using System.Text;
  8. using dodohold.core;
  9. using Spire.Pdf.Exporting.XPS.Schema;
  10. using System.Xml.Linq;
  11. using System.Net;
  12. using TencentCloud.Mrs.V20200910.Models;
  13. using Microsoft.AspNetCore.Mvc;
  14. using Microsoft.AspNetCore.Authentication;
  15. using Spire.Pdf.Graphics;
  16. using Google.Protobuf.WellKnownTypes;
  17. using TencentCloud.Tcm.V20210413.Models;
  18. using System.Diagnostics;
  19. using System.Threading;
  20. using TencentCloud.Soe.V20180724.Models;
  21. namespace molilian.core
  22. {
  23. public partial class UnionParseCore
  24. {
  25. public static async Task<ActionResult> UnionParseAsync(string content, string channel, string ip, string oaid, int accountid = 0)
  26. {
  27. return channel switch
  28. {
  29. "wemeet" => await WemeetParseAsync(content, ip, oaid),
  30. "bdpan" => PanParse(content, ip, oaid),
  31. "jd" => await JdParseAsync(content, ip, oaid),
  32. "dy" => await DyParseAsync(content, ip, oaid),
  33. _ => await TaobaoParseAsync(content, ip, oaid, accountid),
  34. };
  35. }
  36. public static async Task<APIResult> WemeetParseAsync(string content, string ip, string oaid)
  37. {
  38. var result = ToolParsePlus.GetFormattedObject(TkChannelEnum.wemeet, content, ip, oaid);
  39. content = content.UrlDecode();
  40. result.rawContent = content;
  41. try
  42. {
  43. result = await ToolParsePlus.WemeetParseAsync(content, result);
  44. }
  45. catch (Exception ex)
  46. {
  47. _ = new LoggerLibrary("unionParse", "wemeet_error")
  48. .Info(ip, oaid)
  49. .Info(content)
  50. .Info(ex.Message, ex.StackTrace)
  51. .SaveAsync();
  52. NotifyCore.Notify(new NifyMessage
  53. {
  54. message = $"【转链异常Wemeet】\n{content}\n\n{ex.Message}\n{ex.StackTrace}",
  55. priority = NifyMessagePriority.high,
  56. tags = ["red_circle"]
  57. });
  58. result.success = false;
  59. result.message = "内部错误";
  60. result.reason = "转链接口异常";
  61. }
  62. _ = TkLogCore.ParseLogAsync(result);
  63. return new APIResult(new
  64. {
  65. result.success,
  66. result.message,
  67. channel = result?.channel.ToString(),
  68. result.shortLinkurl,
  69. result.deeplink_url,
  70. result.itemName,
  71. });
  72. }
  73. public static APIResult PanParse(string content, string ip, string oaid)
  74. {
  75. var result = ToolParsePlus.GetFormattedObject(TkChannelEnum.bdpan, content, ip, oaid);
  76. content = content.UrlDecode();
  77. result.rawContent = content;
  78. try
  79. {
  80. ToolParsePlus.PanParse(content, ref result);
  81. }
  82. catch (Exception ex)
  83. {
  84. _ = new LoggerLibrary("unionParse", "pan_error")
  85. .Info(ip, oaid)
  86. .Info(content)
  87. .Info(ex.Message, ex.StackTrace)
  88. .SaveAsync();
  89. NotifyCore.Notify(new NifyMessage
  90. {
  91. message = $"【转链异常Pan】\n{content}\n\n{ex.Message}\n{ex.StackTrace}",
  92. priority = NifyMessagePriority.high,
  93. tags = ["red_circle"]
  94. });
  95. result.success = false;
  96. result.message = "内部错误";
  97. result.reason = "转链接口异常";
  98. }
  99. _ = TkLogCore.ParseLogAsync(result);
  100. return new APIResult(new
  101. {
  102. result.success,
  103. result.message,
  104. channel = result?.channel.ToString(),
  105. result.shortLinkurl,
  106. result.deeplink_url,
  107. result.itemName,
  108. }, result.success ? APIResultCodeEnum.OK : APIResultCodeEnum.NotAcceptable);
  109. }
  110. private static APIResult TaobaoParseOutput(TkDataDTO result, Dictionary<string, long> swData, object info, APIResultCodeEnum code = APIResultCodeEnum.OK)
  111. {
  112. if (result.elapsedTime > 2000)
  113. {
  114. LoggerLibrary log = new("debug", "stopwatch");
  115. foreach ((var key, var value) in swData)
  116. {
  117. log.Info($"{key}\t{value}");
  118. }
  119. log.SaveAsync();
  120. }
  121. return new APIResult(info, code);
  122. }
  123. public static async Task<APIResult> TaobaoParseAsync(string content,
  124. string ip = "", string oaid = "",
  125. int accountid = 0)
  126. {
  127. AlimamaPlus alimama = null;
  128. content = content.UrlDecode();
  129. content = content[..Math.Min(1000, content.Length)];
  130. var result = AlimamaPlus.GetFormattedObject(content, ip, oaid);
  131. Dictionary<string, long> swData = new();
  132. swData.Add("StartNew", 0);
  133. Stopwatch stopwatch = Stopwatch.StartNew();
  134. result.rawContent = content;
  135. try
  136. {
  137. string reason = string.Empty;
  138. //============================== 放弃转链-地区过滤 ==============================
  139. bool is_ignore2 = AlimamaPlus.ShouldIgnoreRequest(ip, oaid, out reason);
  140. if (is_ignore2)
  141. {
  142. result.success = false;
  143. result.message = "放弃转链";
  144. result.itemName = "点击打开淘宝APP";
  145. result.reason = reason;
  146. _ = TkLogCore.ParseLogAsync(result);
  147. return TaobaoParseOutput(result, swData, new
  148. {
  149. result.success,
  150. result.message,
  151. result.content,
  152. result.itemName,
  153. result.deeplink_url,
  154. });
  155. }
  156. //============================== 放弃转链-初步筛选 ==============================
  157. bool is_ignore = AlimamaPlus.FirstFilterIgnoreRequest(content, out reason);
  158. if (string.IsNullOrEmpty(result.shortLinkurl) && is_ignore)
  159. {
  160. //没有短链接都放弃
  161. result.success = false;
  162. result.message = "放弃转链";
  163. result.itemName = "点击打开淘宝APP";
  164. result.reason = "初步筛选";
  165. _ = TkLogCore.ParseLogAsync(result);
  166. return TaobaoParseOutput(result, swData, new
  167. {
  168. result.success,
  169. result.message,
  170. result.content,
  171. result.itemName,
  172. result.deeplink_url,
  173. });
  174. }
  175. //============================== 放弃转链-没有匹配账号 ==============================
  176. TkPoolDTO? account = accountid > 0 ?
  177. TkPoolCore.GetOne(accountid) :
  178. TkPoolCore.GetOne(TkPoolCore.TkAction.parse);
  179. if (account == null)
  180. {
  181. result.success = false;
  182. result.message = "放弃转链";
  183. result.reason = "没有匹配账号";
  184. result.itemName = "点击打开淘宝APP";
  185. _ = TkLogCore.ParseLogAsync(result);
  186. return TaobaoParseOutput(result, swData, new
  187. {
  188. result.success,
  189. result.message,
  190. result.content,
  191. result.couponAmount,
  192. result.taoToken,
  193. result.shortLinkurl,
  194. result.deeplink_url,
  195. });
  196. }
  197. result.accountId = account.id;
  198. alimama = new AlimamaPlus(account);
  199. result.accountName = account.company;
  200. int timeout = alimama._config.rt_max;
  201. using var cts = new CancellationTokenSource();
  202. cts.CancelAfter(timeout);
  203. var requestTask = Task.Run(() => alimama.UnionParse2Async(content, result, cts.Token, swData), cts.Token);
  204. var delayTask = Task.Delay(timeout, cts.Token);
  205. var completedTask = await Task.WhenAny(requestTask, delayTask);
  206. if (completedTask == requestTask)
  207. {
  208. result = await requestTask;
  209. }
  210. else
  211. {
  212. //============================== 放弃转链-请求超时 ==============================
  213. cts.Cancel();
  214. result.success = false;
  215. result.message = "放弃转链";
  216. result.reason = "请求超时";
  217. result.itemName = "点击打开淘宝APP";
  218. }
  219. result.accountName = account.company;
  220. //result = await alimama.UnionParse2Async(content, result);
  221. }
  222. catch (Exception ex)
  223. {
  224. //============================== 放弃转链-请求超时 ==============================
  225. if (ex.Message.Contains("was canceled"))
  226. {
  227. result.success = false;
  228. result.message = "放弃转链";
  229. result.reason = "请求超时";
  230. result.itemName = "点击打开淘宝APP";
  231. }
  232. else
  233. {
  234. //============================== 转链接口异常 ==============================
  235. _ = new LoggerLibrary("unionParse", "tb_error")
  236. .Info(ip, oaid)
  237. .Info(content)
  238. .Info(ex.Message, ex.StackTrace)
  239. .SaveAsync();
  240. NotifyCore.Notify(new NifyMessage
  241. {
  242. message = $"【转链异常TB】\n{content}\n\n{ex.Message}\n{ex.StackTrace}",
  243. priority = NifyMessagePriority.high,
  244. tags = ["red_circle"]
  245. });
  246. result.success = false;
  247. result.message = "转链接口异常";
  248. result.itemName = "点击打开淘宝APP";
  249. }
  250. }
  251. _ = TkLogCore.ParseLogAsync(result, alimama);
  252. return TaobaoParseOutput(result, swData, new
  253. {
  254. result.success,
  255. result.message,
  256. link_type = result.link_type.ToString(),
  257. channel = result?.channel.ToString(),
  258. result.channel_type,
  259. result.itemId,
  260. result.itemName,
  261. result.pic,
  262. result.promotionPrice,
  263. result.couponAmount,
  264. result.couponEffectiveStartTime,
  265. result?.couponEffectiveEndTime,
  266. result.shortLinkurl,
  267. result.deeplink_url,
  268. result.content,
  269. result.taoToken,
  270. });
  271. }
  272. public static async Task<APIResult> TaobaoParseAsync11(string content,
  273. string ip = "", string oaid = "",
  274. int accountid = 0)
  275. {
  276. AlimamaPlus alimama = null;
  277. content = content.UrlDecode();
  278. content = content[..Math.Min(1000, content.Length)];
  279. var result = AlimamaPlus.GetFormattedObject(content, ip, oaid);
  280. Dictionary<string, long> swData = new();
  281. swData.Add("StartNew", 0);
  282. Stopwatch stopwatch = Stopwatch.StartNew();
  283. result.rawContent = content;
  284. try
  285. {
  286. bool is_other = await AlimamaPlus.OtherPlatformAsync(content);
  287. stopwatch.Stop();
  288. swData.Add("OtherPlatform", stopwatch.ElapsedMilliseconds);
  289. if (is_other)
  290. {
  291. result.success = false;
  292. result.message = "放弃转链";
  293. result.reason = "平台错误";
  294. _ = TkLogCore.ParseLogAsync(result);
  295. return TaobaoParseOutput(result, swData, new
  296. {
  297. channel = result?.channel.ToString(),
  298. result.success,
  299. result.message,
  300. result.shortLinkurl,
  301. result.deeplink_url,
  302. }, APIResultCodeEnum.NotAcceptable);
  303. }
  304. stopwatch.Reset();
  305. stopwatch.Start();
  306. string reason = string.Empty;
  307. bool is_ignore = AlimamaPlus.FirstFilterIgnoreRequest(content, out reason);
  308. stopwatch.Stop();
  309. swData.Add("FirstFilterIgnoreRequest", stopwatch.ElapsedMilliseconds);
  310. if (string.IsNullOrEmpty(result.shortLinkurl) && is_ignore)
  311. {
  312. //没有短链接都放弃
  313. result.success = false;
  314. result.message = "放弃转链";
  315. result.itemName = "点击打开淘宝APP";
  316. result.reason = "初步筛选";
  317. _ = TkLogCore.ParseLogAsync(result);
  318. return TaobaoParseOutput(result, swData, new
  319. {
  320. result.success,
  321. result.message,
  322. result.content,
  323. result.itemName,
  324. result.deeplink_url,
  325. });
  326. }
  327. stopwatch.Reset();
  328. stopwatch.Start();
  329. bool is_ignore2 = AlimamaPlus.ShouldIgnoreRequest(ip, oaid, out reason);
  330. stopwatch.Stop();
  331. swData.Add("ShouldIgnoreRequest", stopwatch.ElapsedMilliseconds);
  332. #if DEBUG
  333. #else
  334. if (is_ignore2)
  335. {
  336. result.success = false;
  337. result.message = "放弃转链";
  338. result.itemName = "点击打开淘宝APP";
  339. result.reason = reason;
  340. _ = TkLogCore.ParseLogAsync(result);
  341. return TaobaoParseOutput(result, swData, new
  342. {
  343. result.success,
  344. result.message,
  345. result.content,
  346. result.itemName,
  347. result.deeplink_url,
  348. });
  349. }
  350. #endif
  351. stopwatch.Reset();
  352. stopwatch.Start();
  353. TkPoolDTO? account = accountid > 0 ?
  354. TkPoolCore.GetOne(accountid) :
  355. TkPoolCore.GetOne(TkPoolCore.TkAction.parse);
  356. stopwatch.Stop();
  357. swData.Add("GetOne", stopwatch.ElapsedMilliseconds);
  358. if (account == null)
  359. {
  360. result.success = false;
  361. result.message = "放弃转链";
  362. result.reason = "没有匹配账号";
  363. result.itemName = "点击打开淘宝APP";
  364. _ = TkLogCore.ParseLogAsync(result);
  365. return TaobaoParseOutput(result, swData, new
  366. {
  367. result.success,
  368. result.message,
  369. result.content,
  370. result.couponAmount,
  371. result.taoToken,
  372. result.shortLinkurl,
  373. result.deeplink_url,
  374. });
  375. }
  376. result.accountId = account.id;
  377. stopwatch.Reset();
  378. stopwatch.Start();
  379. alimama = new AlimamaPlus(account);
  380. result.accountName = account.company;
  381. stopwatch.Stop();
  382. swData.Add("AlimamaPlus", stopwatch.ElapsedMilliseconds);
  383. int timeout = alimama._config.rt_max;
  384. using var cts = new CancellationTokenSource();
  385. cts.CancelAfter(timeout);
  386. stopwatch.Reset();
  387. stopwatch.Start();
  388. var requestTask = Task.Run(() => alimama.UnionParse2Async(content, result, cts.Token, swData), cts.Token);
  389. var delayTask = Task.Delay(timeout, cts.Token);
  390. var completedTask = await Task.WhenAny(requestTask, delayTask);
  391. if (completedTask == requestTask)
  392. {
  393. result = await requestTask;
  394. }
  395. else
  396. {
  397. cts.Cancel();
  398. result.success = false;
  399. result.message = "放弃转链";
  400. result.reason = "请求超时";
  401. result.itemName = "点击打开淘宝APP";
  402. }
  403. stopwatch.Stop();
  404. swData.Add("UnionParse2Async", stopwatch.ElapsedMilliseconds);
  405. result.accountName = account.company;
  406. //result = await alimama.UnionParse2Async(content, result);
  407. }
  408. catch (Exception ex)
  409. {
  410. if (ex.Message.Contains("was canceled"))
  411. {
  412. result.success = false;
  413. result.message = "放弃转链";
  414. result.reason = "请求超时";
  415. result.itemName = "点击打开淘宝APP";
  416. }
  417. else
  418. {
  419. _ = new LoggerLibrary("unionParse", "tb_error")
  420. .Info(ip, oaid)
  421. .Info(content)
  422. .Info(ex.Message, ex.StackTrace)
  423. .SaveAsync();
  424. NotifyCore.Notify(new NifyMessage
  425. {
  426. message = $"【转链异常TB】\n{content}\n\n{ex.Message}\n{ex.StackTrace}",
  427. priority = NifyMessagePriority.high,
  428. tags = ["red_circle"]
  429. });
  430. result.success = false;
  431. result.message = "放弃转链";
  432. result.reason = "转链接口异常";
  433. result.itemName = "点击打开淘宝APP";
  434. }
  435. }
  436. _ = TkLogCore.ParseLogAsync(result, alimama);
  437. return TaobaoParseOutput(result, swData, new
  438. {
  439. result.success,
  440. result.message,
  441. link_type = result.link_type.ToString(),
  442. channel = result?.channel.ToString(),
  443. result.channel_type,
  444. result.itemId,
  445. result.itemName,
  446. result.pic,
  447. result.promotionPrice,
  448. result.couponAmount,
  449. result.couponEffectiveStartTime,
  450. result?.couponEffectiveEndTime,
  451. result.shortLinkurl,
  452. result.deeplink_url,
  453. result.content,
  454. result.taoToken,
  455. });
  456. }
  457. public static async Task<APIResult> TaobaoParseAsync222(string content,
  458. string ip = "", string oaid = "")
  459. {
  460. AlimamaPlus alimama = null;
  461. content = content.UrlDecode();
  462. content = content[..Math.Min(1000, content.Length)];
  463. var result = AlimamaPlus.GetFormattedObject(content, ip, oaid);
  464. LoggerLibrary log = new("debug", "stopwatch");
  465. log.Info($"StartNew", content);
  466. Stopwatch stopwatch = Stopwatch.StartNew();
  467. result.rawContent = content;
  468. try
  469. {
  470. bool is_other = await AlimamaPlus.OtherPlatformAsync(content);
  471. stopwatch.Stop();
  472. log.Info($"AlimamaPlus.OtherPlatform\t{stopwatch.ElapsedMilliseconds}");
  473. if (is_other)
  474. {
  475. result.success = false;
  476. result.message = "放弃转链";
  477. result.reason = "平台错误";
  478. _ = TkLogCore.ParseLogAsync(result);
  479. return new APIResult(new
  480. {
  481. channel = result?.channel.ToString(),
  482. result.success,
  483. result.message,
  484. result.shortLinkurl,
  485. result.deeplink_url,
  486. }, APIResultCodeEnum.NotAcceptable);
  487. }
  488. string reason = string.Empty;
  489. if (string.IsNullOrEmpty(result.shortLinkurl) && AlimamaPlus.FirstFilterIgnoreRequest(content, out reason))
  490. {
  491. //没有短链接都放弃
  492. result.success = false;
  493. result.message = "放弃转链";
  494. result.itemName = "点击打开淘宝APP";
  495. result.reason = "初步筛选";
  496. _ = TkLogCore.ParseLogAsync(result);
  497. return new APIResult(new
  498. {
  499. result.success,
  500. result.message,
  501. result.content,
  502. result.itemName,
  503. result.deeplink_url,
  504. });
  505. }
  506. if (AlimamaPlus.ShouldIgnoreRequest(ip, oaid, out reason))
  507. {
  508. result.success = false;
  509. result.message = "放弃转链";
  510. result.itemName = "点击打开淘宝APP";
  511. result.reason = reason;
  512. _ = TkLogCore.ParseLogAsync(result);
  513. return new APIResult(new
  514. {
  515. result.success,
  516. result.message,
  517. result.content,
  518. result.itemName,
  519. result.deeplink_url,
  520. });
  521. }
  522. var account = TkPoolCore.GetOne(TkPoolCore.TkAction.parse);
  523. if (account == null)
  524. {
  525. result.success = false;
  526. result.message = "放弃转链";
  527. result.reason = "没有匹配账号";
  528. result.itemName = "点击打开淘宝APP";
  529. _ = TkLogCore.ParseLogAsync(result);
  530. return new APIResult(new
  531. {
  532. result.success,
  533. result.message,
  534. result.content,
  535. result.couponAmount,
  536. result.taoToken,
  537. result.shortLinkurl,
  538. result.deeplink_url,
  539. });
  540. }
  541. result.accountId = account.id;
  542. alimama = new AlimamaPlus(account);
  543. int timeout = alimama._config.rt_max;
  544. using var cts = new CancellationTokenSource();
  545. cts.CancelAfter(timeout);
  546. var requestTask = Task.Run(() => alimama.UnionParse2Async(content, result, cts.Token), cts.Token);
  547. var delayTask = Task.Delay(timeout, cts.Token);
  548. var completedTask = await Task.WhenAny(requestTask, delayTask);
  549. if (completedTask == requestTask)
  550. {
  551. result = await requestTask;
  552. }
  553. else
  554. {
  555. cts.Cancel();
  556. result.success = false;
  557. result.message = "放弃转链";
  558. result.reason = "请求超时";
  559. result.itemName = "点击打开淘宝APP";
  560. }
  561. //result = await alimama.UnionParse2Async(content, result);
  562. result.accountName = account.company;
  563. }
  564. catch (Exception ex)
  565. {
  566. if (ex.Message.Contains("was canceled"))
  567. {
  568. result.success = false;
  569. result.message = "放弃转链";
  570. result.reason = "请求超时";
  571. result.itemName = "点击打开淘宝APP";
  572. }
  573. else
  574. {
  575. _ = new LoggerLibrary("unionParse", "tb_error")
  576. .Info(ip, oaid)
  577. .Info(content)
  578. .Info(ex.Message, ex.StackTrace)
  579. .SaveAsync();
  580. NotifyCore.Notify(new NifyMessage
  581. {
  582. message = $"【转链异常TB】\n{content}\n\n{ex.Message}\n{ex.StackTrace}",
  583. priority = NifyMessagePriority.high,
  584. tags = ["red_circle"]
  585. });
  586. result.success = false;
  587. result.message = "放弃转链";
  588. result.reason = "转链接口异常";
  589. result.itemName = "点击打开淘宝APP";
  590. }
  591. }
  592. _ = TkLogCore.ParseLogAsync(result, alimama);
  593. return new APIResult(new
  594. {
  595. result.success,
  596. result.message,
  597. link_type = result.link_type.ToString(),
  598. channel = result?.channel.ToString(),
  599. result.channel_type,
  600. result.itemId,
  601. result.itemName,
  602. result.pic,
  603. result.promotionPrice,
  604. result.couponAmount,
  605. result.couponEffectiveStartTime,
  606. result?.couponEffectiveEndTime,
  607. result.shortLinkurl,
  608. result.deeplink_url,
  609. result.content,
  610. result.taoToken,
  611. });
  612. }
  613. //public static TkDataDTO testTaobaoParseAsync(string content, string ip = "", string oaid = "")
  614. //{
  615. // var result = AlimamaPlus.GetFormattedObject(content, ip, oaid);
  616. // content = content.UrlDecode();
  617. // content = content[..Math.Min(1000, content.Length)];
  618. // result.rawContent = content;
  619. // try
  620. // {
  621. // if (AlimamaPlus.OtherPlatform(content))
  622. // {
  623. // result.success = false;
  624. // result.message = "放弃转链";
  625. // result.reason = "平台错误";
  626. // return result;
  627. // }
  628. // string reason = string.Empty;
  629. // if (string.IsNullOrEmpty(result.shortLinkurl) && AlimamaPlus.FirstFilterIgnoreRequest(content, out reason))
  630. // {
  631. // //没有短链接都放弃
  632. // result.success = false;
  633. // result.message = "放弃转链";
  634. // result.itemName = "点击打开淘宝APP";
  635. // result.reason = "初步筛选";
  636. // return result;
  637. // }
  638. // if (AlimamaPlus.ShouldIgnoreRequest(ip, oaid, out reason))
  639. // {
  640. // result.success = false;
  641. // result.message = "放弃转链";
  642. // result.itemName = "点击打开淘宝APP";
  643. // result.reason = reason;
  644. // return result;
  645. // }
  646. // result.success = true;
  647. // return result;
  648. // }
  649. // catch (Exception ex)
  650. // {
  651. // result.success = false;
  652. // return result;
  653. // }
  654. //}
  655. public static async Task<APIResult> JdParseAsync(string content, string ip, string oaid, CancellationToken cancellationToken = default)
  656. {
  657. var result = JdUnionPlus.GetFormattedObject(content, ip, oaid);
  658. content = content.UrlDecode();
  659. result.rawContent = content;
  660. bool IfExceptional = false;
  661. try
  662. {
  663. if (JdUnionPlus.ShouldIgnoreRequest(ip, oaid, out string reason))
  664. {
  665. result.success = false;
  666. result.message = "放弃转链";
  667. result.reason = reason;
  668. _ = TkLogCore.ParseLogAsync(result);
  669. return new APIResult(result);
  670. }
  671. var account = JdPoolCore.GetOne();
  672. if (account == null)
  673. {
  674. result.success = false;
  675. result.message = "放弃转链";
  676. result.reason = "没有匹配账号";
  677. _ = TkLogCore.ParseLogAsync(result);
  678. return new APIResult(result);
  679. }
  680. result = await JdUnionPlus.JdParseAsync(account, content, result, cancellationToken);
  681. }
  682. catch (Exception ex)
  683. {
  684. if (ex.Message.Contains("was canceled"))
  685. {
  686. result.success = false;
  687. result.message = "放弃转链";
  688. result.reason = "请求超时";
  689. }
  690. else
  691. {
  692. IfExceptional = true;
  693. _ = new LoggerLibrary("unionParse", "jd_error")
  694. .Info(ip, oaid)
  695. .Info(content)
  696. .Info(ex.Message, ex.StackTrace)
  697. .SaveAsync();
  698. NotifyCore.Notify(new NifyMessage
  699. {
  700. message = $"【转链异常JD】\n{content}\n\n{ex.Message}\n{ex.StackTrace}",
  701. priority = NifyMessagePriority.high,
  702. tags = ["red_circle"]
  703. });
  704. result.success = false;
  705. result.message = "内部错误";
  706. result.reason = "转链接口异常";
  707. }
  708. }
  709. _ = TkLogCore.ParseLogAsync(result);
  710. return new APIResult(new
  711. {
  712. result.success,
  713. result.message,
  714. link_type = result.link_type.ToString(),
  715. channel = result?.channel.ToString(),
  716. result.channel_type,
  717. result.itemId,
  718. result.itemName,
  719. result.shortLinkurl,
  720. result.deeplink_url,
  721. }, IfExceptional ? APIResultCodeEnum.NotAcceptable : APIResultCodeEnum.OK);
  722. }
  723. public static async Task<APIResult> DyParseAsync(string content, string ip, string oaid, CancellationToken cancellationToken = default)
  724. {
  725. var result = DyUnionPlus.GetFormattedObject(content, ip, oaid);
  726. content = content.UrlDecode();
  727. result.rawContent = content;
  728. bool IfExceptional = false;
  729. try
  730. {
  731. // 2024-06-19 联盟业务下线
  732. result.success = false;
  733. result.message = "放弃转链";
  734. result.reason = "联盟下线";
  735. _ = TkLogCore.ParseLogAsync(result);
  736. return new APIResult(result);
  737. if (DyUnionPlus.ShouldIgnoreRequest(ip, oaid, out string reason))
  738. {
  739. result.success = false;
  740. result.message = "放弃转链";
  741. result.reason = reason;
  742. _ = TkLogCore.ParseLogAsync(result);
  743. return new APIResult(result);
  744. }
  745. var account = PangolinPoolCore.GetOne();
  746. if (account == null)
  747. {
  748. result.success = false;
  749. result.message = "放弃转链";
  750. result.reason = "没有匹配账号";
  751. _ = TkLogCore.ParseLogAsync(result);
  752. return new APIResult(result);
  753. }
  754. result = await DyUnionPlus.DyParseAsync(account, content, result, cancellationToken);
  755. }
  756. catch (Exception ex)
  757. {
  758. if (ex.Message.Contains("was canceled"))
  759. {
  760. result.success = false;
  761. result.message = "放弃转链";
  762. result.reason = "请求超时";
  763. }
  764. else
  765. {
  766. IfExceptional = true;
  767. _ = new LoggerLibrary("unionParse", "dy_error")
  768. .Info(ip, oaid)
  769. .Info(content)
  770. .Info(ex.Message, ex.StackTrace)
  771. .SaveAsync();
  772. NotifyCore.Notify(new NifyMessage
  773. {
  774. message = $"【转链异常DY】\n{content}\n\n{ex.Message}\n{ex.StackTrace}",
  775. priority = NifyMessagePriority.high,
  776. tags = ["red_circle"]
  777. });
  778. result.success = false;
  779. result.message = "内部错误";
  780. result.reason = "转链接口异常";
  781. }
  782. }
  783. _ = TkLogCore.ParseLogAsync(result);
  784. return new APIResult(new
  785. {
  786. result.success,
  787. result.message,
  788. link_type = result.link_type.ToString(),
  789. channel = result?.channel.ToString(),
  790. content = result?.rawContent.ToString(),
  791. taoToken = result?.taoToken.ToString(),
  792. result.channel_type,
  793. result.itemName,
  794. result.shortLinkurl,
  795. result.deeplink_url,
  796. }, IfExceptional ? APIResultCodeEnum.NotAcceptable : APIResultCodeEnum.OK);
  797. }
  798. }
  799. }