diff options
author | Serghei Cebotari <51533848+schebotar@users.noreply.github.com> | 2021-12-24 17:43:04 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-12-24 17:43:04 +0300 |
commit | 0525ec1b42d5857b740dd0dae7f6d9baeb7088d1 (patch) | |
tree | 5d9c814fd023395d894ce36a9040cf7f7330198c /Source/Assistant/SkuAssist.cs | |
parent | 8e5db1238ad3ed97f51d9f0a9c7de83c00a12983 (diff) | |
parent | 20cfbfcca3a779c04aecdca5e4b465651e2be42a (diff) |
Merge pull request #8 from schebotar/dev
Dev
Diffstat (limited to 'Source/Assistant/SkuAssist.cs')
-rw-r--r-- | Source/Assistant/SkuAssist.cs | 96 |
1 files changed, 6 insertions, 90 deletions
diff --git a/Source/Assistant/SkuAssist.cs b/Source/Assistant/SkuAssist.cs index e8ce789..6c68288 100644 --- a/Source/Assistant/SkuAssist.cs +++ b/Source/Assistant/SkuAssist.cs @@ -1,24 +1,7 @@ -using AngleSharp.Dom; -using ExcelDna.Integration; -using Newtonsoft.Json; -using System; -using System.Globalization; -using System.Linq; -using System.Runtime.Caching; -using System.Text.RegularExpressions; -using System.Threading.Tasks; +using System.Threading.Tasks; -namespace Rehau.Sku.Assist +namespace RehauSku.Assistant { - public enum ResponseOrder - { - NoSettings, - Relevance, - Name, - Price, - Series - } - public enum ProductField { Name, @@ -28,79 +11,12 @@ namespace Rehau.Sku.Assist static class SkuAssist { - public static async Task<IProduct> GetProduct(string request) + public static async Task<IProduct> GetProductAsync(string request) { - Uri uri = request.ConvertToUri(ResponseOrder.NoSettings); - - Task<string> contentTask = Task.Run(() => HttpClientUtil.GetContentByUriAsync(uri)); - Task<IDocument> documentTask = await contentTask.ContinueWith(content => HttpClientUtil.ContentToDocAsync(content)); - - return GetProduct(documentTask.Result); - } - - public static IProduct GetProduct(IDocument d) - { - string script = d.Scripts - .Where(s => s.InnerHtml.Contains("dataLayer")) - .First() - .InnerHtml; - - string json = script - .Substring(script.IndexOf("push(") + 5) - .TrimEnd(new[] { ')', ';', '\n', ' ' }); - - if (!json.Contains("impressions")) - return null; - - StoreResponce storeResponse = JsonConvert.DeserializeObject<StoreResponce>(json); - IProduct product = storeResponse - .Ecommerce - .Impressions - .Where(p => Regex.IsMatch(p.Id, @"\d{11}", RegexOptions.None)) - .FirstOrDefault(); - - return product; - } - - public static object GetProduct(string request, ProductField field) - { - IProduct product; - - if (MemoryCache.Default.Contains(request)) - { - product = MemoryCache.Default[request] as IProduct; - } - - else - { - object result = ExcelAsyncUtil.Run("RauName", new[] { request }, - delegate - { - Task<IProduct> p = Task.Run(() => GetProduct(request)); - return p.Result; - }); - - if (result == null) - return "Не найдено :("; - - if (result.Equals(ExcelError.ExcelErrorNA)) - return "Загрузка..."; - - product = result as IProduct; - MemoryCache.Default.Add(request, product, DateTime.Now.AddMinutes(10)); - } + var content = await HttpClientUtil.GetContentByRequest(request); + var document = await ParseUtil.ContentToDocAsync(content); - switch (field) - { - case ProductField.Name: - return product.Name; - case ProductField.Id: - return product.Id; - case ProductField.Price: - return double.Parse((string)product.Price, CultureInfo.InvariantCulture); - default: - return ExcelError.ExcelErrorValue; - } + return ParseUtil.GetProduct(document); } } }
\ No newline at end of file |