Parcourir la source

腾讯会议更换接口减少网络流量;

dodo hold il y a 2 ans
Parent
commit
7141be29f8

+ 40 - 1
molilian.api/Controllers/public/TestController.cs

@@ -5,6 +5,7 @@ using Org.BouncyCastle.Ocsp;
 using System.Text.Json;
 using System.Runtime.InteropServices;
 using System.Net;
+using System.Threading;
 
 namespace molilian.api.Controllers
 {
@@ -31,6 +32,45 @@ namespace molilian.api.Controllers
                 message = result
             });
         }
+        [HttpGet]
+        public async Task<ActionResult> testTask()
+        {
+            string url = "https://www.taobao.com";
+            TkDataDTO result = new TkDataDTO();
+            WebClientUtility client = new WebClientUtility();
+            client.Timeout = TimeSpan.FromMilliseconds(100);
+
+
+            using var cts = new CancellationTokenSource();
+            cts.CancelAfter(1000);
+
+
+
+            //var requestTask = alimama.UnionParse2Async(content, result, cts.Token, swData);
+            //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.itemName = "点击打开淘宝APP";
+            //}
+
+
+
+            return new APIResult(new
+            {
+                success = true,
+                message = "ok"
+            });
+        }
+
         [HttpPost]
         public async Task<ActionResult> test1([FromBody] JsonElement form)
         {
@@ -84,7 +124,6 @@ namespace molilian.api.Controllers
             // 检查文件是否为空
             if (file == null || file.Length == 0) throw new APIException("无效文件");
 
-
             using MemoryStream stream = new();
             file.CopyTo(stream);
             var bytes = stream.ToArray();

Fichier diff supprimé car celui-ci est trop grand
+ 0 - 0
molilian.api/Properties/PublishProfiles/https___ccr.ccs.tencentyun.com_shaobin.pubxml.user


+ 8 - 7
molilian.core/Core/taoke/TkLogCore.cs

@@ -379,7 +379,7 @@ namespace molilian.core
             {
                 var ts = DateTime.Now - response.create_time;
                 response.elapsedTime = (int)ts.TotalMilliseconds;
-                RedisHelper.RPush(queue_jd_key, response);
+                _ = RedisHelper.RPushAsync(queue_jd_key, response);
                 saveCache(response.channel.ToString(), response.accountId, response.accountName, response.success, response.message, response.reason);
             }
             catch (Exception ex) { }
@@ -391,7 +391,7 @@ namespace molilian.core
             {
                 var ts = DateTime.Now - response.create_time;
                 response.elapsedTime = (int)ts.TotalMilliseconds;
-                RedisHelper.RPush(queue_tb_key, response);
+                _ = RedisHelper.RPushAsync(queue_tb_key, response);
                 saveCache(response.channel.ToString(), response.accountId, response.accountName, response.success, response.message, response.reason);
 
                 if (!response.success && "nologin".Equals(response.message))
@@ -436,7 +436,7 @@ namespace molilian.core
             {
                 var ts = DateTime.Now - response.create_time;
                 response.elapsedTime = (int)ts.TotalMilliseconds;
-                RedisHelper.RPush(queue_parse_tb_key, response);
+                _ = RedisHelper.RPushAsync(queue_parse_tb_key, response);
                 saveParseCache(response.channel.ToString(), response.accountId, response.accountName, response.success, response.message, response.reason);
                 if (!string.IsNullOrEmpty(response.itemId)) TkOrderTrackingCore.SaveLinkSummary(response);
 
@@ -472,7 +472,7 @@ namespace molilian.core
             {
                 var ts = DateTime.Now - response.create_time;
                 response.elapsedTime = (int)ts.TotalMilliseconds;
-                RedisHelper.RPush(queue_coupon_key, response);
+                _ = RedisHelper.RPushAsync(queue_coupon_key, response);
                 saveCouponCache(response.channel.ToString(), response.accountId, response.accountName, response.success, response.message, response.reason);
 
                 if (!response.success && "nologin".Equals(response.message))
@@ -507,7 +507,7 @@ namespace molilian.core
             {
                 var ts = DateTime.Now - response.create_time;
                 response.elapsedTime = (int)ts.TotalMilliseconds;
-                RedisHelper.RPush(queue_parse_jd_key, response);
+                _ = RedisHelper.RPushAsync(queue_parse_jd_key, response);
                 saveParseCache(response.channel.ToString(), response.accountId, response.accountName, response.success, response.message, response.reason);
 
             }
@@ -519,7 +519,7 @@ namespace molilian.core
             {
                 var ts = DateTime.Now - response.create_time;
                 response.elapsedTime = (int)ts.TotalMilliseconds;
-                RedisHelper.RPush(queue_parse_dy_key, response);
+                _ = RedisHelper.RPushAsync(queue_parse_dy_key, response);
                 saveParseCache(response.channel.ToString(), response.accountId, response.accountName, response.success, response.message, response.reason);
 
             }
@@ -531,7 +531,7 @@ namespace molilian.core
             {
                 var ts = DateTime.Now - response.create_time;
                 response.elapsedTime = (int)ts.TotalMilliseconds;
-                RedisHelper.RPush(queue_parse_tool_key, response);
+                _ = RedisHelper.RPushAsync(queue_parse_tool_key, response);
                 saveParseCache(response.channel.ToString(), 0, "tool", response.success, response.message, response.reason);
             }
             catch (Exception ex) { }
@@ -586,6 +586,7 @@ namespace molilian.core
 
         }
 
+
         private static void saveParseCache(string channel, int accountId, string accountName, bool success, string message, string reason)
         {
             saveParseAccountCache("all", success, message, reason);

+ 8 - 7
molilian.core/Core/taoke/UnionParseCore.cs

@@ -29,7 +29,7 @@ namespace molilian.core
         {
             return channel switch
             {
-                "wemeet" => WemeetParse(content, ip, oaid),
+                "wemeet" => await WemeetParseAsync(content, ip, oaid),
                 "bdpan" => PanParse(content, ip, oaid),
                 "jd" => await JdParseAsync(content, ip, oaid),
                 "dy" => await DyParseAsync(content, ip, oaid),
@@ -38,14 +38,14 @@ namespace molilian.core
         }
 
 
-        public static APIResult WemeetParse(string content, string ip, string 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
             {
-                ToolParsePlus.WemeetParse(content, ref result);
+                result = await ToolParsePlus.WemeetParseAsync(content, result);
             }
             catch (Exception ex)
             {
@@ -145,7 +145,7 @@ namespace molilian.core
             result.rawContent = content;
             try
             {
-                bool is_other = AlimamaPlus.OtherPlatform(content);
+                bool is_other = await AlimamaPlus.OtherPlatformAsync(content);
                 stopwatch.Stop();
                 swData.Add("OtherPlatform", stopwatch.ElapsedMilliseconds);
 
@@ -250,7 +250,7 @@ namespace molilian.core
                 stopwatch.Stop();
                 swData.Add("AlimamaPlus", stopwatch.ElapsedMilliseconds);
 
-                int timeout = alimama._config.rt_max - result.elapsedTime2;
+                int timeout = alimama._config.rt_max;
                 using var cts = new CancellationTokenSource();
                 cts.CancelAfter(timeout);
 
@@ -333,7 +333,8 @@ namespace molilian.core
             });
         }
 
-        public static async Task<APIResult> TaobaoParseAsync222(string content, string ip = "", string oaid = "")
+        public static async Task<APIResult> TaobaoParseAsync222(string content,
+            string ip = "", string oaid = "")
         {
             AlimamaPlus alimama = null;
             content = content.UrlDecode();
@@ -347,7 +348,7 @@ namespace molilian.core
             result.rawContent = content;
             try
             {
-                bool is_other = AlimamaPlus.OtherPlatform(content);
+                bool is_other = await AlimamaPlus.OtherPlatformAsync(content);
                 stopwatch.Stop();
                 log.Info($"AlimamaPlus.OtherPlatform\t{stopwatch.ElapsedMilliseconds}");
 

+ 8 - 4
molilian.core/Plus/Alimama/parse.cs

@@ -104,6 +104,7 @@ namespace molilian.core
                 swData.Add("InternalTextProcessingAsync", stopwatch.ElapsedMilliseconds);
             }
 
+
             //(result.success, result.content, result.link_type, result.shortLinkurl) = InternalTextProcessing(content);
             if (result.link_type == LinkTypeEnum.other_aff)
             {
@@ -121,8 +122,11 @@ namespace molilian.core
             else
             {
                 //处理过后的正文 用于转链
-                if (!result.success) { result.content = content; }
-
+                if (!result.success)
+                {
+                    result.content = content;
+                    return result;
+                }
 
                 if (swData != null)
                 {
@@ -260,12 +264,12 @@ namespace molilian.core
             }
             return false;
         }
-        public static bool OtherPlatform(string content)
+        public static async Task<bool> OtherPlatformAsync(string content)
         {
             try
             {
                 //腾讯会议
-                string wemeetId = ToolParsePlus.GetWemeetId(content);
+                string wemeetId = await ToolParsePlus.GetWemeetIdAsync(content);
                 if (!string.IsNullOrEmpty(wemeetId)) return true;
 
                 //百度网盘

+ 52 - 2
molilian.core/Plus/Alimama/parse_2.cs

@@ -5,11 +5,45 @@ using System.Text.Json;
 using TencentCloud.Fmu.V20191213.Models;
 using System;
 using MySqlX.XDevAPI;
+using static dodohold.core.ZTOExpress.CreateOrderArgs;
+using System.Threading;
+using TencentCloud.Tcm.V20210413.Models;
 
 namespace molilian.core
 {
     public partial class AlimamaPlus
     {
+        public async Task<TkDataDTO> testTaskAsync()
+        {
+            string url = "https://www.taobao.com";
+            TkDataDTO result = new TkDataDTO();
+            WebClientUtility client = new WebClientUtility();
+            client.Timeout = TimeSpan.FromMilliseconds(100);
+
+
+
+
+            //var requestTask = alimama.UnionParse2Async(content, result, cts.Token, swData);
+            //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.itemName = "点击打开淘宝APP";
+            //}
+
+            return null;
+
+
+        }
+
         public void UnionParse2(string content, ref TkDataDTO result)
         {
             if ("veapi".Equals(_api) && _api_id > 0)
@@ -147,8 +181,8 @@ namespace molilian.core
                 return TimeSpan.FromMilliseconds(timeout);
             }
 
-            timeout = timeout - deduction;
-            if (timeout <= min) return TimeSpan.FromMilliseconds(min);
+            timeout -= deduction;
+            if (timeout <= min) return TimeSpan.FromMilliseconds(1);
             return TimeSpan.FromMilliseconds(min);
         }
 
@@ -451,6 +485,22 @@ namespace molilian.core
                 {
                     swData.Add("\tGetDesiredUrlAsync", sw.ElapsedMilliseconds);
                 }
+
+
+                if (result.elapsedTime2 >= _config.rt_max)
+                {
+                    result.success = false;
+                    result.message = "放弃转链";
+                    result.reason = "请求超时";
+                    result.itemName = "点击打开淘宝APP";
+                    return result;
+                    //cancellationToken.ThrowIfCancellationRequested();
+
+                }
+
+
+
+
                 if (success)
                 {
                     //排除已知的淘客链接

+ 45 - 11
molilian.core/Plus/Tool/ToolParsePlus.cs

@@ -139,10 +139,10 @@ namespace molilian.core
             result.deeplink_url = deeplink_url;
         }
 
-        public static void WemeetParse(string content, ref ToolParseDataDTO result, CancellationToken cancellationToken = default)
+        public static async Task<ToolParseDataDTO> WemeetParseAsync(string content,  ToolParseDataDTO result, CancellationToken cancellationToken = default)
         {
             string message = "OK";
-            string wemeetId = GetWemeetId(content);
+            string wemeetId =await GetWemeetIdAsync(content);
             if (string.IsNullOrEmpty(wemeetId))
             {
                 result.channel = TkChannelEnum.wemeet;
@@ -150,7 +150,7 @@ namespace molilian.core
                 result.success = false;
                 result.message = "转链失败";
                 result.reason = "内容不匹配";
-                return;
+                return result;
             }
 
             var deeplink_url = $"wemeet://page/inmeeting?meeting_code={wemeetId}";
@@ -160,8 +160,9 @@ namespace molilian.core
             result.success = true;
             result.message = message;
             result.deeplink_url = deeplink_url;
+            return result;
         }
-        public static string GetWemeetId(string content)
+        public static async Task<string> GetWemeetIdAsync(string content)
         {
             string pattern = @"#腾讯会议:(\d{3}-\d{3}-\d{3})";
             Regex regex = new Regex(pattern);
@@ -175,11 +176,11 @@ namespace molilian.core
                 meetingCode = meetingCode.Replace("-", "");
                 if (!string.IsNullOrEmpty(meetingCode)) return meetingCode;
             }
-            meetingCode = GetWemeetIdFromUrl(content);
+            meetingCode = await GetWemeetIdFromUrlAsync(content);
             return meetingCode;
         }
 
-        public static string? GetDesiredUrl(string url)
+        public static async Task<string> GetDesiredUrlAsync(string url)
         {
             try
             {
@@ -187,7 +188,7 @@ namespace molilian.core
                 {
                     AllowAutoRedirect = false
                 };
-                var response = client.Request(url);
+                var response = await client.RequestAsync(url);
                 if (!response.Successed) return null;
 
                 return response.Body();
@@ -199,7 +200,34 @@ namespace molilian.core
         }
 
 
-        public static string GetWemeetIdFromUrl(string content)
+
+        public static async Task<string> GetMeetingCodeAsync(string url)
+        {
+            try
+            {
+                url = url.Replace("/dm/", "/l/");
+                WebClientUtility client = new()
+                {
+                    AllowAutoRedirect = false
+                };
+                var response = await client.RequestAsync(url);
+                if (!response.Successed) return null;
+                if (response.ResponseMessage.StatusCode == System.Net.HttpStatusCode.Redirect)
+                {
+                    string redirectUrl = response.ResponseMessage?.Headers?.Location.ToString();
+                    //https://meeting.tencent.com/detail.html?mtoken=uGjRUgQFhvDCowb28odPQ__&meetingcode=116399514&sdkappid=1400115281&show8k=0
+
+                    string meetingCode = redirectUrl.GetContentPart("&meetingcode=", "&");
+                    return meetingCode;
+                }
+            }
+            catch (Exception ex)
+            {
+            }
+            return null;
+        }
+
+        public static async Task<string> GetWemeetIdFromUrlAsync(string content)
         {
             {
                 string pattern = @"https:\/\/meeting\.tencent\.com\/p\/([0-9]+)";
@@ -227,10 +255,16 @@ namespace molilian.core
                 {
                     // 提取会议编码
                     string meeting_url = match.Value;
-                    var body = GetDesiredUrl(meeting_url);
-                    if (string.IsNullOrEmpty(body)) return string.Empty;
 
-                    string meetingCode = body.GetContentPart("\"meeting_code\":\"", "\"");
+                    //重定向获取会议Code
+                    string meetingCode = await GetMeetingCodeAsync(meeting_url);
+                    if (string.IsNullOrEmpty(meetingCode))
+                    {
+                        //正文获取Code
+                        string body = await GetDesiredUrlAsync(meeting_url);
+                        if (string.IsNullOrEmpty(body)) return string.Empty;
+                        meetingCode = body.GetContentPart("\"meeting_code\":\"", "\"");
+                    }
                     return meetingCode;
                 }
                 return string.Empty;

Certains fichiers n'ont pas été affichés car il y a eu trop de fichiers modifiés dans ce diff