private void CreateCategoryTree(List <List <ZlItem> > breadcrumbs, ZlShortCategory category) { if (breadcrumbs.All(x => !x.Any())) { return; } category.Categories = breadcrumbs .GroupBy(el => el.FirstOrDefault()) .Where(el => el.Key != null) .Select(el => new ZlShortCategory { UrlKey = el.Key.UrlKey, FullUrl = el.Key.FullUrl, Label = el.Key.Label }) .ToList(); foreach (var cat in category.Categories) { var partOfBreadcrumbs = breadcrumbs .Where(el => { var firstElem = el.FirstOrDefault(); return(firstElem != null && string.Equals(firstElem.UrlKey, cat.UrlKey)); }).Select(el => el.Skip(1).ToList()) .ToList(); CreateCategoryTree(partOfBreadcrumbs, cat); } }
private async Task CreateCategoryNamesMapping(ZlShortCategory categories, CategoryNamesMapping categoryNamesMapping) { if (categories.Categories is null) { return; } if (categoryNamesMapping.CategoryNamesMappings is null) { categoryNamesMapping.CategoryNamesMappings = new List <CategoryNamesMapping>(); } var symbolsRegex = new Regex("[^A-Za-z-а-яА-Яіїє.,_/0-9%$&*()+=`~@!# \t\n]"); var notSlugAlphabet = new Regex("[^a-zA-Z0-9\\s\\-]"); var spaceRegex = new Regex("\\s"); var enRegex = new Regex("[^A-Za-z\\s]"); var spaceCharacterAtStartOrEnd = new Regex("^\\s*|\\s*$"); foreach (var cl in categories.Categories) { var cnm = new CategoryNamesMapping(); cnm.Name = symbolsRegex.Replace(await _googleTranslationService.TranslateTextAsync(cl.Label, "uk", "pl"), ""); cnm.Slug = spaceRegex .Replace(spaceCharacterAtStartOrEnd .Replace(notSlugAlphabet .Replace(_transliterationService.TransliterateUaToEnUtf(cnm.Name), ""), ""), "-") .ToLower(); cnm.PlSlug = cl.UrlKey; cnm.PlName = cl.Label; categoryNamesMapping.CategoryNamesMappings.Add(cnm); } for (int i = 0; i < categories.Categories.Count(); i++) { await CreateCategoryNamesMapping(categories.Categories.ElementAt(i), categoryNamesMapping.CategoryNamesMappings.ElementAt(i)); } }
public async Task <IEnumerable <ZlShortCategory> > GetCategoryTree(string plZalandoUrl) { if (string.IsNullOrEmpty(plZalandoUrl)) { throw new ArgumentNullException(nameof(plZalandoUrl)); } var breadcrumbs = new List <List <ZlItem> >(); var downloadFirstLevel = await DownloadCategoryLevel($"{plZalandoUrl}/api/catalog/articles?categories=katalog", 0); var firstLevel = downloadFirstLevel.Item2; breadcrumbs.AddRange(downloadFirstLevel.Item1); var secondLevel = new List <ZlCategory>(); foreach (var cat in firstLevel) { try { var downloadSecondLevel = await DownloadCategoryLevel($"{plZalandoUrl}/api/catalog/articles?categories={cat.UrlKey}", 0); breadcrumbs.AddRange(downloadSecondLevel.Item1); secondLevel.AddRange(downloadSecondLevel.Item2); Thread.Sleep(500); } catch { var downloadSecondLevel = await DownloadCategoryLevel($"{plZalandoUrl}/api/catalog/articles?categories={cat.UrlKey}", 0); breadcrumbs.AddRange(downloadSecondLevel.Item1); secondLevel.AddRange(downloadSecondLevel.Item2); Thread.Sleep(500); } } var thirdLevel = new List <ZlCategory>(); foreach (var cat in secondLevel) { try { var downloadThirdLevel = await DownloadCategoryLevel($"{plZalandoUrl}/api/catalog/articles?categories={cat.UrlKey}", 1); breadcrumbs.AddRange(downloadThirdLevel.Item1); thirdLevel.AddRange(downloadThirdLevel.Item2); Thread.Sleep(500); } catch { var downloadThirdLevel = await DownloadCategoryLevel($"{plZalandoUrl}/api/catalog/articles?categories={cat.UrlKey}", 1); breadcrumbs.AddRange(downloadThirdLevel.Item1); thirdLevel.AddRange(downloadThirdLevel.Item2); Thread.Sleep(500); } } var fourthLevel = new List <ZlCategory>(); foreach (var cat in thirdLevel) { try { var downloadFourthLevel = await DownloadCategoryLevel($"{plZalandoUrl}/api/catalog/articles?categories={cat.UrlKey}", 2); breadcrumbs.AddRange(downloadFourthLevel.Item1); fourthLevel.AddRange(downloadFourthLevel.Item2); Thread.Sleep(500); } catch { var downloadFourthLevel = await DownloadCategoryLevel($"{plZalandoUrl}/api/catalog/articles?categories={cat.UrlKey}", 2); breadcrumbs.AddRange(downloadFourthLevel.Item1); fourthLevel.AddRange(downloadFourthLevel.Item2); Thread.Sleep(500); } } Thread.Sleep(5000); var fiveLevel = new List <ZlCategory>(); foreach (var cat in fourthLevel) { try { var downloadFiveLevel = await DownloadCategoryLevel($"{plZalandoUrl}/api/catalog/articles?categories={cat.UrlKey}", 3); breadcrumbs.AddRange(downloadFiveLevel.Item1); fiveLevel.AddRange(downloadFiveLevel.Item2); Thread.Sleep(500); } catch { var downloadFiveLevel = await DownloadCategoryLevel($"{plZalandoUrl}/api/catalog/articles?categories={cat.UrlKey}", 3); breadcrumbs.AddRange(downloadFiveLevel.Item1); fiveLevel.AddRange(downloadFiveLevel.Item2); Thread.Sleep(500); } } Thread.Sleep(5000); foreach (var cat in fiveLevel) { try { breadcrumbs.AddRange(await DownloadBreadcrumbs($"{plZalandoUrl}/api/catalog/articles?categories={cat.UrlKey}")); Thread.Sleep(500); } catch { breadcrumbs.AddRange(await DownloadBreadcrumbs($"{plZalandoUrl}/api/catalog/articles?categories={cat.UrlKey}")); Thread.Sleep(500); } } var category = new ZlShortCategory(); CreateCategoryTree(breadcrumbs, category); return(category.Categories); }