From 2290f1b3403640025cbf2522f83f53b5913470c9 Mon Sep 17 00:00:00 2001 From: Sergey Chebotar Date: Thu, 11 Nov 2021 21:13:21 +0300 Subject: [PATCH] =?UTF-8?q?=D1=80=D0=B5=D0=B0=D0=BB=D0=B8=D0=B7=D0=B0?= =?UTF-8?q?=D1=86=D0=B8=D1=8F=20=D0=B0=D1=81=D0=B8=D0=BD=D1=85=D1=80=D0=BE?= =?UTF-8?q?=D0=BD=D0=BD=D0=BE=D0=B3=D0=BE=20=D0=BC=D0=B5=D1=82=D0=BE=D0=B4?= =?UTF-8?q?=D0=B0=20=D1=84=D0=BE=D1=80=D0=BC=D1=83=D0=BB=D1=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Functions.cs | 9 +++++++-- SkuAssist.cs | 33 ++++++++++++++------------------- 2 files changed, 21 insertions(+), 21 deletions(-) diff --git a/Functions.cs b/Functions.cs index 999a942..576e03c 100644 --- a/Functions.cs +++ b/Functions.cs @@ -5,10 +5,15 @@ namespace Rehau.Sku.Assist public class Functions : IExcelAddIn { [ExcelFunction(description: "Получение наименования и артикула позиции")] - public static string RAUNAME(string request) + public static object RAUNAME(string request) { SkuAssist.EnsureHttpInitialized(); - return SkuAssist.GetSku(request); + + return ExcelTaskUtil.Run("RAUNAME ASYNC", request, async token => + { + var document = await SkuAssist.GetDocumentAsync(request); + return SkuAssist.GetResultFromDocument(document); + }); } public void AutoClose() diff --git a/SkuAssist.cs b/SkuAssist.cs index b873104..1c0be3b 100644 --- a/SkuAssist.cs +++ b/SkuAssist.cs @@ -18,38 +18,33 @@ namespace Rehau.Sku.Assist } } - public static string GetSku(string request) + public async static Task GetDocumentAsync(string request) { string url = "https://shop-rehau.ru/catalogsearch/result/?q=" + request; - HttpResponseMessage response = GetResponse(url).Result; - var document = GetDocument(response).Result; - var name = document - .All - .Where(e => e.ClassName == "product-item__desc-top") - .Select(e => new { sku = e.Children[0].TextContent, name = e.Children[1].TextContent.Trim(new[] { '\n', ' ' }) }) - .Where(t => !t.sku.Any(c => char.IsLetter(c))) - .FirstOrDefault(); - - return name == null ? "Не найдено" : $"{name.name} ({name.sku})"; - } - - private static async Task GetResponse(string url) - { ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls; HttpResponseMessage response = await _httpClient.GetAsync(url); response.EnsureSuccessStatusCode(); - return response; - } - private static async Task GetDocument(HttpResponseMessage response) - { + IConfiguration config = Configuration.Default; IBrowsingContext context = BrowsingContext.New(config); string source = await response.Content.ReadAsStringAsync(); return await context.OpenAsync(req => req.Content(source)); } + + public static string GetResultFromDocument(AngleSharp.Dom.IDocument document) + { + var result = document + .All + .Where(e => e.ClassName == "product-item__desc-top") + .Select(e => new { sku = e.Children[0].TextContent, title = e.Children[1].TextContent.Trim(new[] { '\n', ' ' }) }) + .Where(t => !t.sku.Any(c => char.IsLetter(c))) + .FirstOrDefault(); + + return result == null ? "Не найдено" : $"{result.title} ({result.sku})"; + } } }