|
|
@@ -1,5 +1,6 @@
|
|
|
using dodohold.core;
|
|
|
using System.Text.Json;
|
|
|
+using Top.Api.Response;
|
|
|
|
|
|
|
|
|
namespace molilian.core
|
|
|
@@ -21,7 +22,7 @@ namespace molilian.core
|
|
|
}
|
|
|
|
|
|
|
|
|
- public async Task<APIResult> PromotionQueryAsync(string img, string oaid = "", string ip = "")
|
|
|
+ public async Task<APIResult> PromotionQueryAsync(string img, string oaid = "", string ip = "", bool recommand = true)
|
|
|
{
|
|
|
PromotionQueryDTO result = new()
|
|
|
{
|
|
|
@@ -30,6 +31,22 @@ namespace molilian.core
|
|
|
oaid = oaid,
|
|
|
img = img
|
|
|
};
|
|
|
+ if (string.IsNullOrEmpty(oaid))
|
|
|
+ {
|
|
|
+ result.success = false;
|
|
|
+ result.message = "调用失败";
|
|
|
+ result.reason = "无效OAID";
|
|
|
+ _ = TkLogCore.PromotionImgLogAsync(result);
|
|
|
+ return new APIResult(new
|
|
|
+ {
|
|
|
+ result.success,
|
|
|
+ result.message,
|
|
|
+ result.reason,
|
|
|
+ }, APIResultCodeEnum.OK, new JsonSerializerOptions
|
|
|
+ {
|
|
|
+ Encoder = System.Text.Encodings.Web.JavaScriptEncoder.UnsafeRelaxedJsonEscaping
|
|
|
+ });
|
|
|
+ }
|
|
|
|
|
|
if (string.IsNullOrEmpty(img))
|
|
|
{
|
|
|
@@ -67,63 +84,100 @@ namespace molilian.core
|
|
|
});
|
|
|
}
|
|
|
|
|
|
+
|
|
|
TaobaoOpenPlus taobao = new(account.appkey, account.appSecret, account.open_pid);
|
|
|
- var data = taobao.PromotionQueryRequest(img, oaid);
|
|
|
- if (data.IsError)
|
|
|
+ int timeout = _config.similar_timeout;
|
|
|
+#if DEBUG
|
|
|
+ timeout = 5000;
|
|
|
+#endif
|
|
|
+ using var cts = new CancellationTokenSource();
|
|
|
+ cts.CancelAfter(timeout);
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ DateTime stime = DateTime.Now;
|
|
|
+
|
|
|
+ var apiDelayTask = Task.Delay(500, cts.Token);
|
|
|
+ var apiRequestTask = Task.Run(() =>
|
|
|
{
|
|
|
- result.success = false;
|
|
|
- result.message = "调用失败";
|
|
|
- result.reason = data.ErrMsg;
|
|
|
- _ = TkLogCore.PromotionImgLogAsync(result);
|
|
|
- return new APIResult(new
|
|
|
- {
|
|
|
- result.success,
|
|
|
- result.message,
|
|
|
- result.reason,
|
|
|
- }, APIResultCodeEnum.OK, new JsonSerializerOptions
|
|
|
- {
|
|
|
- Encoder = System.Text.Encodings.Web.JavaScriptEncoder.UnsafeRelaxedJsonEscaping
|
|
|
- });
|
|
|
- }
|
|
|
- if (!"0".Equals(data.Status))
|
|
|
+ return taobao.PromotionQueryRequest(img, oaid);
|
|
|
+
|
|
|
+ }, cts.Token);
|
|
|
+
|
|
|
+ TbkThorMfrsPromotionQueryResponse data;
|
|
|
+ var apiCompletedTask = await Task.WhenAny(apiRequestTask, apiDelayTask);
|
|
|
+ if (apiCompletedTask == apiRequestTask)
|
|
|
{
|
|
|
- result.success = false;
|
|
|
- result.message = "调用失败";
|
|
|
- result.reason = data.Desc;
|
|
|
- _ = TkLogCore.PromotionImgLogAsync(result);
|
|
|
- return new APIResult(new
|
|
|
+ data = await apiRequestTask;
|
|
|
+ if (data.IsError)
|
|
|
{
|
|
|
- result.success,
|
|
|
- result.message,
|
|
|
- result.reason,
|
|
|
- }, APIResultCodeEnum.OK, new JsonSerializerOptions
|
|
|
+ result.success = false;
|
|
|
+ result.message = "调用失败";
|
|
|
+ result.reason = data.ErrMsg;
|
|
|
+ _ = TkLogCore.PromotionImgLogAsync(result);
|
|
|
+ return new APIResult(new
|
|
|
+ {
|
|
|
+ result.success,
|
|
|
+ result.message,
|
|
|
+ result.reason,
|
|
|
+ }, APIResultCodeEnum.OK, new JsonSerializerOptions
|
|
|
+ {
|
|
|
+ Encoder = System.Text.Encodings.Web.JavaScriptEncoder.UnsafeRelaxedJsonEscaping
|
|
|
+ });
|
|
|
+ }
|
|
|
+ if (!"0".Equals(data.Status))
|
|
|
{
|
|
|
- Encoder = System.Text.Encodings.Web.JavaScriptEncoder.UnsafeRelaxedJsonEscaping
|
|
|
- });
|
|
|
+ result.success = false;
|
|
|
+ result.message = "调用失败";
|
|
|
+ result.reason = data.Desc;
|
|
|
+ _ = TkLogCore.PromotionImgLogAsync(result);
|
|
|
+ return new APIResult(new
|
|
|
+ {
|
|
|
+ result.success,
|
|
|
+ result.message,
|
|
|
+ result.reason,
|
|
|
+ }, APIResultCodeEnum.OK, new JsonSerializerOptions
|
|
|
+ {
|
|
|
+ Encoder = System.Text.Encodings.Web.JavaScriptEncoder.UnsafeRelaxedJsonEscaping
|
|
|
+ });
|
|
|
+ }
|
|
|
}
|
|
|
- result.url = data.Url;
|
|
|
-
|
|
|
- oaid = data.Url.GetContentPart("oaid=", "&");
|
|
|
- string cookies = string.Empty;
|
|
|
|
|
|
+ var ts = DateTime.Now - stime;
|
|
|
+ result.elapsedTime2 = (int)ts.TotalMilliseconds;
|
|
|
|
|
|
|
|
|
- int timeout = _config.similar_timeout;
|
|
|
-#if DEBUG
|
|
|
- timeout = 5000;
|
|
|
-#endif
|
|
|
- using var cts = new CancellationTokenSource();
|
|
|
- cts.CancelAfter(timeout);
|
|
|
-
|
|
|
+ //result.url = data.Url;
|
|
|
+ result.url = $"https://mo.m.taobao.com/etao/search_pic_detail?appKey={account.appkey}&oaid={oaid}&pid={account.open_pid}";
|
|
|
|
|
|
+ string cookies = string.Empty;
|
|
|
var requestTask = Task.Run(async () =>
|
|
|
{
|
|
|
- (result.SimilarPromotion, cookies) = await taobao.GetRecommendDataWithRetry(TaobaoOpenPlus.RecommendRequestType.first, oaid, cookies, cts.Token);
|
|
|
- (result.PromotionImg, cookies) = await taobao.GetRecommendDataWithRetry(TaobaoOpenPlus.RecommendRequestType.ori, oaid, cookies, cts.Token);
|
|
|
- result.similarPromotion = result.SimilarPromotion.Convert2Json();
|
|
|
- result.promotionImg = result.PromotionImg.Convert2Json();
|
|
|
+ if (recommand)
|
|
|
+ {
|
|
|
+
|
|
|
+ var similarPromotionTask = taobao.GetRecommendDataWithRetry(TaobaoOpenPlus.RecommendRequestType.first, oaid, cookies, cts.Token);
|
|
|
+ var promotionImgTask = taobao.GetRecommendDataWithRetry(TaobaoOpenPlus.RecommendRequestType.ori, oaid, cookies, cts.Token);
|
|
|
+
|
|
|
+ await Task.WhenAll(similarPromotionTask, promotionImgTask);
|
|
|
+
|
|
|
+ (result.SimilarPromotion, cookies, result.elapsedTime3) = await similarPromotionTask;
|
|
|
+ (result.PromotionImg, cookies, result.elapsedTime4) = await promotionImgTask;
|
|
|
+ result.similarPromotion = result.SimilarPromotion.Convert2Json();
|
|
|
+ result.promotionImg = result.PromotionImg.Convert2Json();
|
|
|
+
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ //(result.SimilarPromotion, cookies) = await taobao.GetRecommendDataWithRetry(TaobaoOpenPlus.RecommendRequestType.first, oaid, cookies, cts.Token);
|
|
|
+ (result.PromotionImg, cookies, result.elapsedTime4) = await taobao.GetRecommendDataWithRetry(TaobaoOpenPlus.RecommendRequestType.ori, oaid, cookies, cts.Token);
|
|
|
+ result.similarPromotion = result.SimilarPromotion.Convert2Json();
|
|
|
+ result.promotionImg = result.PromotionImg.Convert2Json();
|
|
|
+ return result;
|
|
|
+ }
|
|
|
return result;
|
|
|
|
|
|
+
|
|
|
}, cts.Token);
|
|
|
|
|
|
var delayTask = Task.Delay(timeout, cts.Token);
|
|
|
@@ -191,85 +245,6 @@ namespace molilian.core
|
|
|
});
|
|
|
}
|
|
|
|
|
|
-
|
|
|
- //try
|
|
|
- //{
|
|
|
- // var account = TkPoolCore.GetOne(TkPoolCore.TkAction.promotionQuery);
|
|
|
- // if (account == null)
|
|
|
- // {
|
|
|
- // result.success = false;
|
|
|
- // result.message = "放弃转链";
|
|
|
- // result.reason = "没有匹配账号";
|
|
|
- // //_ = TkLogCore.CouponLogAsync(result);
|
|
|
- // return new APIResult(new
|
|
|
- // {
|
|
|
- // result.success,
|
|
|
- // message = "没有优惠券",
|
|
|
- // channel = result.channel.ToString(),
|
|
|
- // });
|
|
|
- // }
|
|
|
- // result.accountId = account.id;
|
|
|
- // result.accountName = account.name;
|
|
|
- // alimama = new AlimamaPlus(account);
|
|
|
- // result = await alimama.PromotionQueryAsync(result);
|
|
|
-
|
|
|
- // if (result.success && result.couponAmount == 0)
|
|
|
- // {
|
|
|
- // result.success = false;
|
|
|
- // result.message = "没有优惠券";
|
|
|
- // result.reason = "没有优惠券";
|
|
|
- // }
|
|
|
- //}
|
|
|
- //catch (Exception ex)
|
|
|
- //{
|
|
|
- // if (ex.Message.Contains("was canceled"))
|
|
|
- // {
|
|
|
- // result.success = false;
|
|
|
- // result.message = "放弃转链";
|
|
|
- // result.reason = "请求超时";
|
|
|
- // }
|
|
|
- // else
|
|
|
- // {
|
|
|
- // _ = new LoggerLibrary("unionCoupon", "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.message = "放弃转链";
|
|
|
- // result.reason = "转链接口异常";
|
|
|
- // }
|
|
|
- //}
|
|
|
- //_ = TkLogCore.CouponLogAsync(result, alimama);
|
|
|
- //if (!result.success)
|
|
|
- //{
|
|
|
- // return new APIResult(new
|
|
|
- // {
|
|
|
- // result.success,
|
|
|
- // message = "没有优惠券",
|
|
|
- // channel = result?.channel.ToString(),
|
|
|
- // });
|
|
|
- //}
|
|
|
- //int couponAmount = (int)result.couponAmount * 100;
|
|
|
-
|
|
|
- //return new APIResult(new
|
|
|
- //{
|
|
|
- // result.success,
|
|
|
- // result.message,
|
|
|
- // channel = result?.channel.ToString(),
|
|
|
- // result?.itemId,
|
|
|
- // result?.deeplink_url,
|
|
|
- // result?.pic,
|
|
|
- // result?.couponEffectiveStartTime,
|
|
|
- // result?.couponEffectiveEndTime,
|
|
|
- //});
|
|
|
}
|
|
|
|
|
|
}
|