diff options
Diffstat (limited to 'Source/Assistant')
-rw-r--r-- | Source/Assistant/IProduct.cs | 9 | ||||
-rw-r--r-- | Source/Assistant/Product.cs | 21 | ||||
-rw-r--r-- | Source/Assistant/SkuAssist.cs | 80 |
3 files changed, 110 insertions, 0 deletions
diff --git a/Source/Assistant/IProduct.cs b/Source/Assistant/IProduct.cs new file mode 100644 index 0000000..aca3ff5 --- /dev/null +++ b/Source/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/Source/Assistant/Product.cs b/Source/Assistant/Product.cs new file mode 100644 index 0000000..17a7065 --- /dev/null +++ b/Source/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/Source/Assistant/SkuAssist.cs b/Source/Assistant/SkuAssist.cs new file mode 100644 index 0000000..152dbbb --- /dev/null +++ b/Source/Assistant/SkuAssist.cs @@ -0,0 +1,80 @@ +using AngleSharp; +using AngleSharp.Dom; +using System; +using System.Linq; +using System.Net; +using System.Net.Http; +using System.Threading.Tasks; + +namespace Rehau.Sku.Assist +{ + static class SkuAssist + { + private static HttpClient _httpClient; + private enum ResponseOrder + { + NoSettings, + Relevance, + Name, + Price, + Series + } + private static void _EnsureHttpClientRunning() + { + if (_httpClient == null) + _httpClient = new HttpClient(); + } + + public async static Task<string> GetContent(string request) + { + Uri uri = _ConvertToUri(request, ResponseOrder.NoSettings); + _EnsureHttpClientRunning(); + 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 Uri _ConvertToUri(this string request, ResponseOrder order) + { + string cleanedRequest = request._CleanRequest(); + switch (order) + { + case ResponseOrder.Relevance: + return new Uri("https://shop-rehau.ru/catalogsearch/result/index/?dir=asc&order=relevance&q=" + cleanedRequest); + case ResponseOrder.Name: + return new Uri("https://shop-rehau.ru/catalogsearch/result/index/?dir=asc&order=name&q=" + cleanedRequest); + case ResponseOrder.Price: + return new Uri("https://shop-rehau.ru/catalogsearch/result/index/?dir=asc&order=price&q=" + cleanedRequest); + case ResponseOrder.Series: + return new Uri("https://shop-rehau.ru/catalogsearch/result/index/?dir=asc&order=sch_product_series&q=" + cleanedRequest); + case ResponseOrder.NoSettings: + return new Uri("https://shop-rehau.ru/catalogsearch/result/?q=" + cleanedRequest); + default: + throw new ArgumentException(); + } + } + private static string _CleanRequest(this string input) + { + return input.Replace("+", " plus "); + } + } +} + + |