diff options
author | Serghei Cebotari <51533848+schebotar@users.noreply.github.com> | 2021-11-29 17:17:16 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-11-29 17:17:16 +0300 |
commit | f5799a28eaef3f3ea24ba56dc16970d6203b73fd (patch) | |
tree | 9532114d293af3b356630f34f0a57781a75e9939 /src | |
parent | 5fc6d09f63d843ce65eb4d9fb7cc35df2ea6cc1e (diff) | |
parent | f3b6bfcd3e13519f648c3975d19b8f1d48130059 (diff) |
Merge pull request #2 from schebotar/dev
bDev
Diffstat (limited to 'src')
-rw-r--r-- | src/Assistant/IProduct.cs | 9 | ||||
-rw-r--r-- | src/Assistant/Product.cs | 21 | ||||
-rw-r--r-- | src/Assistant/SkuAssist.cs | 45 | ||||
-rw-r--r-- | src/ExcelDNA/AddIn.cs | 24 | ||||
-rw-r--r-- | src/ExcelDNA/Functions.cs | 21 |
5 files changed, 120 insertions, 0 deletions
diff --git a/src/Assistant/IProduct.cs b/src/Assistant/IProduct.cs new file mode 100644 index 0000000..aca3ff5 --- /dev/null +++ b/src/Assistant/IProduct.cs @@ -0,0 +1,9 @@ +namespace Rehau.Sku.Assist +{ + interface IProduct + { + string Sku { get; } + string Name { get; } + string Uri { get; } + } +} diff --git a/src/Assistant/Product.cs b/src/Assistant/Product.cs new file mode 100644 index 0000000..17a7065 --- /dev/null +++ b/src/Assistant/Product.cs @@ -0,0 +1,21 @@ +namespace Rehau.Sku.Assist +{ + public class Product : IProduct + { + public string Sku { get; } + public string Name { get; } + + public string Uri => throw new System.NotImplementedException(); + + public Product(string sku, string name) + { + Sku = sku; + Name = name; + } + + public override string ToString() + { + return $"{this.Name} ({this.Sku})"; + } + } +}
\ No newline at end of file diff --git a/src/Assistant/SkuAssist.cs b/src/Assistant/SkuAssist.cs new file mode 100644 index 0000000..dc36dc0 --- /dev/null +++ b/src/Assistant/SkuAssist.cs @@ -0,0 +1,45 @@ +using AngleSharp; +using AngleSharp.Dom; +using System.Linq; +using System.Net; +using System.Net.Http; +using System.Text.RegularExpressions; +using System.Threading.Tasks; + +namespace Rehau.Sku.Assist +{ + static class SkuAssist + { + public async static Task<string> GetContent(string request, HttpClient httpClient) + { + string uri = "https://shop-rehau.ru/catalogsearch/result/?q=" + request._CleanRequest(); + ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls; + + return await httpClient.GetStringAsync(uri); + } + + public async static Task<IDocument> GetDocument(Task<string> source) + { + IConfiguration config = Configuration.Default; + IBrowsingContext context = BrowsingContext.New(config); + + return await context.OpenAsync(req => req.Content(source.Result)); + } + + public static IProduct GetProductFromDocument(IDocument document) + { + return document + .All + .Where(e => e.ClassName == "product-item__desc-top") + .Select(e => new Product(e.Children[0].TextContent, e.Children[1].TextContent.Trim(new[] { '\n', ' ' }))) + .FirstOrDefault(); + } + + private static string _CleanRequest(this string input) + { + return input.Replace("+", " plus "); + } + } +} + + diff --git a/src/ExcelDNA/AddIn.cs b/src/ExcelDNA/AddIn.cs new file mode 100644 index 0000000..dd99667 --- /dev/null +++ b/src/ExcelDNA/AddIn.cs @@ -0,0 +1,24 @@ +using ExcelDna.Integration; +using ExcelDna.Registration; + +namespace Rehau.Sku.Assist +{ + public class AddIn : IExcelAddIn + { + public void AutoOpen() + { + RegisterFunctions(); + } + + public void AutoClose() + { + } + + void RegisterFunctions() + { + ExcelRegistration.GetExcelFunctions() + .ProcessAsyncRegistrations(nativeAsyncIfAvailable: false) + .RegisterFunctions(); + } + } +} diff --git a/src/ExcelDNA/Functions.cs b/src/ExcelDNA/Functions.cs new file mode 100644 index 0000000..ec9c607 --- /dev/null +++ b/src/ExcelDNA/Functions.cs @@ -0,0 +1,21 @@ +using AngleSharp.Dom; +using ExcelDna.Integration; +using System.Net.Http; +using System.Threading.Tasks; + +namespace Rehau.Sku.Assist +{ + public class Functions + { + private static HttpClient _httpClient = new HttpClient(); + + [ExcelFunction] + public static async Task<string> RAUNAME(string request) + { + Task<string> contentTask = Task.Run(() => SkuAssist.GetContent(request, _httpClient)); + Task<IDocument> documentTask = await contentTask.ContinueWith(content => SkuAssist.GetDocument(content)); + IProduct product = await documentTask.ContinueWith(doc => SkuAssist.GetProductFromDocument(doc.Result)); + return product == null ? ExcelError.ExcelErrorNull.ToString() : product.ToString(); + } + } +}
\ No newline at end of file |