UnionParseCore.cs 27 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695
  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" => WemeetParse(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 APIResult WemeetParse(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. ToolParsePlus.WemeetParse(content, ref 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. }, result.success ? APIResultCodeEnum.OK : APIResultCodeEnum.NotAcceptable);
  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. bool is_other = AlimamaPlus.OtherPlatform(content);
  138. stopwatch.Stop();
  139. swData.Add("OtherPlatform", stopwatch.ElapsedMilliseconds);
  140. if (is_other)
  141. {
  142. result.success = false;
  143. result.message = "放弃转链";
  144. result.reason = "平台错误";
  145. _ = TkLogCore.ParseLogAsync(result);
  146. return TaobaoParseOutput(result, swData, new
  147. {
  148. channel = result?.channel.ToString(),
  149. result.success,
  150. result.message,
  151. result.shortLinkurl,
  152. result.deeplink_url,
  153. }, APIResultCodeEnum.NotAcceptable);
  154. }
  155. stopwatch.Reset();
  156. stopwatch.Start();
  157. string reason = string.Empty;
  158. bool is_ignore = AlimamaPlus.FirstFilterIgnoreRequest(content, out reason);
  159. stopwatch.Stop();
  160. swData.Add("FirstFilterIgnoreRequest", stopwatch.ElapsedMilliseconds);
  161. if (string.IsNullOrEmpty(result.shortLinkurl) && is_ignore)
  162. {
  163. //没有短链接都放弃
  164. result.success = false;
  165. result.message = "放弃转链";
  166. result.itemName = "点击打开淘宝APP";
  167. result.reason = "初步筛选";
  168. _ = TkLogCore.ParseLogAsync(result);
  169. return TaobaoParseOutput(result, swData, new
  170. {
  171. result.success,
  172. result.message,
  173. result.content,
  174. result.itemName,
  175. result.deeplink_url,
  176. });
  177. }
  178. stopwatch.Reset();
  179. stopwatch.Start();
  180. bool is_ignore2 = AlimamaPlus.ShouldIgnoreRequest(ip, oaid, out reason);
  181. stopwatch.Stop();
  182. swData.Add("ShouldIgnoreRequest", stopwatch.ElapsedMilliseconds);
  183. if (is_ignore2)
  184. {
  185. result.success = false;
  186. result.message = "放弃转链";
  187. result.itemName = "点击打开淘宝APP";
  188. result.reason = reason;
  189. _ = TkLogCore.ParseLogAsync(result);
  190. return TaobaoParseOutput(result, swData, new
  191. {
  192. result.success,
  193. result.message,
  194. result.content,
  195. result.itemName,
  196. result.deeplink_url,
  197. });
  198. }
  199. stopwatch.Reset();
  200. stopwatch.Start();
  201. TkPoolDTO? account = accountid > 0 ?
  202. TkPoolCore.GetOne(accountid) :
  203. TkPoolCore.GetOne(TkPoolCore.TkAction.parse);
  204. stopwatch.Stop();
  205. swData.Add("GetOne", stopwatch.ElapsedMilliseconds);
  206. if (account == null)
  207. {
  208. result.success = false;
  209. result.message = "放弃转链";
  210. result.reason = "没有匹配账号";
  211. result.itemName = "点击打开淘宝APP";
  212. _ = TkLogCore.ParseLogAsync(result);
  213. return TaobaoParseOutput(result, swData, new
  214. {
  215. result.success,
  216. result.message,
  217. result.content,
  218. result.couponAmount,
  219. result.taoToken,
  220. result.shortLinkurl,
  221. result.deeplink_url,
  222. });
  223. }
  224. result.accountId = account.id;
  225. stopwatch.Reset();
  226. stopwatch.Start();
  227. alimama = new AlimamaPlus(account);
  228. stopwatch.Stop();
  229. swData.Add("AlimamaPlus", stopwatch.ElapsedMilliseconds);
  230. int timeout = alimama._config.rt_max - result.elapsedTime2;
  231. using var cts = new CancellationTokenSource();
  232. cts.CancelAfter(timeout);
  233. stopwatch.Reset();
  234. stopwatch.Start();
  235. var requestTask = alimama.UnionParse2Async(content, result, cts.Token, swData);
  236. var delayTask = Task.Delay(timeout, cts.Token);
  237. var completedTask = await Task.WhenAny(requestTask, delayTask);
  238. if (completedTask == requestTask)
  239. {
  240. result = await requestTask;
  241. }
  242. else
  243. {
  244. cts.Cancel();
  245. result.success = false;
  246. result.message = "放弃转链";
  247. result.reason = "请求超时";
  248. result.itemName = "点击打开淘宝APP";
  249. }
  250. stopwatch.Stop();
  251. swData.Add("UnionParse2Async", stopwatch.ElapsedMilliseconds);
  252. //result = await alimama.UnionParse2Async(content, result);
  253. result.accountName = account.company;
  254. }
  255. catch (Exception ex)
  256. {
  257. if (ex.Message.Contains("was canceled"))
  258. {
  259. result.success = false;
  260. result.message = "放弃转链";
  261. result.reason = "请求超时";
  262. result.itemName = "点击打开淘宝APP";
  263. }
  264. else
  265. {
  266. _ = new LoggerLibrary("unionParse", "tb_error")
  267. .Info(ip, oaid)
  268. .Info(content)
  269. .Info(ex.Message, ex.StackTrace)
  270. .SaveAsync();
  271. NotifyCore.Notify(new NifyMessage
  272. {
  273. message = $"【转链异常TB】\n{content}\n\n{ex.Message}\n{ex.StackTrace}",
  274. priority = NifyMessagePriority.high,
  275. tags = ["red_circle"]
  276. });
  277. result.success = false;
  278. result.message = "放弃转链";
  279. result.reason = "转链接口异常";
  280. result.itemName = "点击打开淘宝APP";
  281. }
  282. }
  283. _ = TkLogCore.ParseLogAsync(result, alimama);
  284. return TaobaoParseOutput(result, swData, new
  285. {
  286. result.success,
  287. result.message,
  288. link_type = result.link_type.ToString(),
  289. channel = result?.channel.ToString(),
  290. result.channel_type,
  291. result.itemId,
  292. result.itemName,
  293. result.pic,
  294. result.promotionPrice,
  295. result.couponAmount,
  296. result.couponEffectiveStartTime,
  297. result?.couponEffectiveEndTime,
  298. result.shortLinkurl,
  299. result.deeplink_url,
  300. result.content,
  301. result.taoToken,
  302. });
  303. }
  304. public static async Task<APIResult> TaobaoParseAsync222(string content, string ip = "", string oaid = "")
  305. {
  306. AlimamaPlus alimama = null;
  307. content = content.UrlDecode();
  308. content = content[..Math.Min(1000, content.Length)];
  309. var result = AlimamaPlus.GetFormattedObject(content, ip, oaid);
  310. LoggerLibrary log = new("debug", "stopwatch");
  311. log.Info($"StartNew", content);
  312. Stopwatch stopwatch = Stopwatch.StartNew();
  313. result.rawContent = content;
  314. try
  315. {
  316. bool is_other = AlimamaPlus.OtherPlatform(content);
  317. stopwatch.Stop();
  318. log.Info($"AlimamaPlus.OtherPlatform\t{stopwatch.ElapsedMilliseconds}");
  319. if (is_other)
  320. {
  321. result.success = false;
  322. result.message = "放弃转链";
  323. result.reason = "平台错误";
  324. _ = TkLogCore.ParseLogAsync(result);
  325. return new APIResult(new
  326. {
  327. channel = result?.channel.ToString(),
  328. result.success,
  329. result.message,
  330. result.shortLinkurl,
  331. result.deeplink_url,
  332. }, APIResultCodeEnum.NotAcceptable);
  333. }
  334. string reason = string.Empty;
  335. if (string.IsNullOrEmpty(result.shortLinkurl) && AlimamaPlus.FirstFilterIgnoreRequest(content, out reason))
  336. {
  337. //没有短链接都放弃
  338. result.success = false;
  339. result.message = "放弃转链";
  340. result.itemName = "点击打开淘宝APP";
  341. result.reason = "初步筛选";
  342. _ = TkLogCore.ParseLogAsync(result);
  343. return new APIResult(new
  344. {
  345. result.success,
  346. result.message,
  347. result.content,
  348. result.itemName,
  349. result.deeplink_url,
  350. });
  351. }
  352. if (AlimamaPlus.ShouldIgnoreRequest(ip, oaid, out reason))
  353. {
  354. result.success = false;
  355. result.message = "放弃转链";
  356. result.itemName = "点击打开淘宝APP";
  357. result.reason = reason;
  358. _ = TkLogCore.ParseLogAsync(result);
  359. return new APIResult(new
  360. {
  361. result.success,
  362. result.message,
  363. result.content,
  364. result.itemName,
  365. result.deeplink_url,
  366. });
  367. }
  368. var account = TkPoolCore.GetOne(TkPoolCore.TkAction.parse);
  369. if (account == null)
  370. {
  371. result.success = false;
  372. result.message = "放弃转链";
  373. result.reason = "没有匹配账号";
  374. result.itemName = "点击打开淘宝APP";
  375. _ = TkLogCore.ParseLogAsync(result);
  376. return new APIResult(new
  377. {
  378. result.success,
  379. result.message,
  380. result.content,
  381. result.couponAmount,
  382. result.taoToken,
  383. result.shortLinkurl,
  384. result.deeplink_url,
  385. });
  386. }
  387. result.accountId = account.id;
  388. alimama = new AlimamaPlus(account);
  389. int timeout = alimama._config.rt_max;
  390. using var cts = new CancellationTokenSource();
  391. cts.CancelAfter(timeout);
  392. var requestTask = alimama.UnionParse2Async(content, result, cts.Token);
  393. var delayTask = Task.Delay(timeout, cts.Token);
  394. var completedTask = await Task.WhenAny(requestTask, delayTask);
  395. if (completedTask == requestTask)
  396. {
  397. result = await requestTask;
  398. }
  399. else
  400. {
  401. cts.Cancel();
  402. result.success = false;
  403. result.message = "放弃转链";
  404. result.reason = "请求超时";
  405. result.itemName = "点击打开淘宝APP";
  406. }
  407. //result = await alimama.UnionParse2Async(content, result);
  408. result.accountName = account.company;
  409. }
  410. catch (Exception ex)
  411. {
  412. if (ex.Message.Contains("was canceled"))
  413. {
  414. result.success = false;
  415. result.message = "放弃转链";
  416. result.reason = "请求超时";
  417. result.itemName = "点击打开淘宝APP";
  418. }
  419. else
  420. {
  421. _ = new LoggerLibrary("unionParse", "tb_error")
  422. .Info(ip, oaid)
  423. .Info(content)
  424. .Info(ex.Message, ex.StackTrace)
  425. .SaveAsync();
  426. NotifyCore.Notify(new NifyMessage
  427. {
  428. message = $"【转链异常TB】\n{content}\n\n{ex.Message}\n{ex.StackTrace}",
  429. priority = NifyMessagePriority.high,
  430. tags = ["red_circle"]
  431. });
  432. result.success = false;
  433. result.message = "放弃转链";
  434. result.reason = "转链接口异常";
  435. result.itemName = "点击打开淘宝APP";
  436. }
  437. }
  438. _ = TkLogCore.ParseLogAsync(result, alimama);
  439. return new APIResult(new
  440. {
  441. result.success,
  442. result.message,
  443. link_type = result.link_type.ToString(),
  444. channel = result?.channel.ToString(),
  445. result.channel_type,
  446. result.itemId,
  447. result.itemName,
  448. result.pic,
  449. result.promotionPrice,
  450. result.couponAmount,
  451. result.couponEffectiveStartTime,
  452. result?.couponEffectiveEndTime,
  453. result.shortLinkurl,
  454. result.deeplink_url,
  455. result.content,
  456. result.taoToken,
  457. });
  458. }
  459. //public static TkDataDTO testTaobaoParseAsync(string content, string ip = "", string oaid = "")
  460. //{
  461. // var result = AlimamaPlus.GetFormattedObject(content, ip, oaid);
  462. // content = content.UrlDecode();
  463. // content = content[..Math.Min(1000, content.Length)];
  464. // result.rawContent = content;
  465. // try
  466. // {
  467. // if (AlimamaPlus.OtherPlatform(content))
  468. // {
  469. // result.success = false;
  470. // result.message = "放弃转链";
  471. // result.reason = "平台错误";
  472. // return result;
  473. // }
  474. // string reason = string.Empty;
  475. // if (string.IsNullOrEmpty(result.shortLinkurl) && AlimamaPlus.FirstFilterIgnoreRequest(content, out reason))
  476. // {
  477. // //没有短链接都放弃
  478. // result.success = false;
  479. // result.message = "放弃转链";
  480. // result.itemName = "点击打开淘宝APP";
  481. // result.reason = "初步筛选";
  482. // return result;
  483. // }
  484. // if (AlimamaPlus.ShouldIgnoreRequest(ip, oaid, out reason))
  485. // {
  486. // result.success = false;
  487. // result.message = "放弃转链";
  488. // result.itemName = "点击打开淘宝APP";
  489. // result.reason = reason;
  490. // return result;
  491. // }
  492. // result.success = true;
  493. // return result;
  494. // }
  495. // catch (Exception ex)
  496. // {
  497. // result.success = false;
  498. // return result;
  499. // }
  500. //}
  501. public static async Task<APIResult> JdParseAsync(string content, string ip, string oaid, CancellationToken cancellationToken = default)
  502. {
  503. var result = JdUnionPlus.GetFormattedObject(content, ip, oaid);
  504. content = content.UrlDecode();
  505. result.rawContent = content;
  506. bool IfExceptional = false;
  507. try
  508. {
  509. if (JdUnionPlus.ShouldIgnoreRequest(ip, oaid, out string reason))
  510. {
  511. result.success = false;
  512. result.message = "放弃转链";
  513. result.reason = reason;
  514. _ = TkLogCore.ParseLogAsync(result);
  515. return new APIResult(result);
  516. }
  517. var account = JdPoolCore.GetOne();
  518. if (account == null)
  519. {
  520. result.success = false;
  521. result.message = "放弃转链";
  522. result.reason = "没有匹配账号";
  523. _ = TkLogCore.ParseLogAsync(result);
  524. return new APIResult(result);
  525. }
  526. result = await JdUnionPlus.JdParseAsync(account, content, result, cancellationToken);
  527. }
  528. catch (Exception ex)
  529. {
  530. if (ex.Message.Contains("was canceled"))
  531. {
  532. result.success = false;
  533. result.message = "放弃转链";
  534. result.reason = "请求超时";
  535. }
  536. else
  537. {
  538. IfExceptional = true;
  539. _ = new LoggerLibrary("unionParse", "jd_error")
  540. .Info(ip, oaid)
  541. .Info(content)
  542. .Info(ex.Message, ex.StackTrace)
  543. .SaveAsync();
  544. NotifyCore.Notify(new NifyMessage
  545. {
  546. message = $"【转链异常JD】\n{content}\n\n{ex.Message}\n{ex.StackTrace}",
  547. priority = NifyMessagePriority.high,
  548. tags = ["red_circle"]
  549. });
  550. result.success = false;
  551. result.message = "内部错误";
  552. result.reason = "转链接口异常";
  553. }
  554. }
  555. _ = TkLogCore.ParseLogAsync(result);
  556. return new APIResult(new
  557. {
  558. result.success,
  559. result.message,
  560. link_type = result.link_type.ToString(),
  561. channel = result?.channel.ToString(),
  562. result.channel_type,
  563. result.itemId,
  564. result.itemName,
  565. result.shortLinkurl,
  566. result.deeplink_url,
  567. }, IfExceptional ? APIResultCodeEnum.NotAcceptable : APIResultCodeEnum.OK);
  568. }
  569. public static async Task<APIResult> DyParseAsync(string content, string ip, string oaid, CancellationToken cancellationToken = default)
  570. {
  571. var result = DyUnionPlus.GetFormattedObject(content, ip, oaid);
  572. content = content.UrlDecode();
  573. result.rawContent = content;
  574. bool IfExceptional = false;
  575. try
  576. {
  577. // 2024-06-19 联盟业务下线
  578. result.success = false;
  579. result.message = "放弃转链";
  580. result.reason = "联盟下线";
  581. _ = TkLogCore.ParseLogAsync(result);
  582. return new APIResult(result);
  583. if (DyUnionPlus.ShouldIgnoreRequest(ip, oaid, out string reason))
  584. {
  585. result.success = false;
  586. result.message = "放弃转链";
  587. result.reason = reason;
  588. _ = TkLogCore.ParseLogAsync(result);
  589. return new APIResult(result);
  590. }
  591. var account = PangolinPoolCore.GetOne();
  592. if (account == null)
  593. {
  594. result.success = false;
  595. result.message = "放弃转链";
  596. result.reason = "没有匹配账号";
  597. _ = TkLogCore.ParseLogAsync(result);
  598. return new APIResult(result);
  599. }
  600. result = await DyUnionPlus.DyParseAsync(account, content, result, cancellationToken);
  601. }
  602. catch (Exception ex)
  603. {
  604. if (ex.Message.Contains("was canceled"))
  605. {
  606. result.success = false;
  607. result.message = "放弃转链";
  608. result.reason = "请求超时";
  609. }
  610. else
  611. {
  612. IfExceptional = true;
  613. _ = new LoggerLibrary("unionParse", "dy_error")
  614. .Info(ip, oaid)
  615. .Info(content)
  616. .Info(ex.Message, ex.StackTrace)
  617. .SaveAsync();
  618. NotifyCore.Notify(new NifyMessage
  619. {
  620. message = $"【转链异常DY】\n{content}\n\n{ex.Message}\n{ex.StackTrace}",
  621. priority = NifyMessagePriority.high,
  622. tags = ["red_circle"]
  623. });
  624. result.success = false;
  625. result.message = "内部错误";
  626. result.reason = "转链接口异常";
  627. }
  628. }
  629. _ = TkLogCore.ParseLogAsync(result);
  630. return new APIResult(new
  631. {
  632. result.success,
  633. result.message,
  634. link_type = result.link_type.ToString(),
  635. channel = result?.channel.ToString(),
  636. content = result?.rawContent.ToString(),
  637. taoToken = result?.taoToken.ToString(),
  638. result.channel_type,
  639. result.itemName,
  640. result.shortLinkurl,
  641. result.deeplink_url,
  642. }, IfExceptional ? APIResultCodeEnum.NotAcceptable : APIResultCodeEnum.OK);
  643. }
  644. }
  645. }